【发布时间】:2020-08-04 16:26:44
【问题描述】:
我正在努力寻找从 Python 服务器流式传输合成音频的解决方案。合成的音频是增量生成的,并以np.float32 NumPy 数组的形式返回。然后需要将其从 NumPy 数组转换为 MP3 块。最后,通过flask 提供 MP3 块。
这是一些伪代码:
import numpy
from flask import Flask
from flask import Response
app = Flask(__name__)
sample_rate = 24000
def pcm_to_mp3():
raise NotImplementedError()
def get_synthetic_audio():
""" Mock function for synthetic audio. """
while True:
yield numpy.random.rand(1024) * 2 - 1 # Return: 32-bit Floating Point PCM
@app.route('/stream', methods=['GET'])
def get_stream():
""" Stream synthetic audio. """
def response():
for numpy_array in get_synthetic_audio():
# NOTE: The raw audio needs additional metadata to be playable like sample rate.
yield pcm_to_mp3(numpy_array, sample_rate=sample_rate)
return Response(
response(),
headers={
# NOTE: Ensure stream is not cached.
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0',
# NOTE: Enable streaming.
'Transfer-Encoding': 'chunked'
},
mimetype='audio/mpeg')
if __name__ == "__main__":
app.run()
虽然类似的设置适用于 WAV 文件,但我无法弄清楚如何对 MP3 文件执行类似的设置。
谢谢!
来源
- 通过 PyDub 将 NumPy 数组转换为 MP3 文件:How to read a MP3 audio file into a numpy array / save a numpy array to MP3?
- 使用 Flask 流式传输音频 WAV 文件:HTTP realtime audio streaming server
- 使用 PyAudio 流式传输音频 WAV 文件:Python: realtime audio streaming with PyAudio (or something else)?
- 使用 FFMpeg 和 Flask 进行流式传输:https://gist.github.com/anthonyeden/f3b3bdf6f62badd8f87bb574283f488a
【问题讨论】:
标签: python numpy flask audio mp3