There are many tutorials and guides explaining how to create a "robotic" voice by using a vocoder or a mix of filters that change pitch, tempo and maybe add a slight echoed delay. However, is it possible to do that opposite? How would you take a "robotic" sounding voice and make it sound more natural? I know certain effects, like adding emphasis, is still a research problem, but is it easier to remove the "tinny" sound found in a lot of synthetic voices?

I'm specifically interested in a code solution (preferably Python), because I'd like to wrap it around a text-to-speech synthesizer (like Festival or Flite) to work in real-time. Unfortunately, I'm not sure where to begin since Googling "how to make a robot voice sound more human" just returns tutorials on doing the exact opposite.

Here's an example voice of the Flite engine using an HTS voice. Especially near the end, the voice almost breaks up into a "buzz". Can that be removed, or would that actually require adding audio data?

  • $\begingroup$ i'm in the same mess as you $\endgroup$ – Nino Škopac Jan 7 '18 at 22:05
  • $\begingroup$ Has there been any updates to this? $\endgroup$ – Obi_Oko Jul 19 at 8:12

I seriously doubt that there is a simple way to accomplish this. Most of the work that I have seen tends to go in the direction of improving the synthesis, or using better (and more) phoneme recordings to get better quality. If there were a simple way, I think someone would have found it by now rather than putting so much more effort into better synthesizers.

That said, you could try using a bandpass filter on the output. The sample you referred to sounds better (at least is doesn't buzz) if you filter out everything above 800Hz, and everything below 100Hz. That does kind of make it sound like the person speaking has a blanket stuffed in to her mouth, though.

If you would like, I could put together some python code (though you will need numpy/scipy for it) or you could use audacity or sox to see if the results are even acceptable before implementig code.

| improve this answer | |
  • $\begingroup$ I suspected. And yes, a guide to doing that in Python and/or Audacity would be helpful. I tinkered around in Audacity, but didn't find anything. There's no "bandpass filter" under effects. Would I use a combined high and low filter? $\endgroup$ – Cerin Dec 5 '14 at 16:57
  • $\begingroup$ Yes, use a combination high pass and low pass. Normalize it afterwards else it might not be loud enough after the filtering. I'll have to see if I can find time to write soem python code later. $\endgroup$ – JRE Dec 5 '14 at 17:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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