【发布时间】:2021-07-01 07:17:11
【问题描述】:
我正在尝试使用 python 中的循环从 AWS polly(文本到语音服务)下载 mp3 文件 我使用的代码如下:
for i in range(0, 3):
filename = str(i) + ".mp3"
response = polly_client.synthesize_speech(VoiceId='Joanna',
OutputFormat='mp3',
Text = "blah blah blah"
file = open(filename, 'wb')
file.write(response['AudioStream'].read())
file.close()
这最终给了我 1kb 的文件,这意味着每个文件中没有任何内容.. 我可以做些什么来改进代码,以便循环暂停,直到每个音频文件都下载完成..
提前谢谢你。
【问题讨论】:
-
如果您在任何循环之外对单个文件执行此操作,是否可以按预期工作?
-
是的,它工作正常
-
我相信我需要使用子进程...但我不知道如何..
-
嗯,我认为你不需要
subprocess。我没有 AWS 凭证,否则我会自己尝试,但仅从查看文档来看,response["AudioStream"]是一个botocore.response.StreamingBody对象,它代表一个实时的异步套接字连接,数据可以通过该连接流式传输。您的循环运行得如此之快,以至于一旦有机会首先开始读取,套接字实际上就关闭了。似乎存在这些特殊的waiter对象,它们等待异步进程 - 不确定它们是如何工作的,但值得研究。 -
您还可以为
synthesize_speech方法设置自定义InvocationType关键字参数。将其从Event更改为RequestResponse具有将一些异步函数更改为同步函数的效果,但同样,我对AWS 了解不多。
标签: python loops amazon amazon-polly