Это вопрос, на который я потратил почти семестр в колледже, изучая ответ, и год (или больше) занятий, чтобы изучить базовую обработку сигналов, необходимую для понимания процесса. Целые классы посвящены синтезу речи, а целые учебные программы — обработке сигналов.
Голосовой тракт человека можно рассматривать как фильтр, а голосовую щель — как генератор импульсов, то есть речь на самом деле является результатом последовательности импульсов, отфильтрованных голосовым трактом, ртом и носовой полостью.
Для каждой фонемы «фильтр» будет разным, поэтому вам понадобится библиотека фонем для создания «фильтров». Теоретически обратную фильтрацию можно использовать в библиотеке звуковых клипов фонем, чтобы найти коэффициенты «фильтра». Рекурсия Левинсона-Дарбина часто используется для нахождения коэффициентов LPC.
Должна быть создана голосовая последовательность импульсов. Простой способ сделать это — свернуть последовательность импульсов с положительной полусинусоидой.
Наконец, отфильтруйте последовательность импульсов голосовой щели с помощью коэффициентов «фильтрации», связанных с фонемой, которую вы хотите создать.
Но это только для озвученной речи. Чтобы сгенерировать невокализованную речь, простое решение состоит в том, чтобы отфильтровать случайный шумовой сигнал с коэффициентами «фильтрации», связанными с невокализованными речевыми фонемами.
Один слой абстракции выше этого, создайте список необходимых фонем и объедините их. Просто как пирог!
ОБНОВИТЬ:
Друг указал на Festival, «черный ящик» для ввода текста и получения речи: http://festvox.org/festival/
person
whlteXbread
schedule
05.05.2011