我试图近乎实时地阅读
Python中USB麦克风音频的音量.
我有件,但无法弄清楚如何把它放在一起.
如果我已经有一个.wav文件,我可以简单地使用wavefile读取它:
from wavefile import WaveReader
with WaveReader("/Users/rmartin/audio.wav") as r:
for data in r.read_iter(size=512):
left_channel = data[0]
volume = np.linalg.norm(left_channel)
print volume
这很好用,但我想实时处理来自麦克风的音频,而不是文件.
所以我的想法是使用像ffmpeg这样的东西将实时输出PIPE到WaveReader,但我的Byte知识有点缺乏.
import subprocess
import numpy as np
command = ["/usr/local/bin/ffmpeg",
'-f', 'avfoundation',
'-i', ':2',
'-t', '5',
'-ar', '11025',
'-ac', '1',
'-acodec','aac', '-']
pipe = subprocess.Popen(command, stdout=subprocess.PIPE, bufsize=10**8)
stdout_data = pipe.stdout.read()
audio_array = np.fromstring(stdout_data, dtype="int16")
print audio_array
这看起来很漂亮,但它做的并不多.它失败并显示[NULL @ 0x7ff640016600]无法为’pipe:’错误找到合适的输出格式.
我认为这是一个相当简单的事情,因为我只需要检查音量的音量.
有人知道如何完成这个吗? FFMPEG不是必需的,但它确实需要在OSX& Linux操作系统.