TimeStretch
From Avisynth wiki
Revision as of 01:23, 20 February 2016 by Raffriff42 (Talk | contribs)
Change the audio speed and/or pitch:
• tempo | adjusts speed while maintaining pitch. |
• rate | adjusts speed while allowing pitch to rise or fall. |
• pitch | adjusts pitch while maintaining speed. |
You can use these parameters in any combination – for example, 104% tempo with 95% pitch.
Contents |
Syntax and Parameters
TimeStretch(clip clip [, float tempo, float rate, float pitch,
int sequence, int seekwindow, int overlap, bool quickseek, int aa ] )
- clip clip =
- Source clip. Incoming audio sample type is automatically converted to Float.
- If clip.AudioChannels=2, 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; pending the release of AviSynth v2.61, try TimeStretchPlugin instead. [1] [2]
Tempo, Rate and Pitch
- float tempo = 100.0
- Changes speed while maintaining the original pitch.
- If tempo=200, the audio will play twice (200%) as fast; if tempo=50, the audio will play half (50%) as fast.
- The effect is also known as time-stretching.
- float rate = 100.0
- 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; if rate=50, the audio will play half (50%) as fast.
- Rate control is implemented purely by sample rate transposing.[3]
- If rate is adjusted by itself, no time-stretching or pitch-shifting is performed, and the Advanced Parameters will have no effect.
- float pitch = 100.0
- Changes pitch while maintaining the original speed (within a small tolerance–see Notes below).
- If pitch=200, the audio will sound an octave higher; if pitch=50, the audio will sound an octave lower.
- The effect is also known as pitch-shifting.
- Tempo, rate and pitch can all be adjusted independently, in which case their effects are added together.
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.
- int sequence = 82 *
- 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 lower tempo and/or pitch;
- a smaller sequence value sounds better with a higher tempo and/or pitch.
- 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,
- int seekwindow = 28 *
- 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 large seekwindow may cause drifting (a disturbing artifact where audio pitch seems unsteady) because neighboring sequences may be chosen at more uneven intervals.
- int overlap = 12 *
- 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 the sequence by a large amount, you might wish to try a smaller overlap.
- bool quickseek = true? *
- The time-stretch routine has a 'quick' mode that substantially speeds up the algorithm but may degrade the sound quality.
- Try quickseek=false if you hear artifacts like warbling, clicking etc.
- int aa = ? *
- Controls the number of taps the anti-alias filter uses. Set to 0 to disable the filter. Must be a multiple of 4.
- This table summarizes how these parameters can be adjusted for different applications:
Parameter Default value If larger... If smaller... Music Speech CPU burden sequence Relatively large, chosen for slowing music tempo. Usually better for slowing tempo. You might need less overlap. Accelerates "echoing" artifact when slowing down the tempo. Default value usually good. A smaller value might be better. Smaller value increases CPU burden. seekwindow Relatively large, chosen for slowing 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 usually good. Larger value increases CPU burden. overlap Relatively large, chosen to suit above parameters. Larger value increases CPU burden.
- * TODO ( default values are under investigation at the time of updating this documentation )
Notes
- Slight speed inaccuracies might occur. Since we are dealing with float values for tempo, rate and pitch, but audio sample rates are always integers, rounding errors might occur. In general however, audio duration inaccuracies should not exceed a few 10's of milliseconds for movie-length samples.
- In upcoming AviSynth v2.61[4] an updated SoundTouch library is used which supports multichannel audio. AviSynth v2.60 and below support stereo only. See the thread TimeStretch in AVISynth 2.5.5 Alpha - Strange stereo effects? for details.
Examples
- Raise pitch one octave, while preserving the length of the original sample.
TimeStretch(pitch=200)
TimeStretch(pitch=100.0*pow(2.0, 1.0/12.0))
- Change 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))
- TimeStretch(rate=105) is equivalent to
ar=AudioRate AssumeSampleRate(Round(ar*1.05)) ResampleAudio(ar)
Credits
TimeStretch uses the SoundTouch Audio Processing Library
- Copyright © Olli Parviainen
- SoundTouch home page: surina.net/soundtouch
Changelog
v2.61 | Updated SoundTouch library to 1.9.0. Fixes multichannel issues. |
v2.57 | Expose soundtouch parameters |
v2.55 | Initial Release (based on SoundTouch library 1.4.0?) |