I assume that Reaper's "simple windowed" algorithm is intended to be what is often referred to as "cyclic stretching" algorithm. But compared to similar algorithms in other software it sounds.. rather odd.
Here a video where I compare a breakbeat sample stretched with TAL's, Akaizer's and Logic's cyclic stretching modes (in this order) to Reaper's simple windowed stretching (last one) and you will hear what I mean:
As you can hear in Reaper the stretched sample sounds totally crushed. I bet some bug has sneaked into the implementation of this algorithm which makes it sound so low quality? I hope this can be fixed so that the "simple windowed" algorithm can become a useful "cyclic" stretching algorithm.
If it sounds different to other algorithms that's expected -- if you can point to a project using this mode that sounds different to a previous REAPER version, then that would be helpful. It may have always been "broken."
I think in REAPER it always sounded like this and my guess was that it always has been "broken".
As the "granularization" (for lack of a better word) itself sounds pretty much identical to all these algorithms from other software, but the sound quality is somehow much worse (lacking high frequencies and sounding noisy as if heavy sample rate reduction and bitcrushing are going on), I thought something had gone wrong with the implementation. I believed that it was meant to sound like the other algorithms in my video but some line of code regarding resampling has an error and nobody reported it before because everybody thought it was intentional.
But if what you are hearing from the last audio in my demo video is how the algorithm is meant to sound then probably this should rather be a feature request for an actual, proper "cyclic time stretching" mode like the other audios in my video.
I think in REAPER it always sounded like this and my guess was that it always has been "broken".
As the "granularization" (for lack of a better word) itself sounds pretty much identical to all these algorithms from other software, but the sound quality is somehow much worse (lacking high frequencies and sounding noisy as if heavy sample rate reduction and bitcrushing are going on), I thought something had gone wrong with the implementation. I believed that it was meant to sound like the other algorithms in my video but some line of code regarding resampling has an error and nobody reported it before because everybody thought it was intentional.
But if what you are hearing from the last audio in my demo video is how the algorithm is meant to sound then probably this should rather be a feature request for an actual, proper "cyclic time stretching" mode like the other audios in my video.
By first pitch shifting with Simple windowed and then resampling with Linear Interpolation, I was able to reproduce 100% of the current REAPER algorithm.
In other words, to solve this problem, I believe that the order of pitch shifting and resampling should simply be swapped.
By first pitch shifting with Simple windowed and then resampling with Linear Interpolation, I was able to reproduce 100% of the current REAPER algorithm.
In other words, to solve this problem, I believe that the order of pitch shifting and resampling should simply be swapped.
Hmm, perhaps we should use the current mode when speeding up content (pitch shifting down, then resampling to speed up), and the reverse when slowing down (resampling to slow down, then pitch adjusting up)
Hmm, perhaps we should use the current mode when speeding up content (pitch shifting down, then resampling to speed up), and the reverse when slowing down (resampling to slow down, then pitch adjusting up)
Can the code be tried out somehow?
If you decide to update the algorithm as described and include it in an upcoming dev build I would be very happy to test it and give feedback/opinions
I checked Texture Mode, which is Simple windowed in Ableton Live, and it seems that resampling is not actually used for time stretching.
I found it difficult to explain in words, so I would like to explain by posting the jsfx I created and a video of it.
The simplest possible code to express this is as follows.
Code:
spl0 = 0[b += pitch];
c === 3000 ? (
c = 0;
b = a
) : (
c += 1;
);
a += rate;
spl1 *= post;
The "a" always advances along the time axis at the rate speed, and the "b = a" periodically executed determines the starting position of memory reading and advances the time of the "b" to perform time stretching.
yeah simple windowed is pitch-shifting + optional resampling. If you want timestretch + optional resampling, try SoundTouch, that's what it does. Though I guess it tries to make everything fit, which might not be what you're looking for. Maybe it's time to do a new timestretch + optional resample mode, using the higher quality resample modes we have, too. Can actually base it somewhat on Rrreeeaaa (replacing the polyphase synthesis component with window overlapping), mmm.
Does anyone here have the facility to compare any new modes to the original cyclic / akai timestretch? Unfortunately not got access to a s series sampler any more 🙁
Does anyone here have the facility to compare any new modes to the original cyclic / akai timestretch? Unfortunately not got access to a s series sampler any more
Maybe it's time to do a new timestretch + optional resample mode, using the higher quality resample modes we have, too. Can actually base it somewhat on Rrreeeaaa (replacing the polyphase synthesis component with window overlapping), mmm.
That would be amazing! Also it would be really useful if we could change the window size with a slider to any window size we want instead of the premade values from the dropdown menu. In ableton it's possible to automate it with an envelope which is super useful for precise time stretching by changing the size in realtime.
This jsfx is EXACTLY the stretching that I hope we will get in Reaper! I best like it with the size parameter at 25ms. If Reaper gets this stretching algorithm it would be amazing if it also allows us to set the window size to any number, perhaps via a number input box (rather than just some presets as simple windowed currently has).
Quote:
Originally Posted by Justin
Maybe it's time to do a new timestretch + optional resample mode, using the higher quality resample modes we have, too. Can actually base it somewhat on Rrreeeaaa (replacing the polyphase synthesis component with window overlapping), mmm.
Wow this sounds interesting! So would it be 2 new modes, a new/updated pitchshift(+resampling) mode and a new timestretch(+resampling) mode, the latter based on Rrreeeaaa?
Would the window overlapping Rrreeeaaa sound somewhat like this?
That would be very cool because as much as Rrreeeaaa is a nice tool for sounddesign, sometimes it would be useful to have its smooth stretching sound applied in a way that is more true to the original audio without completely smearing transients. I can see that be useful not just for creative but also corrective time stretching.
I'm almost done with jsfx, so I'm posting it anyway.
I'm sleepy, so I'll do the explanation and minor code fixes next time I wake up, but one thing I want to mention is that I checked and Akaizer and Ableton Live's Texture Mode is 99% the same.
I'm almost done with jsfx, so I'm posting it anyway.
I'm sleepy, so I'll do the explanation and minor code fixes next time I wake up, but one thing I want to mention is that I checked and Akaizer and Ableton Live's Texture Mode is 99% the same.
Sounds pretty good!
Another important function is the window types. Depending on the audio source and what we want to achieve, different windows types can change how the transients sound which is very useful for better sound quality.
A problem in Simple windowed is that there is only one window type with different fade values.
@Justin
Would it be possible to include different window types for this new mode just like in Rrreeeaaa?
I would love to play with this myself, however I'm a blind guy that use a screen reader and keybord commands to use Reaper, so wonder, is it possible to rewrite this plugin with a standard open file window instead of drag and drop?
Quote:
Originally Posted by lewloiwc
I'm almost done with jsfx, so I'm posting it anyway.
I'm sleepy, so I'll do the explanation and minor code fixes next time I wake up, but one thing I want to mention is that I checked and Akaizer and Ableton Live's Texture Mode is 99% the same.