python文本转语音?如何将文本转换为音频?

2021年11月7日17:47:49 发表评论 1,540 次浏览

了解如何通过使用 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 引擎并使用它们,以下是该库使用的文本到语音合成器:

以下是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库。

以下是两个库的文档:

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: