pyttsx3模块

发布时间 2023-11-02 22:28:47作者: 挖洞404

1、介绍

pyttsx3模块是python的一个第三方模块,作用是进行语音合成。

  • 无需请求api,本地合成,可以不受次数和字数限制
  • 技术相对成熟,应用广泛,使用方便

2、pyttsx3.speak函数

import pyttsx3
pyttsx3.speak('你指尖跃动的电光,是我此生不灭的信仰')
  • 这是该模块最简应用,调用speak函数时,会播放合成的语音
  • 播放过程是依赖原线程,播放完毕后继续执行
def speak(text):
    engine = init()
    engine.say(text)
    engine.runAndWait()

3、参考speak函数

import pyttsx3
def speak_text(text: str):
    # 创建语音合成对象
    engine = pyttsx3.init()
    # 合成并播放
    engine.say(text)
    # 阻塞,等待合成过程和播放过程
    engine.runAndWait()

speak_text('区区砂砾,不及我半分')
  • 自定义函数,相比原生的speak函数可以进行参数调试,乃至开线程处理
  • engine对象是prttsx3.engine.Engine类的对象

4、Engine类

def say(self, text, name=None):
  • text参数,str类型,作为合成语音的内容
  • 该方法将text参数的字符串合成语音,并且直接播放
  • 需要注意,say方法是开子线程完成任务。因此该方法调用后会直接执行其后的语句
def save_to_file(self, text, filename, name=None)
  • text参数,str类型,作为合成语音的内容
  • filename参数,str类型,表示合成结果输出的文件路径
  • 该方法是将text参数的字符串合成语音,保存到指定文件中。不会直接播放
  • 需要注意,save_to_file方法也是开子线程完成任务。因此该方法调用后会直接执行其后的语句
def runAndWait(self):
  • 阻塞线程作用,等待say方法和save_to_file方法执行完毕
def setProperty(self, name, value)
  • 设置合成的相关属性
  • voice,选择声音。值可以是声音对应的id
  • rate,选择速率。int类型,表示每分钟多少单词
  • volume,语音量,float类型,范围从0.0-1.0
def getProperty(self, name)
  • 获取相关属性
  • name为voice时,获取到的是str类型,表示id
  • name为voices时,获取到的是list类型,其元素是pyttsx3.voice.Voice对象
  • name为rate时,获取到的是int类型,默认值200
  • name为volume时,获取到的是float类型,默认值1.0
def isBusy(self)
  • 是否繁忙,返回bool类型
def stop(self)
  • 停止合成语音和输出文件的线程

5、语音合成引擎

(1)查看本地支持的语音合成引擎

import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
    print(type(voice))
    print("Name: %s, ID: %s, Age: %s, Age: %s, Languages Known: %s" % (voice.name, voice.id, voice.age, voice.gender, voice.languages))
    
<class 'pyttsx3.voice.Voice'>
Name: Microsoft Huihui Desktop - Chinese (Simplified), ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0, Age: None, Age: None, Languages Known: []
<class 'pyttsx3.voice.Voice'>
Name: Microsoft Haruka Desktop - Japanese, ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_JA-JP_HARUKA_11.0, Age: None, Age: None, Languages Known: []
<class 'pyttsx3.voice.Voice'>
Name: Microsoft Zira Desktop - English (United States), ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0, Age: None, Age: None, Languages Known: []
  • 这里显示本地支持三种语音合成引擎

(2)设置语音合成引擎与测试

engine.setProperty('voice', engine.getProperty('voices')[0].id)
  •  Huihui,支持中文、数字和英文,即使混杂也可以识别依序读取。数字是中文读音,十进制读法
  • Haruka,支持日语、数字和英文,中文会被跳过。数字是日语读音
  • Zira,支持数字和英文,中文会被跳过。数字是英语读音,单独的数字会作为十进制读法,而混杂过程中会逐位读出