Polly返回0个字节

问题描述

尝试通过AWS polly执行基本的tts任务,我可以使用CLI通过以下类型的命令获取可播放的mp3:

aws polly synthesize-speech --output-format mp3 --voice-id Joanna --text 'Hello,my name is Joanna. I learned about the W3C on 10/3 of last year.' hello.mp3


但是,按照提供的示例here,我得到的是0字节的mp3文件

我的代码

from boto3 import Session
from botocore.exceptions import BotoCoreError,ClientError
from contextlib import closing
import os
import sys
import subprocess
from tempfile import gettempdir
session = Session(profile_name="default")
polly = session.client("polly")

try:
    response = polly.synthesize_speech(Text="This is what you wrote. It'd be cool if it also 
worked.",OutputFormat="mp3",VoiceId="Joanna",)
except (BotoCoreError,ClientError) as error:
    print(error)
    sys.exit(-1)

if "AudioStream" in response:
    with closing(response["AudioStream"]) as stream:
        output = ("speech.mp3")
        print(os.path.join(gettempdir(),"hopa"))
    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)

os.startfile(output)

解决方法

您在with中的缩进不正确。

这有效:

import boto3
from botocore.exceptions import BotoCoreError,ClientError
from contextlib import closing
import sys
polly = boto3.client("polly")

try:
    response = polly.synthesize_speech(
        Text="This is what you wrote. It'd be cool if it also worked.",OutputFormat="mp3",VoiceId="Joanna",)
except (BotoCoreError,ClientError) as error:
    print(error)
    sys.exit(-1)

if "AudioStream" in response:
    with closing(response["AudioStream"]) as stream:
        output = "speech.mp3"
        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)