pythonibm-cloudtext-to-speechibm-watsonwatson-text-to-speech

How to listen to IBM Watson Text To Speech result without saving to a file (python)


I am writing a simple python program that gets a text file then uses IBM Watson Text To Speech to convert it to audio then play the audio directly using a module such as playsound.

most of the tutorials shows you how to save the result to a file only and not how to pass it so a module to play the audio

from ibm_watson import TextToSpeechV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

authenticator = IAMAuthenticator('{apikey}')
text_to_speech = TextToSpeechV1(
    authenticator=authenticator
)

text_to_speech.set_service_url('{url}')

with open('hello_world.wav', 'wb') as audio_file:
    audio_file.write(
        text_to_speech.synthesize(
            'Hello world',
            voice='en-US_AllisonVoice',
            accept='audio/wav'        
        ).get_result().content)

that's not what i want , I want to be able to play the audio without saving it, how can i do that.


Solution

  • If you are open for external libraries, you can install vlc binding for python using pip install python-vlc

    And use player method to play audio directly from the content as below.

    import vlc
    from ibm_watson import TextToSpeechV1
    from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
    
    authenticator = IAMAuthenticator('{apikey}')
    text_to_speech = TextToSpeechV1(
        authenticator=authenticator
    )
    
    text_to_speech.set_service_url('{url}')
    
    
    #define VLC instance
    instance = vlc.Instance('--input-repeat=-1', '--fullscreen')
    
    #Define VLC player
    player=instance.media_player_new()
    
    #Define VLC media
    media=instance.media_new(
    text_to_speech.synthesize(
                'Hello world',
                voice='en-US_AllisonVoice',
                accept='audio/wav').get_result().content)
    
    #Set player media
    player.set_media(media)
    
    #Play the media
    player.play()
    

    Advantage of vlc player is that you can play most media types directly from URL (not just mp3) and also perform player like options such as

    >>> play.pause()  #pause play back
    >>> player.play() #resume play back
    >>> player.stop() #stop play back
    

    *credits