I'm using a music speed changer to slow down given music to determine the exact the notes used so I can play the same notes (by ear) on my instrument of choice.

If this were a traditional tape or record player, slowing down the play speed would also lower the frequency (pitch) of the notes played. Effectively transposing the audio to a lower key.

To prevent this, the music speed changer will alter the track, cutting and pasting tiny sections of sound to extend them, so that the pitch does not need to be lowered. (by frequency stretching) Unfortunately, when the program does this, there are uncomfortable clicking sounds, especially where there is a lot of natural vibrato.

At times, I want to hear undistorted sound, and just tolerate the lower pitch.
If I set play speed to 50% then the octave change is naturally -1.
If I choose octave change of -0.5, then play speed needs to be roughly 70% to match.

How can I calculate the exact play speed needed to match the an arbitrary octave/pitch change? There has to be a simple log base 2 function I can use, but I don't see how to make it work.

  • BTW, “cutting and pasting tiny sections of sound”... that's really not a good way to do pitch-preserving time-stretching. There a libraries that do this in much more sophisticated ways. Elastique works excellently (e.g. used in Reaper), and the free librubberband is also quite neat. They certainly don't produce “uncomfortable clicking sounds”. However, I can confirm that authentic vari-speed shifting still gives the best results for this kind of task. Commented Sep 7, 2016 at 23:22
  • I agree that repeating small sections of the sound file is not a good way to do time-stretching. If I found an app for Android that uses one of the more sophisticated methods (no clicking sounds) that would be great. Commented Sep 8, 2016 at 13:24
  • What is vari-speed shifting? Commented Sep 8, 2016 at 13:24
  • Vari-speed is if you just change the replay rate, including the natural effect this has on pitch. As for Android... I have no clue about that, but pretty sure such an app exists. Can't be all too difficult to wrap Rubberband into an android app. Commented Sep 8, 2016 at 18:20

1 Answer 1


I wish there were math formatting but here goes:

μ = 2⁄₁₂

in words "two raised to the power of number of semitones dividied by twelve" gives the speed factor. Note that for 0 semitones, the speed factor is 1, for 7 semitones it gives a speed factor 1.498... (≈ ³⁄₂), -7 gives 0.667... (≈ ⅔) and so on.

The base-2 logarithm comes into play in the inverse relationship:

n = 12 ⋅ log2 μ


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.