浏览器不播放 Python Flask 返回的音频

Browser not playing audio returned with Python Flask

我有一个简单的 Python Flask 应用程序,用于 return 我生成服务器端(单独)的图像和音频。我的图像代码如下所示:

# various cv2 calls to generate an image
image_bytes = cv2.imencode('.png', image)
return Response(image_bytes[1].tobytes(), mimetype='image/png', status=200)

效果很好。但是,我似乎收不到 return 音频。这是代码:

AUDIO_FORMAT = 'audio/mp3'
headers = {"Content-Type": "application/json", "accept": AUDIO_FORMAT}
payload = {"text": text}
# call to generate audio from text
response = requests.post()
if response.status_code == 200:
    sound_data = response.content
    f = open('audio.mp3', 'wb')
    f.write(sound_data)
    f.close()
    return Response(sound_data,
                    mimetype=AUDIO_FORMAT,
                    status=200)

当我播放 audio.mp3 文件时,我听到了我期望的音频。当响应在浏览器中呈现时,我得到了音频播放器。但是我什么也没听到,我得到了 00:00 的长度。我想我缺少一个 encoding/translation 步骤。

事实证明,我在将音频写入文件并返回该文件的正确路径上。在我的第一条评论中,我声明将音频写入文件并使用 send_from_directory 失败。嗯,它是,但由于一个单独的错误。一旦我解决了这个问题,它就起作用了。

return send_from_directory('static/audio', file_name)

我想我明白为什么我原来的方法不起作用了。当浏览器看到音频 mimetype 时,它​​会尝试使用音频控件播放它。该音频控件有一个 src 属性指向我发送的音频。随后从音频控件回调到我的服务器正确地失败了,因为我没有保留该音频并提供它的路径。