I’m looking to find the best way to trigger one-shot ramps for percussion sequencing and it seems that using a timer CHOP is the best way so far but maybe not as efficient as could be.
I’ve done a few tests to see the differenc between a few methods and have found some quirks I’d like some clarification on.
First of all, it seems like a trigger CHOP with “complete envelope” set to off is much more efficient on cook time than a timer CHOP but it also doesn’t permit the creation of a full 0-1 ramp off of a pulse.
Following that, turning “complete envelope” to on increases the cook-time, allows the creation of a complete ramp BUT it cannot be re-triggered.
Along with the overall increase in cook times from turning complete envelope on, I’ve noticed that the cook-time increases in proportion to the duration of the envelope. I’m not sure what that’s about but it seems a bit weird.
It seems to me that the best of both worlds would an additional mode in which a single pulse creates a complete envelope but can also re-trigger it from the beginning or some additional method of simply launching and re-triggering a ramp from 0-1.
The audio file in has a lower cook time than using the timer CHOP but the “cue pulse” parameter is limited to the frame rate of the session which makes it unsuitable for my needs.
Unfortunately there’s a few things that don’t make the event CHOP suitable for this one of which is that the ramps are made of a single sample in the event CHOP channel so it’s not possible to get a higher sample-rate for audio-playback like it is with the trigger CHOP.
IMO I think the event CHOP is a dead end. This is the best result I can get for audio-playback. It’s pretty clunky and introduces some artifacts through the re-sampling process. usingeventCHOP.toe (12.7 KB)
This is the much simpler network using the timer CHOP but it’s got a pretty hefty cook time for what it’s being used for. usingtimerCHOP.toe (12.8 KB) ( > 0.1ms on my computer)
Feels like if Event CHOP had a sample rate parameter, and was time-sliced, it could work. The "time’ channels (plural because Event can play multi-notes at the same time) would be sent to a Lookup CHOP, and the result to a Math CHOP to add them up… maybe. Timer you are running at 44100 samples per sec and getting .15 msec?
The event CHOP would be ok if I wanted each triggered audio snippet to overlap but we can already achieve that using the copy CHOP. The reason why I’m using the trim CHOP to in my event CHOP example is to only select out the most recent “event” is so that the sound is cut as it retriggers from the beginning but the way I have it set up results in artifacts from(I think) switching over from one “time channel” to the next.
The behaviour I’m looking for is similar to pulsing the cue parameter on an audio-file in CHOP but at higher sample-rates.
I’d like to add to this conversation by uploading a file which helps demonstrate why the audiofile in CHOP and the timer CHOP are dead-ends triggering samples.
Timer CHOP does everything you’d want… except it’s over 4 times the cost of playing back an audio file and, at the risk of repeating myself, it seems like many other more efficient CHOPs could be used after some modifications. (Maybe we can move this thread to RFEs?)
Keeping in mind that the goal is to trigger audio samples at high sample rates with as much flexibility as possible and that parameters update only per the session’s sample rate. I wouldn’t necessarily want to simply modify the audiofile in CHOP for this task.
For example, I wanted to change the start/end points of my play-back per trigger, I would rather do that by using a math CHOP to the playback ramp which I can set up at higher sample rates than have to rely on the cue start/end of the audiofilein CHOP.
Just a note before we come up with a general solution. Audio File In’s Cue - If you export with a 0-1-0 pulse, while it’s 1 (at least 1 frame), it will be parked at the cue point, giving 0 regardless.
I turned off the export at null1 and attached a CHOP Execute DAT and for onOffToOn() I pulsed, which doesn’t force it off for a frame, should start right away…
but it still isn’t perfect. The CHOP is still doing something to restart. So I tuned on Fade Out / In and audio never goes to 0 but fading isn’t a good solution. Increasing Pre-Read Length doesn’t help… so there’s something else there getting in the way. Anyway, looking at all possible solutions.
Also based on your example, we were able to speed up the Timer CHOP nearly double (1.8 msec to 1.0 msec) when running at high/audio sample rates.
Still room for improvement, but these changes will be available in builds 2022.20290+
Thank-you both for taking the time to look at my example.
Alternatively, I would propose having a “one shot” (single cycle) mode on the LFO/audio oscillator CHOP.
That way, you could either plug in your audio file directly into the playback source input and use the reset input to trigger it or you could pass any other sort of non time-sliced CHOP channels in there such as a trigger CHOP to achieve the same “output full envelope but still re-trigger” functionality.
Imho this would be useful. Maybe it’s just me, but I think people discover the trigger CHOP early in their early TD learning days and expect that it’s possible to create such a behavior .