了解如何通过使用 Python 中的 gTTS 和 pyttsx3 库在线和离线将文本转换为语音来执行语音合成。
语音合成(或文本到语音)是计算机生成的人类语音模拟。它将人类语言文本转换为类似人类的语音音频。在本教程中,结合详细的python文本转语音示例,你将学习如何在 Python 中将文本转换为语音。
如何将文本转换为音频?在本python文本转语音教程中,我们不会构建神经网络并训练模型以获得结果,因为它非常复杂且难以做到。相反,我们将使用一些提供它的 API 和引擎。有很多 API 提供此服务,其中一种常用服务是 Google Text to Speech,在本教程中,我们将使用它以及另一个离线库:pyttsx3。
为了清楚起见,本教程是关于将文本转换为语音,而不是相反,如果你想将语音转换为文本,请查看本教程。
目录:
- 在线文字转语音
- 离线文本到语音
首先,让我们安装所需的模块:
pip3 install gTTS pyttsx3 playsound
在线文字转语音
python文本转语音示例:你可能猜到了,gTTS代表 Google Text To Speech,它是一个 Python 库,用于与 Google Translate 的文本到语音 API 交互。它需要互联网连接,而且非常容易使用。
打开一个新的 Python 文件并导入:
import gtts
from playsound import playsound
使用这个库非常简单,你只需要将文本传递给gTTS对象,该对象是Google Translate的 Text to Speech API 的接口:
# make request to google to get synthesis
tts = gtts.gTTS("Hello world")
到目前为止,我们已经发送了文本并从 API 中检索了实际的音频语音,让我们将此音频保存到一个文件中:
# save the audio file
tts.save("hello.mp3")
太棒了,你会在当前目录中看到一个新文件,让我们使用之前安装的playsound模块播放它:
# play the audio file
playsound("hello.mp3")
就是这样!你会听到一个机器人在说你刚才让他说的话!
它不仅在英语中可用,你也可以通过传递lang
参数来使用其他语言:
# in spanish
tts = gtts.gTTS("Hola Mundo", lang="es")
tts.save("hola.mp3")
playsound("hola.mp3")
如果你不想将其保存到文件并直接播放,那么你应该使用tts.write_to_fp()
哪个接受io.BytesIO()
对象写入,查看此链接以获取更多信息。
要获取可用语言列表,请使用以下命令:
# all available languages along with their IETF tag
print(gtts.lang.tts_langs())
以下是支持的语言:
{'af': 'Afrikaans', 'sq': 'Albanian', 'ar': 'Arabic', 'hy': 'Armenian', 'bn': 'Bengali', 'bs': 'Bosnian', 'ca': 'Catalan', 'hr': 'Croatian', 'cs': 'Czech', 'da': 'Danish', 'nl': 'Dutch', 'en': 'English', 'eo': 'Esperanto', 'et': 'Estonian', 'tl': 'Filipino', 'fi': 'Finnish', 'fr': 'French', 'de': 'German', 'el': 'Greek', 'gu': 'Gujarati', 'hi': 'Hindi', 'hu': 'Hungarian', 'is': 'Icelandic', 'id': 'Indonesian', 'it': 'Italian', 'ja': 'Japanese', 'jw': 'Javanese', 'kn': 'Kannada', 'km': 'Khmer', 'ko': 'Korean', 'la': 'Latin', 'lv': 'Latvian', 'mk': 'Macedonian', 'ml': 'Malayalam', 'mr':
'Marathi', 'my': 'Myanmar (Burmese)', 'ne': 'Nepali', 'no': 'Norwegian', 'pl': 'Polish', 'pt': 'Portuguese', 'ro': 'Romanian', 'ru': 'Russian', 'sr': 'Serbian', 'si': 'Sinhala', 'sk': 'Slovak', 'es': 'Spanish', 'su': 'Sundanese', 'sw': 'Swahili', 'sv': 'Swedish', 'ta': 'Tamil', 'te': 'Telugu', 'th': 'Thai', 'tr': 'Turkish', 'uk': 'Ukrainian', 'ur': 'Urdu', 'vi': 'Vietnamese', 'cy': 'Welsh', 'zh-cn': 'Chinese (Mandarin/China)', 'zh-tw': 'Chinese (Mandarin/Taiwan)', 'en-us': 'English (US)', 'en-ca': 'English (Canada)', 'en-uk': 'English (UK)', 'en-gb': 'English (UK)', 'en-au': 'English (Australia)', 'en-gh': 'English (Ghana)', 'en-in': 'English (India)', 'en-ie': 'English (Ireland)', 'en-nz': 'English (New Zealand)', 'en-ng': 'English (Nigeria)', 'en-ph': 'English (Philippines)', 'en-za': 'English (South Africa)', 'en-tz': 'English (Tanzania)', 'fr-ca': 'French (Canada)', 'fr-fr': 'French (France)', 'pt-br': 'Portuguese (Brazil)', 'pt-pt': 'Portuguese (Portugal)', 'es-es': 'Spanish (Spain)', 'es-us': 'Spanish (United States)'}
python文本转语音:离线文本到语音
现在你知道如何使用 Google 的 API,但是如果你想离线使用文本到语音技术怎么办?
如何将文本转换为音频?好吧,pyttsx3库派上了用场,它是 Python 中的文本到语音转换库,它会查找你的平台中预装的 TTS 引擎并使用它们,以下是该库使用的文本到语音合成器:
- Windows XP、Windows Vista、8、8.1 和 10 上的SAPI5
- Mac OS X 10.5 和 10.6 上的NSSpeechSynthesizer
- 在 Ubuntu 桌面版8.10、9.04和 9.10 上使用espeak
以下是pyttsx3库的主要功能:
- 它完全离线工作
- 你可以在系统上安装的不同声音中进行选择
- 控制语速
- 调整音量
- 将语音音频保存到文件中
注意:如果你使用的是 Linux 系统并且语音输出不适用于此库,那么你应该安装 espeak、ffmpeg 和 libespeak1:
$ sudo apt update && sudo apt install espeak ffmpeg libespeak1
要开始使用这个库,打开一个新的 Python 文件并导入它:
import pyttsx3
现在我们需要初始化 TTS 引擎:
# initialize Text-to-speech engine
engine = pyttsx3.init()
python文本转语音:现在要转换一些文本,我们需要使用say()和runAndWait()方法:
# convert this text to speech
text = "Python is a great programming language"
engine.say(text)
# play the speech
engine.runAndWait()
say()方法向事件队列添加一个话语,而runAndWait()方法运行实际的事件循环,直到所有命令排队。所以你可以多次调用say()方法,最后只运行一个runAndWait()方法,为了听综合,试试吧!
这个库为我们提供了一些我们可以根据需要调整的属性。例如,让我们获取语速的详细信息,python文本转语音示例:
# get details of speaking rate
rate = engine.getProperty("rate")
print(rate)
输出:
200
好的,让我们将其更改为300(使语速更快):
# setting new voice rate (faster)
engine.setProperty("rate", 300)
engine.say(text)
engine.runAndWait()
或者更慢:
# slower
engine.setProperty("rate", 100)
engine.say(text)
engine.runAndWait()
另一个有用的属性是voices,它允许我们获取你机器上所有可用语音的详细信息:
# get details of all voices available
voices = engine.getProperty("voices")
print(voices)
这是我的情况下的输出:
[<pyttsx3.voice.Voice object at 0x000002D617F00A20>, <pyttsx3.voice.Voice object at 0x000002D617D7F898>, <pyttsx3.voice.Voice object at 0x000002D6182F8D30>]
如你所见,我的机器有三个语音扬声器,我们使用第二个,例如:
# set another voice
engine.setProperty("voice", voices[1].id)
engine.say(text)
engine.runAndWait()
如何将文本转换为音频?你还可以使用save_to_file()
方法将音频保存为文件,而不是使用say()
方法播放声音:
# saving speech audio into a file
engine.save_to_file(text, "python.mp3")
engine.runAndWait()
当前目录下会出现一个新的MP3文件,看看吧!
结论
太好了,这就是本python文本转语音教程的内容,我希望它能帮助你构建你的应用程序,或者你自己的 Python 虚拟助手。
总而言之,如果你想使用更可靠的合成,谷歌 TTS API 是你的选择,如果你只是想让它工作得更快并且没有互联网连接,你应该使用pyttsx3库。
以下是两个库的文档: