第二篇【传奇开心果系列】Python的文本和语音相互转换库技术点案例示例:深度解读pyttsx3支持多种语音引擎

传奇开心果短博文系列

  • 系列短博文目录
    • Python的文本和语音相互转换库技术点案例示例系列
  • 短博文目录
    • 前言
    • 一、三种语音引擎支持介绍和示例代码
    • 二、SAPI5引擎适用场景介绍和示例代码
    • 三、nsss引擎适用场景介绍和示例代码
    • 四、eSpeak适用场景介绍和示例代码
    • 五、归纳总结

系列短博文目录

Python的文本和语音相互转换库技术点案例示例系列

短博文目录

前言

在这里插入图片描述pyttsx3是一个Python文本到语音转换库,可以将文本转换为语音并播放出来。它支持多种语音引擎,包括sapi5、nsss、espeak等。pyttsx3可以用于开发语音助手、自动化脚本、语音提示等应用程序。它具有简单易用的接口,可以灵活设置语音输出的音量、语速、声音类型等参数。如果您想要让您的Python程序具有语音输出的功能,pyttsx3是一个很好的选择。您可以通过pip安装pyttsx3库,并在您的Python程序中引入并使用它。

一、三种语音引擎支持介绍和示例代码

在这里插入图片描述

  1. sapi5引擎支持介绍和示例代码
    pyttsx3的SAPI5引擎是一种常用的语音合成引擎,支持多种语言和声音。您可以通过pyttsx3库轻松地使用SAPI5引擎进行文本到语音的转换。以下是一个简单的示例代码,演示如何在Python中使用pyttsx3的SAPI5引擎:
import pyttsx3# 初始化pyttsx3引擎
engine = pyttsx3.init('sapi5')# 设置要转换为语音的文本
text = "Hello, how are you today?"# 使用SAPI5引擎将文本转换为语音并播放
engine.say(text)
engine.runAndWait()

在这个示例中,我们首先导入pyttsx3库,然后初始化一个SAPI5引擎。接着,我们设置要转换为语音的文本为"Hello, how are you today?",然后使用SAPI5引擎将文本转换为语音并播放出来。

您可以根据需要修改文本内容,调整语音的音量、语速等参数。希望这个示例能帮助您开始使用pyttsx3的SAPI5引擎进行文本到语音的转换。如果您有任何其他问题或需要进一步帮助,请随时告诉我。
在这里插入图片描述

  1. nsss引擎支持介绍和示例代码
    在Mac OS平台上,pyttsx3库本身并不直接支持nsss引擎。pyttsx3库主要支持nsss引擎的一个替代方案是使用pyttsx3.drivers模块中的NSSpeechSynthesizer驱动程序。

以下是一个示例代码,演示如何在Mac OS平台上使用pyttsx3.drivers模块中的NSSpeechSynthesizer驱动程序:

import pyttsx3
from pyttsx3.drivers import NSSpeechSynthesizer# 初始化语音合成对象
engine = pyttsx3.init(driverName='nsss')# 设置要转换为语音输出的文本
text = "Hello, this is a test."# 使用语音合成引擎将文本转换为语音输出
engine.say(text)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用pyttsx3.init()函数初始化语音合成对象,并通过driverName参数指定使用nsss引擎的驱动程序。

然后,我们设置要转换为语音输出的文本,并使用语音合成引擎的say()方法将文本转换为语音输出。最后,使用engine.runAndWait()等待语音输出完成。

请注意,使用NSSpeechSynthesizer驱动程序需要确保您的系统上已安装了pyobjc库。您可以使用以下命令安装pyobjc库:

pip install pyobjc

在这里插入图片描述
3. espeak引擎支持介绍和示例代码
eSpeak 是一个常用的开源文本到语音合成引擎,您可以使用 pyttsx3 库来使用 eSpeak 引擎进行文本到语音的转换。以下是一个简单的示例代码,演示如何在 Python 中使用 eSpeak 引擎:

import pyttsx3# 初始化 pyttsx3 引擎
engine = pyttsx3.init('espeak')# 设置要转换为语音的文本
text = "Hello, how are you today?"# 使用 eSpeak 引擎将文本转换为语音并播放
engine.say(text)
engine.runAndWait()

在这个示例中,我们首先导入 pyttsx3 库,然后初始化一个 eSpeak 引擎。接着,我们设置要转换为语音的文本为"Hello, how are you today?",然后使用 eSpeak 引擎将文本转换为语音并播放出来。

二、SAPI5引擎适用场景介绍和示例代码

在这里插入图片描述
(一)适用场景

  1. Windows平台应用程序:SAPI5引擎是Windows操作系统的默认语音合成引擎,因此如果您的应用程序运行在Windows平台上,使用SAPI5引擎可以提供与操作系统集成的语音合成功能。

  2. 通用语音合成需求:SAPI5引擎支持多种语言和语音风格,因此适用于通用的语音合成需求。您可以根据需要选择不同的语音样式和语言,以满足不同用户群体的需求。

  3. 本地语音合成:由于SAPI5引擎是Windows平台的本地语音合成引擎,因此使用它可以在不依赖云服务的情况下生成语音。这对于需要在离线环境中进行语音合成的应用程序非常有用。

  4. 自定义语音样式:SAPI5引擎提供了一些可配置的参数,您可以使用这些参数来自定义生成的语音的音调、语速、音量等属性。这使得SAPI5引擎适合于需要对语音进行精细调整和个性化的应用程序。

需要注意的是,SAPI5引擎的可用性取决于您的操作系统和安装的语音合成引擎。在使用SAPI5引擎之前,请确保您的系统上已安装了相应的语音合成引擎,并且在pyttsx3库中正确配置了SAPI5引擎。

总之,如果您的应用程序运行在Windows平台上,需要通用的语音合成功能,并且希望在本地环境中进行语音合成,那么使用pyttsx3的SAPI5引擎是一个不错的选择。
在这里插入图片描述
(二)SAPI5引擎在Windows平台应用程序中使用示例代码
以下是使用pyttsx3库和SAPI5引擎在Windows平台上创建一个简单的应用程序,实现文本到语音的转换:

import pyttsx3def text_to_speech(text):engine = pyttsx3.init()engine.setProperty('rate', 150)  # 设置语速 (默认为200)engine.setProperty('volume', 0.8)  # 设置音量 (范围为0.0到1.0)engine.setProperty('voice', engine.getProperty('voices')[0].id)  # 选择第一个可用的语音engine.say(text)engine.runAndWait()# 在Windows平台上运行示例
if __name__ == "__main__":text = "Hello, world! This is a test."text_to_speech(text)

在这个示例中,我们首先使用pyttsx3.init()初始化pyttsx3引擎,并设置一些属性,如语速和音量。然后,我们使用engine.setProperty('voice', engine.getProperty('voices')[0].id)来选择第一个可用的语音。您可以根据需要选择其他语音,通过更改索引值来选择不同的语音。

接下来,我们使用engine.say(text)来指定要转换为语音的文本。最后,使用engine.runAndWait()来启动语音合成过程,并等待语音合成完成。

运行示例代码后,您将听到计算机将文本转换为语音并播放出来。这演示了在Windows平台上使用pyttsx3的SAPI5引擎实现与操作系统集成的语音合成功能。您可以根据需要进行进一步的定制和扩展。
在这里插入图片描述
(三)SAPI5引擎通用语音合成需求示例代码
以下是使用pyttsx3库和SAPI5引擎实现通用语音合成的示例代码:

import pyttsx3def text_to_speech(text, language='en', voice_style=None):engine = pyttsx3.init()engine.setProperty('rate', 150)  # 设置语速 (默认为200)engine.setProperty('volume', 0.8)  # 设置音量 (范围为0.0到1.0)# 选择指定语言的语音voices = engine.getProperty('voices')for voice in voices:if voice.languages[0] == language:if voice_style is None or voice.name == voice_style:engine.setProperty('voice', voice.id)breakengine.say(text)engine.runAndWait()# 示例:将英文文本转换为语音
text = "Hello, world! This is a test."
text_to_speech(text, language='en')# 示例:将中文文本转换为语音
text = "你好,世界!这是一个测试。"
text_to_speech(text, language='zh')# 示例:选择特定的语音风格
text = "Hello, world! This is a test."
text_to_speech(text, language='en', voice_style='Microsoft David Desktop')

在这个示例中,我们定义了一个text_to_speech函数,它接受要转换为语音的文本、语言和语音风格作为参数。我们使用pyttsx3.init()初始化pyttsx3引擎,并设置一些属性,如语速和音量。

然后,我们遍历可用的语音,根据指定的语言和语音风格选择合适的语音。如果未指定语音风格,将选择指定语言的第一个可用语音。

接下来,我们使用engine.say(text)来指定要转换为语音的文本。最后,使用engine.runAndWait()来启动语音合成过程,并等待语音合成完成。

在示例代码中,我们提供了三个示例:将英文文本转换为语音、将中文文本转换为语音,以及选择特定的语音风格。您可以根据需要调整和扩展这些示例,以满足不同语言和语音风格的需求。
(四)本地语音合成需求示例代码
在这里插入图片描述
以下是使用pyttsx3库和SAPI5引擎实现本地语音合成的示例代码:

import pyttsx3def text_to_speech(text):engine = pyttsx3.init(driverName='sapi5')engine.setProperty('rate', 150)  # 设置语速 (默认为200)engine.setProperty('volume', 0.8)  # 设置音量 (范围为0.0到1.0)engine.say(text)engine.runAndWait()# 示例:将文本转换为语音
text = "Hello, world! This is a test."
text_to_speech(text)

在这个示例中,我们使用pyttsx3.init(driverName='sapi5')来初始化pyttsx3引擎,并指定使用SAPI5引擎。这将确保在Windows平台上使用本地的语音合成引擎。

然后,我们设置一些属性,如语速和音量,使用engine.setProperty方法。

接下来,我们使用engine.say(text)来指定要转换为语音的文本。最后,使用engine.runAndWait()来启动语音合成过程,并等待语音合成完成。

运行示例代码后,您将听到计算机将文本转换为语音并播放出来。这演示了在Windows平台上使用pyttsx3的SAPI5引擎实现本地语音合成的功能。由于SAPI5引擎是本地引擎,因此它可以在离线环境中工作,而无需依赖云服务。
在这里插入图片描述
(五)自定义语音样式示例代码
以下是使用pyttsx3库和SAPI5引擎实现自定义语音样式的示例代码:

import pyttsx3def text_to_speech(text):engine = pyttsx3.init(driverName='sapi5')# 自定义语音样式engine.setProperty('rate', 150)  # 设置语速 (默认为200)engine.setProperty('volume', 0.8)  # 设置音量 (范围为0.0到1.0)engine.setProperty('voice', 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SPEECH\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0')  # 设置语音engine.say(text)engine.runAndWait()# 示例:将文本转换为语音,使用自定义的语音样式
text = "Hello, world! This is a test."
text_to_speech(text)

在这个示例中,我们使用pyttsx3.init(driverName='sapi5')来初始化pyttsx3引擎,并指定使用SAPI5引擎。

然后,我们使用engine.setProperty方法来设置一些自定义的语音样式属性。在示例中,我们设置了语速为150(默认为200),音量为0.8(范围为0.0到1.0),以及使用特定的语音。

要设置特定的语音,您可以使用engine.setProperty('voice', voice_id),其中voice_id是语音的标识符。在示例中,我们使用了一个具体的语音标识符来指定要使用的语音。

最后,我们使用engine.say(text)来指定要转换为语音的文本。最后,使用engine.runAndWait()来启动语音合成过程,并等待语音合成完成。

您可以根据需要调整和扩展这些示例,以满足您对语音样式的个性化需求。通过调整语速、音量和选择特定的语音,您可以创建符合特定要求和偏好的自定义语音样式。

三、nsss引擎适用场景介绍和示例代码

在这里插入图片描述
(一)适用场景介绍
nsss引擎是Mac OS的默认语音合成引擎。nsss引擎适用于在Mac平台上进行本地语音合成。它提供了一些可配置的参数,可以用来自定义生成的语音的音调、语速、音量等属性。以下是nsss引擎在Mac平台上的一些适用场景:

  1. 辅助技术应用程序:nsss引擎是Mac OS的默认语音合成引擎,因此在辅助技术应用程序中广泛使用。它可以帮助视觉障碍人士通过语音输出来访问文本内容。

  2. 语音导航和提示:nsss引擎可以用于创建语音导航和提示,例如在应用程序中提供语音指示、警告或提醒。

  3. 语音反馈应用程序:nsss引擎可以用于创建需要语音反馈的应用程序,例如语音助手、语音交互应用程序等。

  4. 教育和娱乐应用程序:nsss引擎可以用于创建教育和娱乐应用程序,例如语音故事书、语音学习应用程序等。

总的来说,nsss引擎适用于任何需要在Mac平台上进行语音合成的应用程序。您可以使用pyttsx3库与nsss引擎一起进行本地语音合成,并根据需要进行个性化的设置和调整。
(二)nsss在Mac OS平台辅助技术应用程序中
使用示例代码
在这里插入图片描述
以下是一个使用pyttsx3库和nsss引擎创建辅助技术应用程序的示例代码,以帮助视觉障碍人士通过语音输出来访问文本内容:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用nsss引擎
engine.setProperty('voice', voices[0].id)  # 选择第一个声音,即nsss引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 获取要转换为语音的文本内容
text = "欢迎使用辅助技术应用程序。"# 使用语音合成引擎将文本转换为语音输出
engine.say(text)# 等待语音输出完成
engine.runAndWait()

这个示例代码使用pyttsx3库初始化一个语音合成对象,并设置使用nsss引擎。然后,您可以根据需要设置语速和音量。接下来,将要转换为语音的文本内容存储在变量text中。最后,使用语音合成引擎的say()方法将文本转换为语音输出,并使用runAndWait()方法等待语音输出完成。

您可以根据实际需求进行修改和扩展这个示例代码,以满足您辅助技术应用程序的具体要求。
在这里插入图片描述
(三)nsss引擎在Mac OS平台语音导航和提示中使用示例代码
以下是一个使用pyttsx3库和nsss引擎创建语音导航和提示的示例代码,可以在应用程序中提供语音指示、警告或提醒:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用nsss引擎
engine.setProperty('voice', voices[0].id)  # 选择第一个声音,即nsss引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 获取要转换为语音的文本内容
text = "请注意,您即将离开安全区域。"# 使用语音合成引擎将文本转换为语音输出
engine.say(text)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用了与前面示例相同的步骤来初始化语音合成对象并设置使用nsss引擎。您可以根据需要设置语速和音量。然后,将要转换为语音的文本内容存储在变量text中。最后,使用语音合成引擎的say()方法将文本转换为语音输出,并使用runAndWait()方法等待语音输出完成。

您可以根据实际需求修改和扩展这个示例代码,以满足您应用程序中的语音导航和提示的具体要求。
在这里插入图片描述
(四)nsss在Mac OS平台中语音反馈应用程序中使用示例代码
以下是一个使用pyttsx3库和nsss引擎创建语音反馈应用程序的示例代码,可以用于实现语音助手、语音交互等功能:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用nsss引擎
engine.setProperty('voice', voices[0].id)  # 选择第一个声音,即nsss引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 无限循环,等待用户输入
while True:# 获取用户输入的文本text = input("请输入您的指令:")# 使用语音合成引擎将文本转换为语音输出engine.say(text)# 等待语音输出完成engine.runAndWait()

在这个示例代码中,我们使用了与前面示例相同的步骤来初始化语音合成对象并设置使用nsss引擎。您可以根据需要设置语速和音量。然后,使用一个无限循环来等待用户输入指令。用户输入的文本存储在变量text中。然后,使用语音合成引擎的say()方法将文本转换为语音输出,并使用runAndWait()方法等待语音输出完成。

这个示例代码可以作为一个简单的语音反馈应用程序的骨架,您可以根据实际需求进行修改和扩展,以实现更复杂的语音助手、语音交互等功能。例如,您可以添加语音识别功能来将语音指令转换为文本,然后再进行处理和反馈。
在这里插入图片描述
(五)nsss引擎在Mac OS平台教育和娱乐应用程序中使用示例代码
以下是一个使用pyttsx3库和nsss引擎创建教育和娱乐应用程序的示例代码,可以用于实现语音故事书、语音学习等功能:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用nsss引擎
engine.setProperty('voice', voices[0].id)  # 选择第一个声音,即nsss引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 定义故事内容
story = """从前有座山,山上有座庙,庙里有个老和尚和一个小和尚。有一天,老和尚对小和尚说:“我们去给庙里的佛像擦一擦吧。”于是,老和尚和小和尚一起拿起抹布,仔细地擦拭佛像。"""# 使用语音合成引擎将故事内容转换为语音输出
engine.say(story)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用了与前面示例相同的步骤来初始化语音合成对象并设置使用nsss引擎。您可以根据需要设置语速和音量。然后,定义一个故事的文本内容,并将其存储在变量story中。然后,使用语音合成引擎的say()方法将故事内容转换为语音输出,并使用runAndWait()方法等待语音输出完成。

这个示例代码可以作为一个简单的教育和娱乐应用程序的骨架,您可以根据实际需求进行修改和扩展,以实现更复杂的语音故事书、语音学习等功能。例如,您可以添加多个故事选项供用户选择,或者结合其他功能,如语音识别和回答问题等。

四、eSpeak适用场景介绍和示例代码

在这里插入图片描述
(一)适用场景介绍
eSpeak是一个开源的文本到语音合成引擎,适用于多种场景和应用。以下是一些适合使用eSpeak引擎的场景:

  1. 辅助技术:eSpeak引擎广泛应用于辅助技术领域,为视觉障碍人士提供语音反馈和辅助阅读功能。它可以将电子文本、网页内容、电子书等转换为语音输出,帮助用户通过听觉方式获取信息。

  2. 教育应用:eSpeak引擎可用于创建语音教材、语音学习应用程序等。它可以将教材内容转换为语音输出,帮助学生更好地理解和学习。同时,它还可以用于语音测验、语音练习等交互式学习活动。

  3. 语音导航和提示:eSpeak引擎可以用于语音导航应用程序,例如语音导航系统、语音引导设备等。它可以将导航指令、路线提示等转换为语音输出,为用户提供实时的导航和指引。

  4. 语音机器人和虚拟助手:eSpeak引擎可用于创建语音机器人、虚拟助手等应用。它可以将机器人的回答、提示信息等转换为语音输出,实现与用户的语音交互。

  5. 娱乐应用:eSpeak引擎还可以用于创建娱乐应用程序,例如语音游戏、语音演出等。它可以为游戏角色、虚拟角色等提供语音表达,增加娱乐体验和互动性。

总的来说,eSpeak引擎适用于各种需要文本到语音合成的场景,特别是在辅助技术、教育和娱乐领域有广泛的应用。它具有开源、跨平台、多语言支持等特点,可以根据实际需求进行定制和扩展。
在这里插入图片描述
(二)eSpeak在辅助技术中使用示例代码
以下是一个使用eSpeak引擎创建辅助技术应用程序的示例代码,可以将电子文本转换为语音输出:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用eSpeak引擎
engine.setProperty('voice', voices[1].id)  # 选择第二个声音,即eSpeak引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 定义要转换为语音的文本内容
text = "Hello, this is an example of using the eSpeak engine for text-to-speech conversion."# 使用语音合成引擎将文本内容转换为语音输出
engine.say(text)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用了与之前示例相同的步骤来初始化语音合成对象并设置使用eSpeak引擎。您可以根据需要设置语速和音量。然后,定义要转换为语音的文本内容,并将其存储在变量text中。然后,使用语音合成引擎的say()方法将文本内容转换为语音输出,并使用runAndWait()方法等待语音输出完成。

这个示例代码可以作为一个简单的辅助技术应用程序的骨架,您可以根据实际需求进行修改和扩展,以实现更复杂的功能,如将电子文本、网页内容、电子书等转换为语音输出,并提供辅助阅读功能。
(三)eSpeak在教育应用中使用示例代码在这里插入图片描述
以下是一个使用eSpeak引擎创建教育应用程序的示例代码,可以将教材内容转换为语音输出,并实现语音测验和语音练习功能:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用eSpeak引擎
engine.setProperty('voice', voices[1].id)  # 选择第二个声音,即eSpeak引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 定义要转换为语音的教材内容
text = "In mathematics, the Pythagorean theorem, also known as Pythagoras' theorem, is a fundamental relation in Euclidean geometry among the three sides of a right triangle. It states that the square of the hypotenuse is equal to the sum of the squares of the other two sides."# 使用语音合成引擎将教材内容转换为语音输出
engine.say(text)# 等待语音输出完成
engine.runAndWait()# 定义要进行语音测验的问题
question = "What is the Pythagorean theorem?"# 使用语音合成引擎将问题转换为语音输出
engine.say(question)# 等待语音输出完成
engine.runAndWait()# 等待用户输入答案
user_answer = input("Please enter your answer: ")# 检查用户答案并给出反馈
if user_answer == "The Pythagorean theorem states that the square of the hypotenuse is equal to the sum of the squares of the other two sides.":feedback = "Correct!"
else:feedback = "Incorrect. The correct answer is: The Pythagorean theorem states that the square of the hypotenuse is equal to the sum of the squares of the other two sides."# 使用语音合成引擎将反馈转换为语音输出
engine.say(feedback)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用了与之前示例相同的步骤来初始化语音合成对象并设置使用eSpeak引擎。您可以根据需要设置语速和音量。然后,定义要转换为语音的教材内容,并将其存储在变量text中。使用语音合成引擎的say()方法将教材内容转换为语音输出,并使用runAndWait()方法等待语音输出完成。

接下来,定义要进行语音测验的问题,并使用语音合成引擎将问题转换为语音输出。然后,等待用户输入答案,并根据答案给出相应的反馈。最后,使用语音合成引擎将反馈转换为语音输出,并等待语音输出完成。

这个示例代码可以作为一个简单的教育应用程序的骨架,您可以根据实际需求进行修改和扩展,以实现更复杂的功能,如将教材内容转换为语音输出、进行语音测验和语音练习等交互式学习活动。
在这里插入图片描述
(四)eSpeak在语音导航和提示中使用示例代码
以下是一个使用eSpeak引擎创建语音导航和提示的示例代码,可以将导航指令和路线提示转换为语音输出:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用eSpeak引擎
engine.setProperty('voice', voices[1].id)  # 选择第二个声音,即eSpeak引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 定义导航指令
navigation_instruction = "Turn left in 200 meters."# 使用语音合成引擎将导航指令转换为语音输出
engine.say(navigation_instruction)# 等待语音输出完成
engine.runAndWait()# 定义路线提示
route_prompt = "In 500 meters, take the second exit at the roundabout."# 使用语音合成引擎将路线提示转换为语音输出
engine.say(route_prompt)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用了与之前示例相同的步骤来初始化语音合成对象并设置使用eSpeak引擎。您可以根据需要设置语速和音量。然后,定义导航指令和路线提示,并使用语音合成引擎的say()方法将它们转换为语音输出。使用runAndWait()方法等待语音输出完成。

这个示例代码可以作为一个简单的语音导航和提示应用程序的骨架,您可以根据实际需求进行修改和扩展,以实现更复杂的功能,如实时导航指令、路线提示、语音导航系统等。
在这里插入图片描述
(五)eSpeak在语音机器人和虚拟助手中使用示例代码
以下是一个使用eSpeak引擎创建语音机器人和虚拟助手的示例代码,可以将机器人的回答和提示信息转换为语音输出,实现与用户的语音交互:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用eSpeak引擎
engine.setProperty('voice', voices[1].id)  # 选择第二个声音,即eSpeak引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 定义机器人的回答
robot_answer = "I'm sorry, I didn't understand your question. Can you please repeat?"# 使用语音合成引擎将机器人的回答转换为语音输出
engine.say(robot_answer)# 等待语音输出完成
engine.runAndWait()# 等待用户输入问题
user_question = input("Please ask your question: ")# 模拟机器人的回答
if user_question == "What's the weather today?":robot_answer = "The weather is sunny with a temperature of 25 degrees Celsius."
elif user_question == "Tell me a joke.":robot_answer = "Why don't scientists trust atoms? Because they make up everything!"
else:robot_answer = "I'm sorry, I don't have the answer to that question."# 使用语音合成引擎将机器人的回答转换为语音输出
engine.say(robot_answer)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用了与之前示例相同的步骤来初始化语音合成对象并设置使用eSpeak引擎。您可以根据需要设置语速和音量。然后,定义机器人的回答,并使用语音合成引擎的say()方法将回答转换为语音输出。使用runAndWait()方法等待语音输出完成。

接下来,等待用户输入问题,并根据问题模拟机器人的回答。根据用户的问题,我们定义了几个简单的问题和对应的回答。最后,使用语音合成引擎将机器人的回答转换为语音输出,并等待语音输出完成。

这个示例代码可以作为一个简单的语音机器人和虚拟助手应用程序的骨架,您可以根据实际需求进行修改和扩展,以实现更复杂的功能,如语音识别、自然语言处理、对话管理等,从而实现更智能的语音交互。
在这里插入图片描述
(六)eSpeak在娱乐应用中使用示例代码
以下是一个使用eSpeak引擎创建娱乐应用程序的示例代码,可以为游戏角色提供语音表达,增加娱乐体验和互动性:

import pyttsx3# 创建pyttsx3的语音合成对象
engine = pyttsx3.init()# 获取所有可用的语音合成器
voices = engine.getProperty('voices')# 设置使用eSpeak引擎
engine.setProperty('voice', voices[1].id)  # 选择第二个声音,即eSpeak引擎的声音# 设置语速(可选)
engine.setProperty('rate', 150)  # 设置语速为150# 设置音量(可选)
engine.setProperty('volume', 0.8)  # 设置音量为0.8# 定义游戏角色的语音表达
character_voice = {'hero': "I'm ready for the adventure!",'villain': "You can't defeat me!",'npc': "Welcome to the village!"
}# 模拟游戏场景
character = input("Choose a character (hero, villain, npc): ")# 根据选择的角色,获取对应的语音表达
if character in character_voice:voice_expression = character_voice[character]
else:voice_expression = "Invalid character."# 使用语音合成引擎将角色的语音表达转换为语音输出
engine.say(voice_expression)# 等待语音输出完成
engine.runAndWait()

在这个示例代码中,我们使用了与之前示例相同的步骤来初始化语音合成对象并设置使用eSpeak引擎。您可以根据需要设置语速和音量。然后,定义了游戏角色的语音表达,使用字典将角色和对应的语音表达关联起来。

接下来,模拟游戏场景,让用户选择一个角色。根据用户选择的角色,我们从字典中获取对应的语音表达。如果用户选择的角色无效,则使用默认的提示信息。

最后,使用语音合成引擎的say()方法将角色的语音表达转换为语音输出,并等待语音输出完成。

这个示例代码可以作为一个简单的娱乐应用程序的骨架,您可以根据实际需求进行修改和扩展,以实现更多角色、更多语音表达和更复杂的游戏场景,从而提升娱乐体验和互动性。

五、归纳总结

在这里插入图片描述当涉及到语音合成引擎时,pyttsx3库提供了对多种引擎的支持。以下是关于pyttsx3支持多种语音引擎的知识点的总结:

  1. 初始化语音合成对象:使用pyttsx3.init()函数初始化语音合成对象。该函数返回一个Engine对象,用于控制语音合成过程。

  2. 获取可用的语音合成器:通过engine.getProperty('voices')方法获取可用的语音合成器列表。每个语音合成器都有一个唯一的id属性,表示不同的引擎。

  3. 选择语音合成引擎:使用engine.setProperty('voice', voice_id)方法选择特定的语音合成引擎。voice_id参数是语音合成器对象中的id属性。

  4. 默认语音合成引擎:pyttsx3库默认使用系统的默认语音合成引擎。可以使用pyttsx3.init()函数的driverName参数指定要使用的特定引擎。

  5. 支持的语音合成引擎:pyttsx3库支持多种语音合成引擎,包括但不限于以下几种:

    • sapi5:适用于Windows平台的Microsoft Speech API 5。
    • nsss:适用于Mac OS平台的NSSpeechSynthesizer。
    • espeak:基于eSpeak引擎的开源语音合成器。
    • nsss引擎的替代方案:在Mac OS平台上,可以使用pyttsx3.drivers模块中的NSSpeechSynthesizer驱动程序作为nsss引擎的替代方案。
  6. 安装特定引擎的依赖:使用特定引擎之前,需要确保系统上已安装相应的依赖库。例如,在Mac OS平台上使用NSSpeechSynthesizer驱动程序需要安装pyobjc库。

在这里插入图片描述综上所述,pyttsx3库提供了对多种语音合成引擎的支持,并通过pyttsx3.init()函数的driverName参数和engine.setProperty('voice', voice_id)方法来选择和配置特定的引擎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/259397.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红队学习笔记Day6 --->干货分享

今天看到这样的一个东西,好好好,有点恐怖😓😓😱😱😱😱 我就想网安是不是也有这种东西? 我来试试 icmp,RDP,arp,dhcp,nat&a…

Eclipse - 查看工程或者文件的磁盘路径

Eclipse - 查看工程或者文件的磁盘路径 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explorer 4.1.0 -> Install2. right-click -> Open in ExplorerReferences 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explo…

【Spring MVC篇】参数的传递及json数据传参

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、普通参数的传…

【Java多线程】线程中几个常见的属性以及状态

目录 Thread的几个常见属性 1、Id 2、Name名称 3、State状态 4、Priority优先级 5、Daemon后台线程 6、Alive存活 Thread的几个常见属性 1、Id ID 是线程的唯一标识,由系统自动分配,不同线程不会重复。 2、Name名称 用户定义的名称。该名称在各种…

【开源】SpringBoot框架开发服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

160基于matlab的负熵和峭度信号的盲分离

基于matlab的负熵和峭度信号的盲分离。基于峭度的FastICA算法的收敛速度要快,迭代次数比基于负熵的FastICA算法少四倍以上。SMSE随信噪比增大两种判据下的FastICA算法都逐渐变小,但是基于峭度的算法的SMSE更小,因此基于峭度的FastICA算法性能…

UVa1359/LA3491 Hills

题目链接 本题是2005年ICPC亚洲区域赛杭州欧赛区的H题 题意 平面上有 n(n≤500)条线段,其中每条线段的端点都不会在其他线段上。你的任务是数一数有多少个“没有被其他线段切到”的三角形(即小山)。如下图所示&#x…

VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle 在vtk 中有时我们需要监听 键盘或鼠标做一些事; 1. 创建 Actor; Sphere vtk.vtkSphereSource() Sphere.SetRadius(10)mapper vtk.vtkPolyDataMapper() mapper.SetInputConnection(Sphere.GetOutputPort()) actor vtk.vtkAc…

winprop二次开发

winprop二次开发 前言工具1——整合多个天线结果用途代码实现 工具2——wallman辅助工具需求代码实现功能实现参数输入实验 前言 工作需求,对该软件进行简单地二次开发,都是一些挺简单的代码,单纯是为了上传之后将其从本地删除 工具1——整…

嵌入式day24

开课复工啦~ 冲冲冲! 文件IO: read函数和write函数: 📚 write 接口有三个参数: fd:文件描述符buf:要写入的缓冲区的起始地址(如果是字符串,那么就是字符串的起始地址&…

算法学习系列(三十五):贪心(杂)

目录 引言一、合并果子(Huffman树)二、排队打水(排序不等式)三、货仓选址(绝对值不等式)四、耍杂技的牛(推公式) 引言 上一篇文章也说过了这个贪心问题没有一个规范的套路和模板&am…

第三十三回 镇三山大闹青州道 霹雳火夜走瓦砾场-python分割字符串

黄信和刘知寨押解宋江和花荣向青州走,碰到了燕顺等三人来劫囚车,黄信逃走了,刘知寨被抓住,被花荣一刀杀了。 黄信把情况报给青州知府,派来了青州兵马秦统制,人称霹雳火的秦明。秦明与花荣打,花…

UnityShader——06UnityShader介绍

UnityShader介绍 UnityShader的基础ShaderLab UnityShader属性块介绍 Properties {//和public变量一样会显示在Unity的inspector面板上//_MainTex为变量名,在属性里的变量一般会加下划线,来区分参数变量和临时变量//Texture为变量命名//2D为类型&…

如何用Qt实现一个无标题栏、半透明、置顶(悬浮)的窗口

在Qt框架中,要实现一个无标题栏、半透明、置顶(悬浮)的窗口,需要一些特定的设置和技巧。废话不多说,下面我将以DrawClient软件为例,介绍一下实现这种效果的四个要点。 要点一:移除标题栏&#…

SG5032EAN规格书

SG5032EAN 晶体振荡器结合了相位锁定环(PLL)技术和AT切割晶体单元,提供了73.5 MHz至700 MHz的广泛频率范围,以满足高速数字应用的需求。高性能的LV-PECL输出,2.5V和3.3V电源电压,可灵活适配不同设计的电源需…

vue3 之 商城项目—封装SKU组件

认识SKU组件 SKU组件的作用 产出当前用户选择的商品规格,为加入购物车操作提供数据信息,在选择的过程中,组件的选中状态要进行更新,组件还要提示用户当前规格是否禁用,每次选择都要产出对应的sku数据 SKU组件的使用 …

物奇平台DRC动态范围控制修改方法

物奇平台DRC动态范围控制修改 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 音频 DRC 是指动态范围控制(Dyna

suse15 sp3-sp5离线安装中安装FIO

没有网络的情况下,离线安装相对比较困难一点,所有需要提前下载相应的RPM安装包 FIO 安装包链接如下: Install package benchmark / fio 正常安装的时候,会出现问题 如下: google下 https://opensuse.pkgs.org/15.5/…

Spring Boot 笔记 024 登录页面

1.1 登录接口 //导入request.js请求工具 import request from /utils/request.js//提供调用注册接口的函数 export const userRegisterService (registerData)>{//借助于UrlSearchParams完成传递const params new URLSearchParams()for(let key in registerData){params.a…

IOS破解软件安装教程

对于很多iOS用户而言,获取软件的途径显得较为单一,必须通过App Store进行下载安装。 这样的限制,时常让人羡慕安卓系统那些自由下载各类版本软件的便捷。 心中不禁生出疑问:难道iOS世界里,就不存在所谓的“破解版”软件…