I have one recording of my voice $x[n]$ singing a song. One thing I could do is independently record me singing the song again to obtain $y[n]$. Then, $z[n] = \frac{1}{2}\left(x[n] + y[n]\right)$ would sound like a "chorus" of some sorts (assuming that both recordings were done in perfect sync).

My question is, without doing a bunch of independent recordings, is there some decent way to go straight from a single recording $x[n]$ to the 2-fold chorus $z[n]$? More generally, I'd like to be able to go to a $k$-fold chorus (equivalent to averaging $k$ independent recordings).

My gut tells me one could simulate independent recordings by randomizing the phase in $x[n]$'s STFT somehow, but I'm not sure of specifically what should be done. In this regard, the only relevant method I'm aware of is Paul stretching, which doesn't really fit the bill, I think.

Also, is there a standard name for this particular effect I'm trying to create?


1 Answer 1


To make it sound natural you typically introduce some small random pitch, speed & gain modulations. That's not a trivial amount of work, especially if you want something that sounds natural and good and maintains the original phrasing.

This is a pretty common plug-in in audio processing. It's typically called "vocal doubler" or "voice doubler" and there are many off-the-shelf options available. Here is an example: https://www.izotope.com/en/products/vocal-doubler.html. No endorsement or commercial interest, but you can't beat the price :-)

  • $\begingroup$ I absolutely appreciate being referenced to the nomenclature/tools to achieve the effect. But more importantly, I'm looking for the hard math that goes into making it happen. What are the actual DSP techniques/algorithms that go into making it happen, in terms of the original signal $x[n]$? $\endgroup$
    – chausies
    Dec 30, 2019 at 18:18
  • $\begingroup$ @chausies Look into the Phase Vocoder algorithm that can change tempo and pitch— use that with random variation and add to your original $\endgroup$ Dec 30, 2019 at 19:35
  • $\begingroup$ @DanBoschen But I feel like an independent record $y[n]$ wouldn't simply have a different pitch/tempo than the original $x[n]$. It's more like, if $X[n, k]$ is the STFT of $x[n]$, then an independent recording $y[n]$ would have $Y[n, k]$ with the same frequency content but a randomly offset phase content (an offset that's somewhat randomized across each phoneme in the recording) $\endgroup$
    – chausies
    Dec 30, 2019 at 19:58
  • $\begingroup$ Yes I agree and certainly if it had a different tempo you would not be able to combine it. I was thinking of a randomized tempo variation with the mean change being 0 and also relatively small and perhaps equally random offsets in pitch that it provides the random phase offset you seek. I have never done this nor have audio processing expertise but thought the Phase Vocoder reference may be helpful to you. $\endgroup$ Dec 30, 2019 at 20:50
  • $\begingroup$ @chausies an alternative to the phase vocoder would be the STRAIGHT vocoder. It is a very mature vocoder, with a lot of papers supporting its properties and I believe it is open source now. Also, you can do similar things with sinusoidal models (googling the terms will do the work). The main idea however is still the same: generate some small variants of your original recording and add them together. $\endgroup$
    – GKH
    Dec 31, 2019 at 1:41

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.