Synchronize end of sample with new cycle

Hi all,

I am trying to achieve a "reverse cymbal" effect before transitioning to a new cycle. Tidal makes it easy to trigger a sample in the "cycle grid", i.e. it is easy to make a sample begin on a new cycle. So what I am trying to do is to make a sample end on a new cycle, such that the "reverse cymbal" sound ends exactly when a new cycle begins.

I know that it is possible with ~> or nudge to slightly "move" the pattern in the grid, but it would be nice to have something which does not depend on the duration of the sample, i.e. the end of the sample will always be on a new cycle.

Thanks in advance for your help!

I think you could do this with loopAt and # speed "-1", as loopAt will align the sample start/end with the cycle boundaries. However, this will also likely change the pitch of the sample depending on the tempo.

I can't really think of another way without using nudging the timing as you suggested.

Here someone posted this function that does exactly that thing:

-- plays a sample in reverse at speed a every b cycles, timing the playback so it ends exactly when the next cycle begins.
rinse a b p = ((1/a) <~) $ struct (slow b "t") $ loopAt (-1/a) $ p

Thanks, that's a very good start, and it would be sufficient in many cases.

The last step would be to scale the a parameter using the length of the sample, in order to remove the scaling of the pitch introduced by loopAt. But that might not be possible.

It's not possible at the moment independent of tempo, but there is some two-way communication between tidal and superdirt now. Part of the idea is to have superdirt send tidal info about all the samples which would unlock lots of possibilities including this.. Sending and using sample duration like this would be a great simple use case to solve. There's an issue open for discussion here.


This forum is awesome!
Here's an hack you can use: