赞
踩
原以为语音合成是个很简单的事情,但细细了解一下,也并不是那么的简单,尤其是在涉及到中文的情况。
先简单介绍一下语音合成,由于本系列重在动手,理论部分就尽量从简了,有兴趣的同学请自行了解,我也会提供一些参考链接。
总体上来看,语音合成分成传统语音合成和端到端语音合成两大类:
传统语音合成,前端需要语言学知识,后端需要了解发声机理,而且需要大量的人工介入来制定规则和参数,现在已经很少用了。
简单说就是深度学习“一锅炖”,直接输入文本或注意字符,就能直接输出音频波形,并且有强大丰富的发音风格和韵律表现力,深受“不求甚解”的广大群众的喜爱。
闲扯两句,虽然我对AI有点小着迷,但我始终认为AI不是探究事物本质的方法(数学才是),AI可以让你达到“知其然”的程度,却几乎永远无法让你“知其所以然”,当然后者是不是必要的也有争论,就连XAI(可解释AI)也有躺平派(用就好,不需要解释)、反推派(通过深度学习模型反推构建决策树)和探究派(比如因果推理)等不同流派。
下面还是进入实战吧,能选择的语音合成(TTS)工具很多,今天我们介绍两个:gTTS、vits-chinese
注:请自行在colab(CPU)中输入执行
- pip install gTTS #载入Google Text To Speech函式库(文字转语音函式库)
- !pip install mutagen #载入声音处理函式库
- #使用函式库
- from gtts import gTTS #文字转语音函式库
- from IPython.display import Audio #播放音档函式库
- from random import randint #随机数函式库
- from mutagen.mp3 import MP3 #audio函式库
- import time #时间函式库
-
- #自订函数,传入文字t,语音说出t。
- def speak(t):
- tts = gTTS(t, lang='zh', slow=True) #lang语言:zh中文、en英文、ja日文。slow语速慢:True是、False否。
- tts.save('t.mp3') #储存音档,档名text.mp3
- display(Audio('t.mp3', autoplay=True)) #播放音档text.mp3。autoplay自动播放:True是、False否。
- audio = MP3("t.mp3")
- time.sleep(audio.info.length) #等待播完音标
- #测试speak函数,可不执行。可输入数字、英文、中文,观察结果。
- n=input('输入文字:')
- speak(n)
gTTS处理速度很快,两、三百字左右秒出,但声音比较单调机械,没有什么感情。
gTTS也支持一些预处理、分词,还支持流式(stream)处理,详细请参看官方说明:https://gtts.readthedocs.io/en/latest
大家可以到上去体验一下:
https://ai.douresources.com
是不是感情丰富了很多,因为这里使用了vits训练的声音模型,还加了prosody韵律(停顿自然)模型。
通过gTTS或vits-chinese,现在我们可以把文字转换成语音了,那接下来的问题是,如何转换成我们想要的语音呢?
假设我们已经有自己训练好的声音模型。
一种方法是先TTS转换成任意声音,再用训练好的声音模型做推理,
这种比较适用于演讲的场景,但并不太适合于交互式的场景,等待的时候可能会有些长了。
另一种方法就是制作适用于TTS转换的声音模型,或者将已经制作的声音模型(SoVITS或RVC等),直接运用到TTS中,这就是下一篇要讲的内容了。
Everyone, have a good dream!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。