Python 文字转语音(TTS)

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 os

language = '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 sd

tts = 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 sounddevice

devs=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, 你需要知道的事】

作者:阳一子
本文地址:https://blog.csdn.net/qq_279033270/article/details/117253116

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐