Communicate with an External Audio File slot?
-
mmm. Thanks for your explanation.
Yes the detune is per voice. There are going to be situations where multiple of the same note are triggered and held at once.
And each voice (despite them being the same note) needs it's own playback speed modulation.Sounds like this is unfortunately more complex than I anticipated. I think this shall take me some time, Kontakt is certainly nice when it comes to this kind of thing, I remember I scripted my entire end goal in an evening : /
It shall certainly not be the case here.if I'm being specific, I am aiming to script a hierarchy of control.
First I need to be able to collect all notes separately and control the pitch of each note.
Then within that I need access to the pitches of the voices belonging to each note.Notes don't need to know about each other.
But the main system needs create and set this pitch data for any note that starts playing. It's quite a procedural thing. -
- create a global Event = {}; at the start of your interface script or in a separate script before.
- in your synth midi script, whenever you play a note, store it into the Event object. Decide on a data model and initialise the necessary properties and call reserve on any arrays that you create in the Event object
- Access your note ids in the interface script. You can use 2d arrays to keep a nice track of events played per note, just remember to call reserve on all of them.
- Write data to the manager using setEventData
- Use the data back down in the synth midi processor either in the timer callback or in scriptnode itself using event nodes to access the slot (when polyphonic, a stream of the network is created per voice so the polyphonic nodes will work independently. You cannot see this as you cannot see an individual voice's network stream and the values on node parameters per voice, you have to use your ears here. I.e. the network will always show the last voice to be played and what's happening with its nodes).
-
Thank you, you've been very helpful.
I think I shall start by figuring out the Event and midi system.
Something that perhaps makes this a 'little' easier is that I realised in this design I will be intercepting all of the midi data, and writing my own based on the input. It's 100% controlled, so I am going to start with figuring that out.Success.
-
@griffinboy You can use Message.ignoreEvent(); That specific callback will still execute, but the input message will not go beyond that processor.
If you now spawn 5 events using Synth.play, The children synths (but not the midi scripts within the same processor / sibling midi scripts) will receive 5 messages. All of them will have a positive isArtificial() return.
They will share the same IDs that they returned when you played them in the parent's midi script, so you can query that within your global object and do individual processing down the line (in case you need delaying, ignoring etc.).
-
Fantastic, thanks again for your help.
-
One last thing: You wouldn't happen to know how to stop Hise from killing voices with duplicate notes?
Unfortunately I am very foolish when it comes to Events and Hise. Completely new area for me. -
For the sampler, check the settings on it, there's a voice handling dropdown.
-
-
@griffinboy Get a reference to your custom synth and call
Synth.setShouldKillRetriggerredNote(false);
This is on by default. -
It's not liking it
-
-
-