UVI Falcon - v4 = 2026 released - rumors, ads, praise, kindergarden, auto-sampling and off-topic inside!

VST, AU, AAX, CLAP, etc. Plugin Virtual Instruments Discussion
Post Reply New Topic
RELATED
PRODUCTS
Falcon

Post

Ingonator wrote:I just sampled the 16 waveforms in my Korg DW-8000......


Ingo
Ah, the old Korg DW-8000.

Brings back memories ... :)

Post

Thanks for the replies. A shame but not the end of the world. Just bounce and reimport into multi gran etc

Post

ThomasHelzle wrote: - It would be great to be able to define presets for scripts (or even inside scripts).
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: - 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?
You can't name the knob using spaces, but you can set the displayName which overrides the actual knob name once set:

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 :)

Post

wasi wrote:
ThomasHelzle wrote:
wasi wrote:
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.
No and yes it has been asked. :D 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.
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).
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
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.
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?

Cheers,

Tom
"Out beyond the ideas of wrongdoing and rightdoing, there is a field. I’ll meet you there." · Rumi
UrbanFlow.art · Instagram · YouTube

Post

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.
Not necessary anymore really, since Kontakt 5.4 it also has snapshot functionality - no need to have your own preset systems scripted.



And yeah, you can use displayName:

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"}

Post

Astralp wrote:
ThomasHelzle wrote: - It would be great to be able to define presets for scripts (or even inside scripts).
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: - 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?
You can't name the knob using spaces, but you can set the displayName which overrides the actual knob name once set:

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 :)
Thanks Astralp and EvilDragon for the replies

What is a snapshot and how do I save/load them?
Do you mean the saveData function?
I was more thinking about the Save/Load preset menu in the GUI, which in the case of the script processor saves the whole script - which in one way is logical since the script in a way IS the preset here, but from a user perspective it's not what I would expect or want.

I have to try displayName again, it didn't do anything the last time I tried.

As for the Popup: Since there already is a popup with the knob value by default, I did not try to set this to true. :dog: Let me try again...

Thanks!

Cheers,

Tom
"Out beyond the ideas of wrongdoing and rightdoing, there is a field. I’ll meet you there." · Rumi
UrbanFlow.art · Instagram · YouTube

Post

Hey Evil Dragon and Astralp,

the notation you used (all in one line) gives me an error, but as a separate command it works now. Not sure what I did wrong the last time I tried... :oops:
NoteProb.displayName = "Note Prob."

Why I thought the tooltip isn't working is because it is not a tooltip as I expected it to be...
NoteProb.showPopupDisplay = true/false
only enables and disables the default value popup on the knob (where I thought the message would show up).
NoteProb.tooltip = "Probability of the Note to be played"
does not do anything like a tooltip, but instead it shows the text in the footer of Falcons window. I simply did not see it there... :dog:
Still helpful and actually better for longer text, but not really clear from the docs.

The docs also could use a healthy dose of "what's the default value" and some deeper explanations - 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.

An update for my script is in the works :-)

Thanks everybody!

Cheers,

Tom
"Out beyond the ideas of wrongdoing and rightdoing, there is a field. I’ll meet you there." · Rumi
UrbanFlow.art · Instagram · YouTube

Post

It works over here. Make sure you put the Knob definition in squiggly parentheses instead of round ones.

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

BTW, the bottom of Falcon GUI _is_ the tooltip/popup area!

Post

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.
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).

I've asked for the getLocation to include the loaded Program path but it's apparently not advisable to use it. I still hope it will be included, the sort of product I am building would always be loaded from the same location and would be dealing with snapshots as opposed to Programs so the relative paths would always be the same. I can see how this could cause problems if someone then saved the program to a different location, although Falcon does remap the sample paths, maybe in the future there could be some way to remap the script paths too.

The other alternative is to use the UFS service which will include all resources and is a paid UVI service. I doubt this would work for me, I like to provide the RAW samples for use elsewhere, plus I tend to update my products quite frequently by scripting new ways to use the included samples etc... which would make life complicated.

Post

I also think something akin to NKR resource container that Kontakt has would be beneficial for Falcon, too. Not everyone has enough money for UVI Workstation licensing.

Post

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!
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...

Well, to me it was not clear what the tooltip refers to. :-)
I use big 30" monitors and ageing eyes and I didn't realize until now that sometimes there is help shown down there in the blury area... :oops: :wink:

Cheers,

Tom

@Astralp: I think we are in dire need of a setting in preferences for the user directory. I don't want any of this stuff on C: and if we had such a path, the user could put the library to wherever he has his Falcon library and it would be found. I actually don't see any alternative and would even want several paths, like for UFS.
Looks like growing pain ;-)
"Out beyond the ideas of wrongdoing and rightdoing, there is a field. I’ll meet you there." · Rumi
UrbanFlow.art · Instagram · YouTube

Post

Yeah, you can put all the parameters in one squiggly bracket. No need to have extra lines for additional parameters. You'll just have to prefix the parameter name.

Post

EvilDragon wrote:It works over here. Make sure you put the Knob definition in squiggly parentheses instead of round ones.
Doesn't work for me still. Do you have a newer build maybe?
Not important, I can do it with multiple lines just as well ;-)


Finally found the problem - working now! Thanks :-)

Cheers,

Tom
"Out beyond the ideas of wrongdoing and rightdoing, there is a field. I’ll meet you there." · Rumi
UrbanFlow.art · Instagram · YouTube

Post

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.
I want to add one thing...I also cannot get the parameters of Falcon to map in Ableton Live 9.5 either.

Post

Cinebient wrote: ..... o.k. it´s just missing then OSC as modulation source, resynthesis and a wavetable editor.
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.

SynthMaster can do FM or AM synthesis between different oscillators, and does wavetable synthesis and sampling as well. It doesn't do granular yet though, but that's supposed to be coming in a future update. Synthmaster's modulation sources aren't as unlimited as Falcon's though.

I really like Falcon so far, and hope that they add the ability to modulate one oscillator with another.

In the meantime, does anyone know if it would work well to use LFOs in audio frequency ranges to substitute for another oscilator with AM or FM modulation? I havne't had the chance to try that out yet.

Post Reply

Return to “Instruments”