Skip to content Skip to sidebar Skip to footer

Gtts Direct Output

I want to make a chatbot's response in audio and text. All the example code using gTTS seem like one needs to 'save the text into a file then play the file'. Is there another way

Solution 1:

If you look even briefly at the docs, you'll see that, of the three examples, only one of them requires you to call save, and the third one is specifically called "Playing sound directly".

So, just do exactly what's in that example, but substitute your string in place of the literal '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)

But notice that gTTS doesn't come with an MP3 player; you need a separate audio library to play that mp3_fp buffer:

>>># Load `audio_fp` as an mp3 file in>>># the audio library of your choice

As the docs say, there are many such libraries, and Stack Overflow is not a good place to get recommendations for libraries. I happen to have a library installed, named musicplayer, and a sample app that can be easily adapted here, but it's probably not the simplest one by a long shot (it's made for doing more powerful, low-level stuff):

>>>import musicplayer>>>classSong:...def__init__(self, f):...        self.f = f...defreadPacket(self, size):...return self.f.read(size)...defseekRaw(self, offset, whence):...        self.f.seek(offset, whence)...return f.tell()>>>player = musicplayer.createPlayer()>>>player.queue = [Song(mp3_fp)]>>>player.playing = True

Solution 2:

You can also use the playsound library.

>>>import playsound

>>>playsound.playsound('sound.mp3')

For more information on playsound.Visit Playsound Docs .

Solution 3:

if you want to call speak function again and again without any error.

Basically, this serves the purpose.

from gtts import gTTS
import os
import playsound

def speak(text):
    tts = gTTS(text=text, lang='en')

    filename = "abc.mp3"
    tts.save(filename)
    playsound.playsound(filename)
    os.remove(filename)

Post a Comment for "Gtts Direct Output"