自然语言处理|Python 文字转语音(TTS)

Python 文字转语音(TTS)
文章目录

  • Python 文字转语音(TTS)
    • 0.简介
    • 1.pyttsx3
      • 0.简介
      • 1.安装
      • 2.实例代码
      • 3.参考链接
    • 2.tts
      • 0.简介
      • 1.安装
      • 2.实例代码
    • 3.win32com
      • 0.简介
      • 1.安装
      • 2.实例代码
      • 3.参考链接
    • 4.ttskit (未使用)
      • 0.简介
      • 1.安装
      • 2.实例代码
    • 5.zhtts
      • 0.简介
      • 1.安装
      • 2.实例代码
    • 6. souddevice播放音频
      • 0.简介
      • 1.安装
      • 2.示例代码
      • 3.参考链接
    • 7.其他链接

0.简介 下面所有的实例代码只是我在我项目中使用的代码,有其他需求可以参考官方文档。【主要是在Windows环境下】
1.pyttsx3 0.简介
可以离线使用,但在Ubuntu系统下调用espeak包——中文发声很奇怪。
目前支持的设备以及语音识别引擎:
  • nsss - Mac OS X 10.5及更高版本上的NSSpeechSynthesizer
  • sapi5 - Windows XP,Windows Vista和(未经测试)Windows 7上的SAPI5
  • espeak - 可以托管共享库的任何发行版/平台上的eSpeak(例如,Ubuntu/Fedora Linux(树莓派)
【pyttsx3官方参考文档】
1.安装
可能要安装其他依赖,如果下面这条命令安装不了,可以去查查安装方法。
python -m pip install pyttsx3

2.实例代码
import pyttsx3 def use_pyttsx3(): # 创建对象 engine = pyttsx3.init()# 获取当前语音速率 rate = engine.getProperty('rate') print(f'语音速率:{rate}') # 设置新的语音速率 engine.setProperty('rate', 150)# 获取当前语音音量 volume = engine.getProperty('volume') print(f'语音音量:{volume}') # 设置新的语音音量,音量最小为 0,最大为 1 engine.setProperty('volume', 1.0)# 获取当前语音声音的详细信息# 这里我也是找到的实例代码感觉写的很矛盾,最后发出的还是女声 voices = engine.getProperty('voices') print(f'语音声音详细信息:{voices}') # 设置当前语音声音为女性,当前声音不能读中文 engine.setProperty('voice', voices[1].id) # 设置当前语音声音为男性,当前声音可以读中文 engine.setProperty('voice', voices[0].id) # 获取当前语音声音 voice = engine.getProperty('voice') print(f'语音声音:{voice}')# 语音文本 words = input('请输入要说的话:') # 将语音文本说出来 a = engine.say(words) engine.runAndWait() engine.stop()# 保存音频 engine.save_to_file('张三,王五,你们好,请离开!', filename='./wavfiles/go_out.wav', name='test') engine.runAndWait()if __name__ == '__main__': use_pyttsx3()

3.参考链接
【pytorch中文网-python使用pyttsx调用设备的TTS实现语音合成】
2.tts 0.简介
没啥简介。自己查查吧
1.安装
pip install tts

2.实例代码
from gtts import gTTS import oslanguage = 'zh' # 或 zh-tw #slow=False时,语速为Normal output = gTTS(text="这是中文", lang=language, slow=False) output.save(filename)# Play the converted file os.system(f"start {filename}")

3.win32com 0.简介
只能在Windows下使用,这里面包含了很多东西,不止TTS。
【官方API文档】
1.安装
【Python 基础篇-python3安装pyHook和pywin32库】
python -m pip install pyHook python -m pip install pywin32

2.实例代码
import win32com.client speaker = win32com.client.Dispatch("SAPI.SpVoice") speaker.Speak("你好,这是中文!")

3.参考链接
【CSDN-python在Windows系统下实现TTS(文字转语音)】
4.ttskit (未使用) 0.简介
【Github-ttskit项目链接】
1.安装
python -m pip install -U ttskit pyworld python -m pip install ffmpeg

2.实例代码
略。
5.zhtts 0.简介
借助Tensorflow框架开发的TTS,可以存储为numpy数组(不需要存储为.wav.mp3文件,减少了文件读取操作)。
【Github-zhtts项目链接】
1.安装
python3 -m pip install -U ffmpeg pyworld ttskit# 会安装tensorflow-cpu版本,但使用时会报CUDA的错 python3 -m pip install tensorflow-gpu

2.实例代码
更多实例代码参考Github项目链接。
import zhtts import sounddevice as sdtts = zhtts.TTS()# use fastspeech2 by default text1 = "2020年,这是一个开源的端到端中文语音合成系统"# 下面是自带的函数,借助Pycharm查看出来的。audio为numpy数组可直接传入播放器。 mel = tts.text2mel(text1) print(mel.shape, type(mel)) audio = tts.mel2audio(mel) print(audio, type(audio)) # 下面这里可以先看【6.sounddevice播放音频】 sd.play(audio, samplerate=24000) # samplerate=24000为通过其他包转换为.wav文件,再读取该文件获取的 sd.wait()

6. souddevice播放音频 0.简介
这个也没简介自己查查吧。
1.安装
python -m pip install soundfile sounddevice

2.示例代码
import soundfile import sounddevicedevs=sd.query_devices()#返回系统所有的声音设备 print(devs) # 带><的是默认播放设备 # 1 代表设备号;麦克风阵列 (Synaptics Audio)代表设备名称;MME (2 in, 0 out)代表驱动为MME和2个输入通道 """ 0 Microsoft Sound Mapper - Input, MME (2 in, 0 out) >1 麦克风阵列 (Synaptics Audio), MME (2 in, 0 out) 2 Microsoft Sound Mapper - Output, MME (0 in, 2 out) <3 扬声器 (Synaptics Audio), MME (0 in, 2 out) 4 主声音捕获驱动程序, Windows DirectSound (2 in, 0 out) 5 麦克风阵列 (Synaptics Audio), Windows DirectSound (2 in, 0 out) 6 主声音驱动程序, Windows DirectSound (0 in, 2 out) 7 扬声器 (Synaptics Audio), Windows DirectSound (0 in, 2 out) 8 扬声器 (Synaptics Audio), Windows WASAPI (0 in, 2 out) 9 麦克风阵列 (Synaptics Audio), Windows WASAPI (2 in, 0 out) 10 麦克风阵列 1 (Synaptics Audio capture), Windows WDM-KS (2 in, 0 out) 11 麦克风阵列 2 (Synaptics Audio capture), Windows WDM-KS (4 in, 0 out) 12 麦克风阵列 3 (Synaptics Audio capture), Windows WDM-KS (4 in, 0 out) 13 Output 1 (Synaptics Audio output), Windows WDM-KS (0 in, 2 out) 14 Output 2 (Synaptics Audio output), Windows WDM-KS (0 in, 8 out) 15 Input (Synaptics Audio output), Windows WDM-KS (2 in, 0 out) 16 耳机 (@System32\drivers\bthhfenum.sys,#2; %1 Hands-Free AG Audio%0 ; (iGene-U2)), Windows WDM-KS (0 in, 1 out) 17 耳机 (@System32\drivers\bthhfenum.sys,#2; %1 Hands-Free AG Audio%0 ; (iGene-U2)), Windows WDM-KS (1 in, 0 out) 18 耳机 (), Windows WDM-KS (0 in, 2 out) """ data, sampler = soundfile.read(path) try: sd.default.device[1] = sd.default.device[1] # 可以通过设备号指定播放设备 sd.play(data, samplerate=sampler) # data为numpy数组,samplerate可能为采样率吧(不太清楚) except Exception as e: print("播放失败") sd.wait()

3.参考链接
【新浪博客-音频驱动MME等】
【树莓派实验室-用 Python 在多个输出设备上播放多个声音文件】
【CSDN-Python 在类中使用进程池 通过sounddevice, 进行不同声卡驱动和通道的音频文件播放】
7.其他链接 主要是一些Github的项目:
https://github.com/search?q=TTS++%E4%B8%AD%E6%96%87&type=Repositories
https://github.com/ranchlai/mandarin-tts
https://github.com/aidreamwin/TTS-Clone-Chinese
【灰信网-关于PYTHON音频处理DIRECTSOUND, 你需要知道的事】
【自然语言处理|Python 文字转语音(TTS)】作者:阳一子
本文地址:https://blog.csdn.net/qq_279033270/article/details/117253116

    推荐阅读