下面所有的实例代码只是我在我项目中使用的代码,有其他需求可以参考官方文档。【主要是在Windows环境下】
可以离线使用,但在Ubuntu系统下调用espeak包——中文发声很奇怪。
目前支持的设备以及语音识别引擎:
nsss
- Mac OS X 10.5
及更高版本上的NSSpeechSynthesizer
sapi5
- Windows XP,Windows Vista
和(未经测试)Windows 7
上的SAPI5
espeak
- 可以托管共享库的任何发行版/平台上的eSpeak
(例如,Ubuntu/Fedora Linux(树莓派)
)【pyttsx3官方参考文档】
可能要安装其他依赖,如果下面这条命令安装不了,可以去查查安装方法。
python -m pip install pyttsx3
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()
【pytorch中文网-python使用pyttsx调用设备的TTS实现语音合成】
没啥简介。自己查查吧
pip install tts
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}")
只能在Windows下使用,这里面包含了很多东西,不止TTS。
【官方API文档】
【Python 基础篇-python3安装pyHook和pywin32库】
python -m pip install pyHook
python -m pip install pywin32
import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("你好,这是中文!")
【CSDN-python在Windows系统下实现TTS(文字转语音)】
【Github-ttskit项目链接】
python -m pip install -U ttskit pyworld
python -m pip install ffmpeg
略。
借助Tensorflow框架开发的TTS,可以存储为numpy数组(不需要存储为.wav
或.mp3
文件,减少了文件读取操作)。
【Github-zhtts项目链接】
python3 -m pip install -U ffmpeg pyworld ttskit # 会安装tensorflow-cpu版本,但使用时会报CUDA的错
python3 -m pip install tensorflow-gpu
更多实例代码参考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()
这个也没简介自己查查吧。
python -m pip install soundfile sounddevice
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()
【新浪博客-音频驱动MME等】
【树莓派实验室-用 Python 在多个输出设备上播放多个声音文件】
【CSDN-Python 在类中使用进程池 通过sounddevice, 进行不同声卡驱动和通道的音频文件播放】
主要是一些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