# Channel Vocoder producing output with "click" sounds

I'm trying to make a channel vocoder that takes two inputs, one a frequency rich carrier (a musical sound) and the other a modulator (vocals). Applying operations involved in the channel vocoder generates an output that makes the vocals sing in the tone of the carrier. (Think Songify.)

Presently I'm splitting both the signals into windows of a specified size and also overlapping two consecutive windows by a certain factor. FFTs of the windows of the carrier and modulator are then computed. The fft is further split into bands of equal length. The average of magnitudes of modulator's fft in that particular

for band_no = 0 to band_count:
for i = 0 to band_length:
avg+=magnitudeOfModulatorFFT[band_no*band_length + i];


I am then multiplying "avg" to each of carrierFFT's frequency value lying within the band, and then taking the inverse FFT. Although this produces the desired output, it also includes a clicking sound. Even after multiplying both the signals by a window function.

Any way I could solve this?

• Have you try your "framing -> FFT -> IFFT -> overlap add" chain independently of any processing to make sure that it reconstructed the original correctly without clicks? Jun 7, 2012 at 10:21
• Yup, that works perfectly fine. I suspect that there's some problem in the averaging bit, although I can't really point at exactly what that is. Jun 7, 2012 at 13:41
• Could it be that the multiplication of the carrier FFT by the band-wise avg causes the output signal to have a larger amplitude than the original, and thus make it clip? You could also try smoothing the value of avg - something like avg[band_no] = 0.5 * avg[band_no] + 0.5 * (value_computed_for_this_frame) to prevent discontinuities resulting in abrupt variations of the modulator spectrum. Hardware vocoder usually have a simple RC network slew-limiting the output of the channel envelope follower. Jun 7, 2012 at 14:17
• I've ensured that the output doesn't go out of range. I'll try to smooth the output as you said. To be clear, what you're saying is to take the mean of the computed average and the previous frame average, right? Jun 7, 2012 at 19:05
• Yes, though you can try a different pair of coefficients (summing to 1) to adjust the amount of smoothing. Jun 7, 2012 at 19:40