0
votes

I am trying to implement time-domain overlap-add method in order to stretch data in wav file. But the results I get are little bit disappointing. It seems that there is something I am doing wrong Here is the process of my TDOLA:

  • At first I take a chunk from input signal
  • Then I multiply the chunk with chosen window (for example, Hann window)
  • Finally I add my chunk to output stream with an overlap

Is there something wrong with this sequence? Maybe some filtering in frequency domain is necessary?

3
That's a very crude algorithm and may not work well. This is why more sophisticated algorithms such as PSOLA exist. Are you trying this with speech ? What is the duration of your chunk ?Paul R
@Paul R: I'm trying to keep things as simple as possible. In my example I take 32 sample chunk and shift it on 16 samples in order to make my file 1.5 times longer. The quality of time stretching is not so crucial, I just want to implement basic algorithm.qutron
32 samples may be too small, but you didn't say what your sample rate is - you need at least one pitch period for this kind of thing to work at all.Paul R

3 Answers

2
votes

Try using chunks that are at least a small multiple of the pitch period in length. You can either guess the average pitch period for your source sound file, or run a DSP/software pitch estimator algorithm for better results.

0
votes

I recomend WSOLA. It's not quite as fast, but very efficient. There was also a nice paper on EWSOLA (Enhances Waveform Similarity OverLap-Add) published in of of the IEEE Journals several years ago.

WSOLA works based on waveform's autocorrelation of extract actual cycles and repeat them. This process works much better then regular TDOLA.

-3
votes

It doesn't work. That's your whole problem. Time stretching inherently involves transformations to and from the frequency domain. Working purely in the time domain is not possible.