suck notes with keyassigner script in silent synth
-
@Morphoice Does that need to be scripted? Isn't there a way directly in scriptnode to get those values and forward them to the faust node?
-
@David-Healey nope, we had this discussion here a long time ago and this was the only working way
-
@David-Healey i believe it was this thread
https://forum.hise.audio/topic/11793/polyphonic-aftertouch/34?_=1778856642370 -
@David-Healey there's also another bug in the hise/faust midi implementation.... if a key is held and the pedal released, the note stops. although the key is still held.... weird.
-
@Morphoice Does this happen if you swap your faust synth for a waveform gen, keeping everything else the same?
-
@David-Healey there is no waveform generator in a silent synth
-
@David-Healey i think i isolated the problem and filed an issue, it's in fact three problems
https://github.com/christophhart/HISE/issues/954 -
@David-Healey in the mean time i found a workaround to override the faust bug by handling the sustain logic in the keyassigner. this however breaks if more than 128 notes are played until the last pedal release. but i guess i could just reserve more slots
const globalRouting = Engine.getGlobalRoutingManager(); reg midiList = Engine.createMidiList(); reg pedalDown = false; reg pendingReleases = []; pendingReleases.reserve(128); inline function setPolyAfterTouch(eventId, slotIndex, value) { globalRouting.setEventData(eventId, slotIndex, value); } function onNoteOn() { // Make the event artificial so Synth.noteOffByEventId can release it later. // The HISE API only accepts artificial event ids (see ScriptingApi.cpp:5499-5510). midiList.setValue(Message.getNoteNumber(), Message.makeArtificial()); } function onNoteOff() { local n = Message.getNoteNumber(); local id = midiList.getValue(n); if (pedalDown) { // Defer: keep the voice alive until pedal release. pendingReleases.push(id); Message.ignoreEvent(true); } else { // Release the artificial voice. Let the real noteOff propagate too so // the synth can match older retriggered voices by note number. Synth.noteOffByEventId(id); } } function onController() { if (Message.getControllerNumber() == 64) { if (Message.getControllerValue() >= 64) { pedalDown = true; } else { pedalDown = false; for (id in pendingReleases) Synth.noteOffByEventId(id); pendingReleases.clear(); } Message.ignoreEvent(true); } } function onTimer() { } function onControl(number, value) { } -
@Morphoice said in suck notes with keyassigner script in silent synth:
if more than 128 notes are played until the last pedal release.
Can't you kill previous voices if the same note is played more than once?
-
@David-Healey no they need to ring out. i will probably limit it around 16 voice cards or something like a real synth would have