来自Python中的实时网络音频流的原始numpy数组

时间:2015-05-30 19:05:24

标签: python audio numpy ffmpeg pyaudio

我想从我有网址的PCM 网络音频流获取原始数据(最好是作为一个numpy数组)。目标是实时分析来自网络流的信号

似乎有许多Python音频模块或包装器,例如FFMPEG,但经过相当广泛的搜索后,我还没有找到完整管道的一个例子。

对于那些熟悉OpenCV的人,我正在寻找OpenCV VideoCampture类的音频对应物。

欢迎查看模块的任何建议或编码代码片段!

1 个答案:

答案 0 :(得分:1)

好的,想通了。显然,这可以在不使用任何外部库的情况下完成,只需依靠urllibwave。这是一个代码片段,用于流式传输数据,将其转换为numpy数组(例如用于处理),然后返回以将其保存到文件中。经过Python 3测试。

import urllib
import base64
import wave
import numpy as np

# Open the network wave stream
request = urllib.request.Request("http://url")
request.add_header('Authorization',
                   b'Basic ' + base64.b64encode(b'user:password'))
in_file = urllib.request.urlopen(request)
in_wave = wave.open(in_file, 'rb')

# Get parameters such as number of channels, framerate etc.
params = in_wave.getparams()

# Open and initialize an output file
out_wave = wave.open('/home/czikus/out.wav', 'wb')
out_wave.setparams(params)

while True:
    # Get N frames as byte array
    frame = in_wave.readframes(10000)
    # Convert the bytes to numpy array
    arr = np.fromstring(frame, 'Int16')
    # Write a numpy array into a wave file
    out_wave.writeframes(arr.tostring())