from boto3 import Session from botocore.exceptions import BotoCoreError, ClientError from contextlib import closing import os import sys import subprocess from tempfile import gettempdir import pingcap.pe.flash.util as util session = util.get_boto_session() polly = session.client("polly") input_file_name = sys.argv[1] voice_id = sys.argv[2] output_file_name = input_file_name + "_" + voice_id + ".mp3" audio_source_file = open(input_file_name) text = "".join(audio_source_file.readlines()) try: response = polly.synthesize_speech( Text=text, Engine="neural", OutputFormat="mp3", VoiceId=voice_id, TextType="ssml", ) except (BotoCoreError, ClientError) as error: print(error) sys.exit(-1) if "AudioStream" in response: with closing(response["AudioStream"]) as stream: # output = os.path.join(gettempdir(), output_file_name) output = os.path.join(output_file_name) try: with open(output, "wb") as file: file.write(stream.read()) except IOError as error: print(error) sys.exit(-1) else: print("Could not stream audio") sys.exit(-1) if sys.platform == "win32": os.startfile(output) else: opener = "open" if sys.platform == "darwin" else "xdg-open" subprocess.call([opener, output])