微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环下载多个音频文件失败python

如何解决循环下载多个音频文件失败python

我正在尝试使用 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 的文件,这意味着每个文件中都没有任何内容.. 我能做些什么来改进代码,以便循环暂停,直到每个音频文件完全下载..

提前致谢。

解决方法

看看来自亚马逊的这个 example。它演示了如何使用 with closing(...) 确保正确关闭响应流。

这是一些未经测试的代码,应该适合您:

from contextlib import closing

for i in range(3):
    filename = f'{i}.mp3'
    response = polly_client.synthesize_speech(VoiceId='Joanna',OutputFormat='mp3',Text = "blah blah blah"
    if 'AudioStream' in response:
        with closing(response['AudioStream']) as stream,open(filename,'wb') as file:
            while data := stream.read():
                file.write(data)
    else:
        print(f'Problem streaming audio: {response=}')
,

我找到了解决此问题的方法,但方式略有不同。

正如我所猜测的,使用 subprocess 函数可能是关键..

在子进程中使用命令(aws 命令行)会产生好的 mp3 文件。

代码如下

import pandas as pd
import subprocess
import codecs

for i in range (0,3):
    word = 'blah blah blah'
    file_name = '0' + str(i) + '.mp3'
    print(word)
    
    command = 'aws polly synthesize-speech --text-type ssml --output-format "mp3" --voice-id "Salli" --text "<speak>' + word + '</speak>" ' + file_name
    print(command)
    

        
    subprocess.call(command,shell=True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。