Y
Y
yeputons2012-10-08 20:13:11
Mathematics
yeputons, 2012-10-08 20:13:11

How to raise the tone of voice without increasing the speed (like in the Talking Tom Cat app)?

I came across the Talking Tom Cat application - the cat on the Android screen listens to the microphone and, if you say something, it repeats this phrase, but raises the tone of voice. It turns out a funny "cartoon" voice, like chipmunks. The obvious way to achieve this is to play the sound a little faster, but then the tempo will increase, which is not desirable.
Question: how to achieve the same effect? Interested in the algorithm(s), but a ready-made library for this kind of garbage would be useful. I would be glad if you advise the literature / articles / site where you can peep the solution to this problem.
I heard something about the applicability of the Fourier transform. I tried to do the following: I apply a direct transformation to the entire piece of sound, “shift” the result (data[i - off] = data[i]), filling the voids with zeros, do the inverse transformation and reproduce the real part (rounding). It turned out something similar, but with a bunch of distortions. If applied not to a piece, but divided into several non-intersecting ones and applied separately, the result is no better.

Answer the question

In order to leave comments, you need to log in

4 answer(s)
M
merlin-vrn, 2012-10-08
@yeputons

rubberband
is a console utility, there is a lib
In general, for the voice - the theory is this: there is a tone, but there are formants. When shifting the tone, the formants should not move. They are cut off by the formant filter, the remainder is shifted, then the old (unshifted) formants are superimposed. If you want to change the “gender” of the voice, then the formants will also have to be converted - they are slightly different for men and women.
In my opinion, this is built into rubberband. If not, I can call gvst, which has gsnap, which can do it right.

D
doxtarzlo, 2012-10-08
@doxtarzlo

Try to determine the fundamental frequency and increase it to the desired one.

4
4ainik, 2018-02-28
@4ainik

And how from this

data[i-off] = data[i]
do the inverse Fourier transform?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question