Ah, the old Korg DW-8000.Ingonator wrote:I just sampled the 16 waveforms in my Korg DW-8000......
Ingo
Brings back memories ...
Ah, the old Korg DW-8000.Ingonator wrote:I just sampled the 16 waveforms in my Korg DW-8000......
Ingo
You can save and load snapshots but unfortunately there doesn't seem to be a way to browse them from within the script as yet as you can with Kontakt. It also requires absolute file paths. But outside of that the snapshots work very well, much easier than Kontakt where you have to build your own load/save functions and design your own format.ThomasHelzle wrote: - It would be great to be able to define presets for scripts (or even inside scripts).
You can't name the knob using spaces, but you can set the displayName which overrides the actual knob name once set:ThomasHelzle wrote: - I was unable to give the knobs names with spaces. I tried all the stuff from the docs I thought could be what I look for but to no avail. Can it be done?
Well, for that kind of stuff you would simply have to replace the sample in the individual samplers. May be impractical for larger stuff but for sounds using just a couple of samples it's quite usable. Or replace the whole keygroup or layer?wasi wrote:Thanks, at least there's a kind of workaround. I was thinking more the other way around though, as in 'how would this sound using another sample?'. The workaround is not practical for that kid of exploration. I hope they make the samples accessible in the future.ThomasHelzle wrote:Well, that isn't totally true - I just tried: if you go to the Sample oscillator for instance in "Mello" - Flutes and Oboe, you can save the sample out manually from the three-horizontal-lines menu. Of course this can get tedious for larger per-note samples, since you have to do it for every sample, especially since the "Save as" file dialog does not start with the original sample name by default (hint hint).wasi wrote:No and yes it has been asked.bundoo wrote:Is it possible to access the samples in soundbanks? Would be good to use them in granular oscillators etc. Sorry if already asked.I'm rather uninterested in even using my $100 voucher because of this. I understand the reasoning (and it's been explained again here by Simon/Sampleconstruct), but to state the obvious, it reduces the value of the product compared to one where you can use included samples - in your own (other) Falcon presets at least.
Saving the Program or Multi with samples as... did not work for me in this case.
You also can just start your own program with a program from the library and change the oscillator to a grain one etc.
IIRC Otristan said at one point that they may think about more direct access to the samples (I hope I understood him correctly) - it would indeed make buying libraries more interesting.
Cheers,
Tom
Not necessary anymore really, since Kontakt 5.4 it also has snapshot functionality - no need to have your own preset systems scripted.Astralp wrote:But outside of that the snapshots work very well, much easier than Kontakt where you have to build your own load/save functions and design your own format.
Code: Select all
NoteProb = Knob{"Note_Prob", 75, 0, 100, true, displayName="Note Chance"}
VeloProb = Knob{"Vel_Prob", 75, 0, 100, true, displayName="Vel Chance"}
VeloDepth = Knob{"Vel_Depth", 48, 1, 127, true, displayName="Vel Depth"}
VeloDir = Menu{"Vel_Dir", {"Up", "Down", "Both"}, displayName="Vel Direction"}
PanProb = Knob{"Pan_Prob", 75, 0, 100, true, displayName="Pan Chance"}
PanDepth = Knob{"Pan_Depth", 50, 0, 100, true, displayName="Pan Depth"}
PitchProb = Knob{"Pitch_Prob", 25, 0, 100, true, displayName="Pitch Chance"}
PitchDepth = Knob{"Pitch_Depth", 12, 0, 36, true, displayName="Pitch Depth"}
PitchDir = Menu{"Pitch_Dir", {"Up", "Down", "Both"}, displayName="Pitch Direction"}Thanks Astralp and EvilDragon for the repliesAstralp wrote:You can save and load snapshots but unfortunately there doesn't seem to be a way to browse them from within the script as yet as you can with Kontakt. It also requires absolute file paths. But outside of that the snapshots work very well, much easier than Kontakt where you have to build your own load/save functions and design your own format.ThomasHelzle wrote: - It would be great to be able to define presets for scripts (or even inside scripts).
You can't name the knob using spaces, but you can set the displayName which overrides the actual knob name once set:ThomasHelzle wrote: - I was unable to give the knobs names with spaces. I tried all the stuff from the docs I thought could be what I look for but to no avail. Can it be done?
someKnob.displayName = "Name with Spaces"
You can set any of the attributes in the same way one of which is to enable/ disable the showPopupDisplay
Code: Select all
-- Tom's MIDI Mangler for Falcon :-)
-- Copyright 2015
-- Free for personal use, when using it in commercial libraries, I'd be happy if you send me a copy... :-)
-- Contact me at thomas AT screendream DOT de
local modus = {
{"Chromatic", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
{"Major", {1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1}},
{"Minor", {1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0}},
{"Harmonic Minor", {1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1}},
{"Melodic Minor", {1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1}},
{"Pentatonic", {1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0}},
{"Dorian", {1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0}},
{"Phrygian", {1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0}},
{"Lydian", {1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1}},
{"Mixolydian", {1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0}},
{"Locrian", {1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0}},
{"Whole Tone", {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}},
{"Hungarian", {1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0}},
{"Phrygish", {1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0}},
{"Blues", {1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0}},
{"Arabic", {1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1}},
{"Persian", {1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1}},
{"Acoustic", {1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0}},
{"Harmonic Major", {1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1}}
}
local scale_list = {}
for i,m in ipairs(modus) do
table.insert(scale_list, m[1])
end
local note_list = {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}
-- GUI definition:
NoteProb = Knob{"Note_Prob", 75, 0, 100, true, displayName="Note Chance"} -- Probability of the Note to sound
NoteProb.position = {20, 10}
VeloProb = Knob{"Vel_Prob", 75, 0, 100, true, displayName="Vel Chance"} -- Probability for the Velocity to be changed
VeloProb.position = {160, 10}
VeloDepth = Knob{"Vel_Depth", 48, 1, 127, true, displayName="Vel Depth"} -- Maximum Velocity change
VeloDepth.position = {160, 60}
VeloDir = Menu{"Vel_Dir", {"Up", "Down", "Both"}, displayName="Vel Direction"} -- Should Velocity changes go up, down or both
VeloDir.position = {160, 110}
VeloDir.value = 3
PanProb = Knob{"Pan_Prob", 75, 0, 100, true, displayName="Pan Chance"} -- Probability for random Panning
PanProb.position = {300, 10}
PanDepth = Knob{"Pan_Depth", 50, 0, 100, true, displayName="Pan Depth"} -- Maximum Range for random Panning
PanDepth.position = {300, 60}
PitchProb = Knob{"Pitch_Prob", 25, 0, 100, true, displayName="Pitch Chance"} -- Probability of the pitch to be changed
PitchProb.position = {430, 10}
PitchDepth = Knob{"Pitch_Depth", 12, 0, 36, true, displayName="Pitch Depth"} -- Maximum Note range
PitchDepth.position = {430, 60}
PitchDir = Menu{"Pitch_Dir", {"Up", "Down", "Both"}, displayName="Pitch Direction"} -- Velocity going up, down or both
PitchDir.position = {430, 110}
PitchDir.value = 3
Scale = Menu("Scale", scale_list) -- What scale should be applied to the output
Scale.position = {580, 10}
Scale.value = 2
Key = Menu("Key", note_list) -- And in what key should it be
Key.position = {580, 60}
Key.value = 1
Play = Menu("Play", {"Only notes in scale", "Transpose to scale"}) -- How should the scale be applied
Play.position = {580, 110}
Play.value = 2
-- and this is where the magic happens :-)
function onNote(e)
-- Note probability - will the note be played at all?
if math.random(0, 99) < NoteProb.value then
-- Velocity probability - will velocity be changed or not for the note
local velo = e.velocity
if math.random(0, 99) < VeloProb.value then
-- If probability says yes, then we use a random value inside the set velocity depth range
-- Only upwards
if VeloDir.value == 1 then
velo = velo + math.random(0, math.min(VeloDepth.value, 127 - velo))
-- Only downwards
elseif VeloDir.value == 2 then
velo = velo - math.random(0, math.min(VeloDepth.value, velo))
-- Up- and downwards
elseif VeloDir.value == 3 then
velo = velo + math.random(-math.min(VeloDepth.value, velo), math.min(VeloDepth.value, 127 - velo))
end
end
-- Pan probability - should we change pan or not?
local pan = 50
if math.random(0, 99) < PanProb.value then
-- Pan only has a simple random range around the center, should do in most cases I think... if not, let me know. :-)
pan = pan + math.random(-PanDepth.value, PanDepth.value) * 0.01
end
-- Pitch probability - shall we change the note pitch?
local pitch = e.note
if math.random(0, 99) < PitchProb.value then
-- Again we have up, down, or both on offer
if PitchDir.value == 1 then
pitch = pitch + math.random(0, math.min(PitchDepth.value, 127 - pitch))
elseif PitchDir.value == 2 then
pitch = pitch - math.random(0, math.min(PitchDepth.value, pitch))
elseif PitchDir.value == 3 then
pitch = pitch + math.random(-math.min(PitchDepth.value, pitch), math.min(PitchDepth.value, 127 - pitch))
end
end
-- An finally we can put the result into a specific scale if we want
-- First we extract one octave:
local note = (pitch - Key.value + 1) % 12 + 1
-- And retrieve the user selected scale pattern:
local mode = modus[Scale.value][2]
-- The first case is simple: Only notes that are in the scale pattern go through:
if Play.value == 1 then
if mode[note] == 1 then
playNote(pitch, velo, -1, e.layer, e.channel, e.input, e.vol, pan)
end
-- The second case is more tricky
elseif Play.value == 2 then
-- First we let the notes through that fit the scale:
if mode[note] == 1 then
playNote(pitch, velo, -1, e.layer, e.channel, e.input, e.vol, pan)
-- But now we have to care for the missfits:
else
local offset = 0
-- A dummy variable that allows us to get a random value of either -1 or 1
local move = {-1, 1}
local tempNote = note
-- We calculate a random offset, in steps of one up or down, since we don't want the direction always to be the same
-- Since some scales have bigger gaps, we repeat this until we hit a scale note:
repeat
-- Here we calculate our offset. Since random returns values between and including the two integers, we can't directly
-- get either -1 or 1 (one note up or one note down), so I create values of either 1 or 2 and use them as an index in the
-- dummy variable "move" above.
offset = offset + move[math.random(1, 2)]
-- Fron that we create our temporary note for checking it against the scale:
tempNote = (pitch - Key.value + 1 + offset) % 12 + 1
-- And we do that until we find a fit - not totally optimal maybe, since random can in theory create the same up and down
-- movement many times before a fit is reached, but I would think the probability is low enough to not matter...
-- Otherwise a fixed pattern could be used that only once is given a random starting direction.
until mode[tempNote] == 1
-- we apply the same offset to our original pitch:
pitch = pitch + offset
-- And finally send the newly calculated note out:
playNote(pitch, velo, -1, e.layer, e.channel, e.input, e.vol, pan)
end
end
end
end
function onRelease()
-- eat event
end
This is the issue I have, basically as it stands you can only get the path for system folders such as Documents or user, which means you need to store all stuff loaded into a script under that folder structure, that way you can build an absolute path. I would prefer to keep everything, Programs, IRs, graphics in a single folder which is possible with a Kontakt release using the resource container. It isn't the end of the world but means that you have to store a sample based release in 2 locations (not many people want samples stored on their system drive).ThomasHelzle wrote:...a lot of things are not obvious to me, for instance paths to images, midi files, samples, IRs: where would I need to put stuff to make it portable between systems etc.
Ah, interesting. I guess this is some Lua magic? Can I put all the parameters in one curly bracket then in theory? Would save some typing...EvilDragon wrote:It works over here. Make sure you put the Knob definition in squiggly parentheses instead of round ones.
BTW, the bottom of Falcon GUI _is_ the tooltip/popup area!
Doesn't work for me still. Do you have a newer build maybe?EvilDragon wrote:It works over here. Make sure you put the Knob definition in squiggly parentheses instead of round ones.
I want to add one thing...I also cannot get the parameters of Falcon to map in Ableton Live 9.5 either.thejonsolo wrote:Could anyone here verify Falcon 1.0.1 crashing in Ableton Live 9.5.1b1 beta? Falcon 1.0 worked fine in both 9.5 and the beta. Updating to 1.0.1 causes the plugin to not be recognized by host. It is visible in the Plugins menu...but dragging it into a project causes an error box and Live shutdown.
Agreed on the oscillator as a modulator. That's the one thing I'd really love to see on Falcon! I'd really love to be able to do FM (frequency modulation) or AM (amplitude modulation or ring modulation) between different oscillator types. It's really missing that before it could compete with other hybrid synths like SynthMaster.Cinebient wrote: ..... o.k. it´s just missing then OSC as modulation source, resynthesis and a wavetable editor.
Submit: News, Plugins, Hosts & Apps | Advertise @ KVR | Developer Account | About KVR / Contact Us | Privacy Statement
© KVR Audio, Inc. 2000-2026