我想从我有网址的PCM 网络音频流获取原始数据(最好是作为一个numpy数组)。目标是实时分析来自网络流的信号。
似乎有许多Python音频模块或包装器,例如FFMPEG,但经过相当广泛的搜索后,我还没有找到完整管道的一个例子。
对于那些熟悉OpenCV的人,我正在寻找OpenCV VideoCampture
类的音频对应物。
欢迎查看模块的任何建议或编码代码片段!
答案 0 :(得分:1)
好的,想通了。显然,这可以在不使用任何外部库的情况下完成,只需依靠urllib
和wave
。这是一个代码片段,用于流式传输数据,将其转换为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())