gTTS直接输出

Jun*_*ang 10 python text-to-speech

我想用音频和文本方式做出聊天机器人的响应。

所有使用 gTTS 的示例代码似乎都需要“将文本保存到文件中,然后播放该文件”。

是否有另一种方法可以简化流程,例如使用 gTTS 自动播放“聊天机器人的响应”?

aba*_*ert 7

如果您简单地看一下文档,您会发现,在这三个示例中,只有一个需要您调用save,而第三个则专门称为“直接播放声音”。

因此,只需按照该示例中的操作进行操作,但用字符串代替文字'hello'

>>> from gtts import gTTS
>>> from io import BytesIO
>>>
>>> my_variable = 'hello' # your real code gets this from the chatbot
>>> 
>>> mp3_fp = BytesIO()
>>> tts = gTTS(my_variable, 'en')
>>> tts.write_to_fp(mp3_fp)
Run Code Online (Sandbox Code Playgroud)

但请注意,gTTS 不附带 MP3 播放器;您需要一个单独的音频库来播放该mp3_fp缓冲区:

>>> # Load `audio_fp` as an mp3 file in
>>> # the audio library of your choice
Run Code Online (Sandbox Code Playgroud)

正如文档所说,有很多这样的库,而 Stack Overflow 并不是获取库推荐的好地方。我碰巧安装了一个名为 的库,musicplayer以及一个可以在此处轻松修改的示例应用程序,但从长远来看,它可能不是最简单的一个(它是为了执行更强大的低级功能而设计的):

>>> import musicplayer
>>> class Song:
...     def __init__(self, f):
...         self.f = f
...     def readPacket(self, size):
...         return self.f.read(size)
...     def seekRaw(self, offset, whence):
...         self.f.seek(offset, whence)
...         return f.tell()
>>> player = musicplayer.createPlayer()
>>> player.queue = [Song(mp3_fp)]
>>> player.playing = True
Run Code Online (Sandbox Code Playgroud)