TimeStretch¶
TimeStretch allows changing the sound tempo, pitch and playback rate parameters independently from each other, i.e.:
tempo
adjusts speed while maintaining the original pitch.pitch
adjusts speed while maintaining the original tempo.rate
adjusts playback rate that affects both tempo and pitch at the same time.
You can use these parameters in any combination – for example, 104% tempo
with 95% pitch
.
Syntax and Parameters¶
TimeStretch (clip, float "tempo", float "rate", float "pitch",
int "sequence", int "seekwindow", int "overlap", bool "quickseek", int "aa")
TimeStretch (clip, int "tempo_n", int "tempo_d", int "rate_n", int "rate_d", int "pitch_n", int "pitch_d",
int "sequence", int "seekwindow", int "overlap", bool "quickseek", int "aa")
- clip
Source clip; only 32-bit float audio is supported. Use ConvertToFloat if necessary.
Tempo, Rate and Pitch
- tempo
- Changes speed while maintaining the original pitch.If
tempo=200
, the audio will play twice (200%) as fast; iftempo=50
, the audio will play half (50%) as fast.The effect is also known as time-stretching.Default: 100.0
- rate
- Changes speed while allowing pitch to rise or fall, like the traditional analog vari-speed effect.If
rate=200
, the audio will play twice (200%) as fast; ifrate=50
, the audio will play half (50%) as fast.Rate control is implemented purely by sample rate transposing.Ifrate
is adjusted by itself, no time-stretching or pitch-shifting is performed, and the Advanced Parameters will have no effect.Default: 100.0
- pitch
- If
pitch=200
, the audio will sound an octave higher; ifpitch=50
, the audio will sound an octave lower.The effect is also known as pitch-shifting.Default: 100.0
tempo
, rate
and pitch
can all be adjusted independently, in which
case their effects are added together. See section 3.3. About algorithms in
the SoundTouch readme for more information.
Tempo_n, Tempo_d, Rate_n, Rate_d, Pitch_n and Pitch_d
When needing more accuracy you can use the rational pair parameters tempo_n
,
tempo_d
, rate_n
, rate_d
, pitch_n
and pitch_d
instead. All
parameters are integers and have default value 1. Internally tempo
is
calculated as double(tempo_n
/tempo_d
) (rate
and pitch
likewise),
before further processing. Seeking should be sample exact.
Advanced Parameters
The time-stretch algorithm has a few parameters that can be tuned to optimize sound quality for certain applications. The current default parameters have been chosen by iterative if-then analysis (read: "trial and error") to obtain the best subjective sound quality in pop/rock music processing, but in applications processing different kind of sound the default parameter set may return a sub-optimal result. See section 3.4. Tuning the algorithm parameters in the SoundTouch readme for more information.
These parameters affect the time-stretch algorithm as follows:
- sequence
This is the length of a single processing sequence in milliseconds, which determines how the original sound is chopped in the time-stretch algorithm. Larger values mean fewer, and longer, sequences are used. In general,
a larger
sequence
value sounds better with a lowertempo
and/orpitch
;a smaller
sequence
value sounds better with a highertempo
and/orpitch
.
Default: 100 *
- seekwindow
The length in milliseconds for the algorithm that searches for the best possible overlap location. For larger
seekwindow
values, the possibility of finding a better mixing position increases, but an overly largeseekwindow
may cause drifting (a disturbing artifact where audio pitch seems unsteady) because neighboring sequences may be chosen at more uneven intervals.Default: 22 *
- overlap
The overlap length in milliseconds. When the sound sequences are mixed back together to form a continuous sound stream again,
overlap
defines how much of the ends of the consecutive sequences will be overlapped. This shouldn't be a critical parameter. If you reduce thesequence
by a large amount, you might wish to try a smalleroverlap
.Default: 8
- quickseek
The time-stretch routine has a 'quick' mode that substantially speeds up the algorithm but may degrade the sound quality when
quickseek
is set to true.Try
quickseek=false
if you hear artifacts like warbling, clicking etc.
Default: false
- aa
Controls the number of taps the anti-alias filter uses. Set to 0 to disable the filter. Must be a multiple of 4.
Default: 64
The table below summarizes how the parameters can be adjusted for different applications:
Parameter |
Default value |
If larger... |
If smaller... |
Music |
Speech |
CPU burden |
---|---|---|---|---|---|---|
|
Relatively large, chosen for slowing down music tempo. |
Usually better for
slowing down tempo.
tempo. You might need
less |
Accelerates "echoing" artifact when slowing down the tempo. |
Default value usually good. |
A smaller value might be better. |
Smaller value increases CPU burden. |
|
Relatively large, chosen for slowing down music tempo. |
Eases finding a good mixing position, but may cause "drifting" artifact. |
Makes finding a good mixing position more difficult. |
Default usually good, unless "drifting" is a problem. |
Default value usually good. |
Larger value increases CPU burden. |
|
Relatively large, chosen to suit with above parameters. |
Larger value increases CPU burden. |
* sequence
and seekwindow
have default values 100 and 22. However they
are updated if the calculated tempo is different from the default value (100).
The calculated tempo depends on the specified tempo or pitch in your script. It
will be different from 100 if tempo or pitch in your script is different from
100. The update of the default values happens in TDStretch::calcSeqParameters().
Notes¶
Since
tempo
,rate
andpitch
are floating-point values, but sample rates are integers, rounding effects in calculations are unavoidable; the resulting audio track duration may be off by up to several 10's of milliseconds (less than one video frame) per hour.Pitch is also rounded for the same reason, but the amount is so small that the effect is inaudible: according to Wikipedia, the just-noticeable pitch difference is 0.1%–0.6%, while the rounding error is about 0.002%.
Use the rational pair parameters if greater accuracy is required.
In AviSynth+ r2003 and greater, an updated SoundTouch library is used which supports multichannel audio (added in v1.8.0). Versions prior to AviSynth+ r2003 or AviSynth v2.6.0 supports stereo only. If the source clip has two audio channels, special processing is used to preserve stereo imaging. Otherwise, channels are processed independently. Independent processing works well for unrelated audio tracks, but not very well for surround sound. See the thread TimeStretch in AviSynth 2.5.5 Alpha - Strange stereo effects? for details.
Examples¶
Raise pitch one octave, without changing speed:
TimeStretch(pitch=200.0) # TimeStretch(pitch_n=2, pitch_d=1) # more accurate processing
Raise pitch one semitone, without changing speed:
delta_pitch=1.0 ## (semitones) TimeStretch(pitch=100.0*pow(2.0, delta_pitch/12.0))
Raise playback tempo from NTSC Film speed (23.97 fps) to PAL speed (25 fps) without changing pitch:
TimeStretch(tempo=100.0*25.0/(24000.0/1001.0))
Increase speed to 105%, allowing pitch to rise:
TimeStretch(rate=105)
...which is equivalent to:
ar=AudioRate AssumeSampleRate(Round(ar*1.05)) ResampleAudio(ar)
Credits¶
TimeStretch uses the SoundTouch Audio Processing Library
Copyright © Olli ParviainenSoundTouch home page: http://www.surina.net/soundtouch/
Changelog¶
Version |
Changes |
---|---|
AviSynth+ 3.7.3 |
Update SoundTouch library to v2.3.1.
Add TimeStretch overload with rational pair arguments.
|
AviSynth+ 3.4.0 |
Update SoundTouch library to v2.1.3 (Jan 07, 2019). |
AviSynth+ r2003 |
Merge TimeStretch changes from AviSynth 2.6.1
Update SoundTouch library to v1.9.2 - fixes
multichannel issues.
|
AviSynth+ <r1555 |
Sep 15, 2013
Put TimeStretch function into its own plugin.
TimeStretch no longer automatically converts input
clip to Float.
Update SoundTouch library to v1.7.1, results in
audible quality improvement for TimeStretch.
|
AviSynth 2.5.7 |
Expose SoundTouch adavanced parameters.
Update SoundTouch library to v1.3.1.
|
AviSynth 2.5.5 |
Initial Release (based on SoundTouch library v1.2.1). |
$Date: 2022/03/22 16:46:19 $