Best practice for one shot sample playback with
-
I'd like to build an instrument that is going to be triggered by drum type MIDI tracks. You know – these are only sending note on messages but not the note offs.
However, I want to add a note off signal in order make the user able to set a duration the sample gonna play for (experimental thing, bass drum / bassline hybrid).
What would be best practice for this?
I found a solution based on Synth.startTimer and Synth.stopTimer:
function onNoteOn() { // If instrument receives GM Bass Drum message (Note 36), play it with a tune that was selected by the 'tuneSlider': if (Message.getNoteNumber() == 36) { Synth.playNote(tuneSlider.getValue(), Message.getVelocity()); Synth.startTimer(durationSlider.getValue()); } else {Message.ignoreEvent(true);} }
Since the Timer repeats by default I make use of stop.Timer() in the timer callback:
function onTimer() { Synth.noteOff(tuneSlider.getValue()); Synth.stopTimer(); }
I have the feeling there's a better way to do it. Would you recommend a different practice?
-
@Frankbeat I think there is a Synth.noteOffWithDelay function. You could use this immediately after your Synth.playNote call.
-
@Frankbeat I'm not the midi event expert here but I'd do it this way (until someone corrects me):
// init script reg id; reg delay; inline function onKnob1Control(component, value) { delay = Engine.getSampleRate() * value / 1000; }; Content.getComponent("Knob1").setControlCallback(onKnob1Control);
function onNoteOn() { id = Message.makeArtificial(); Synth.noteOffDelayedByEventId(id, delay); }
HiseSnippet 1131.3oc4WEsbaTCEUarU.6BYnc5vzG2oSevgIDrg1ByjgoahicGOsNwi2zBu0QYWs1ZhVoEsZCXX5u.7Iva7cvq7WvmP+CfqzZmccXSpwP6CfeHw2qtWoit2iNRdjRFPSSkJjSiSlkPQNuG1elPOs6TBSfFbHxYK7PRplpbyccvrDRZJMD43T6wFGNMpired0iNfvIh.ZgKD54RV.8orXltv6Humv379jP5Ir3RQeeuAARQWIWlA3oFtMJgDbFYB8HhIrMvHmM6ExzRkulnooHm5GHCm4OU9sh73eNKkcJmZL5f7gIJ2ceIOzfXy2Qcmx3giVruSQHG7nhpPs7pvswCYgrK7WTM9.6.tEYTtd3rwxvq1RvqyUAuJfjSIHUOGR2D6GnXI5hQL34F3ABn4DQfxdYnjGKZieyA2UBQHz6FSNi1WAFWjQqG1t8Ntve1dulMUzItrv8r+OjxIy.eLAmIntQYh.MSJbkhmHjm1wLiJIuUfLNQJf4dG2yI7L51M+glMr459kt8DSfb2cBU6ShS3zwPMo01teTdnteham1sauWyWtWyE.DBs6hYr0csqzc2d2TiW650kv4mBLhVKCC.7k.3QRM8XQKKTXg.NFBEKfCY296qzrHV.ivaAY0nYCKWeWgImnnCMHmFdvrdmCHXPXKV3N4kBH3W1z8xqRTT9xbowlCKNUU4vFNu55RrkHK9TppbM0DHPDVlcs4pwtBxqtkBTJFHX5iSnysKNdzoBtHZd6wvJmiPHTskSt0bNoOmERUHFLIuC11aPVvewY6e+G8POavgDMYwz.yHrJITniX1LNGROGTJxo5MvGRSOSKSrwNmQfbZ9ZWzuqPLg4M6BCOoWLKLjSGISYlhcwH+jGnsk3y9dZYgrXRwL48ydoYQQLvCF6FmhhkgPvahshWwkU.umG5udtETLjgYbhdYYDi147AL.p7YWy4SA.zYkgzk0Vpe0c+1UJ8UYucEg6MwiX5foUi2Mp.uPW9MMdmqT+93dQQz.cAXqi6+0Wqr7+5PYqbnbCrOn3YkTr.4Cs1teE4bp6ioBpxTT6bU2f9qN24WV0aPSV4aPONPCK+IJhHMQltzD6SiYm.GsRK67YovcDzuYroKW1eWIQU4Pu5Q8gMYk43SzYJKcY+XYlPuD8n1J2SJKls7olRwWwcn0eScs9a0id+yUJpsZv807JjFKvnOybadOw4TNHeaw3s.85HRFWuv6xj7gRgLYpTvBJy.FS0J1jITUYrW4FZesFt0uvys8FS4TRY1787dJvBIpgVs40pV72+EYU1utCNGttlSlt+2Pgu1+OU3GKyzLwjgDfnZt8+nrXePXMfBHQHnbXgvNaXDGysaaryUVEgVi+.9LevNFam4C1YwfuUViXRfR9hf72tY3xuq0CruE1eXUC3W3A1tW7nMLt8tsgm1DxdQPfob+wP8o5b9z0HmOaMx49qQNOXMx4gqQNe9ZjyWbs4XtLZ+LsLN+nH3XTO6imcb5IH.S1x5Q+IvcsSiu
-
@d-healey Cool, thanks! This seems to be exactly what I was looking for.
It's not listed in the Docs yet, or is it? -
-
-
@Frankbeat Let's rewind this to the beginning, as there seems to be a fundamental misunderstanding of the MIDI drum tracks.
Contrary to what you wrote, MIDI drum tracks DO contain note-off and note-length data, just like any other MIDI.
Some DAWs (like Cubase) allow you to use a drum editor where you are primarily looking at note-on locations and velocities, but that doesn't change the fact that note-off values are also there. You can switch the views and adjust note lengths and, therefore, the note-off locations. Exported MIDI files all contain note-on and note-off data.Playing or ignoring note-off values is always performed by the virtual instrument. In HISE, every sampler has settings whether to play the notes as single shots (playing the samples in their entirety irrespective of the note duration and note-off data) or to follow the note-on/note-off data fed through the MIDI input.
So, keeping this in mind, I suggest re-evaluating your approach as to what you want to achieve.
-
@gorangrooves I had to reinvestigate this and it seems you are right.
However, I remember some years ago I had an external MIDI Drum Pad instrument connected to trigger a Kontakt patch and when I hit a Pad and released my finger the samples would not decay though they had an envelope with a short release stage. IIRC a guy at Gearslutz told me this is because that type of gear doesn't send off messages. This appeared to be true at least for that one (though I don't remember what it was exactly).
-
@gorangrooves said in Best practice for one shot sample playback with:
In HISE, every sampler has settings whether to play the notes as single shots (playing the samples in their entirety irrespective of the note duration and note-off data) or to follow the note-on/note-off data fed through the MIDI input.
Where are these settings exactly? I deleted my AHDSR envelope now and when I trigger that patch, console says:
! You need at least one envelope in the gain chain
-
@Frankbeat said in Best practice for one shot sample playback with:
@gorangrooves said in Best practice for one shot sample playback with:
In HISE, every sampler has settings whether to play the notes as single shots (playing the samples in their entirety irrespective of the note duration and note-off data) or to follow the note-on/note-off data fed through the MIDI input.
Where are these settings exactly? I deleted my AHDSR envelope now and when I trigger that patch, console says:
! You need at least one envelope in the gain chain
You will find those settings under the "Sampler Settings" tab inside every sampler you add. You can set several important parameters there and you will have to experiment to fine-tune those for optimal performance.
You will want to set the playback to "one shot" for all those samples that you want to play fully.
For those you want to follow note-on/note-off, set it to "normal."Even if your percussion pad would not send note-off messages, that won't matter to HISE sampler if you set the playback to One Shot. However, I don't think the guy at Gearslutz advised you properly. If that was true and your pad was not sending the note-off message, the samples would keep playing (waiting on note-off) and not just prematurely stop. The issue was not with your pad, but with the Kontakt patch, you used. The samples there were likely not set as "one shots" and would therefore play the duration until note-off was received. Your pad was, in all likelihood sending the note-off, which was cutting short the length of the samples.
-
@Frankbeat said in Best practice for one shot sample playback with:
@gorangrooves said in Best practice for one shot sample playback with:
In HISE, every sampler has settings whether to play the notes as single shots (playing the samples in their entirety irrespective of the note duration and note-off data) or to follow the note-on/note-off data fed through the MIDI input.
Where are these settings exactly? I deleted my AHDSR envelope now and when I trigger that patch, console says:
! You need at least one envelope in the gain chain
you must have an envelope in the gain stage for every sound source, if you dont want the release to cut in then just set the release to the max.