我正在尝试读取,在 * 接近实时 *,从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的东西将实时输出管道到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上工作。
3条答案
按热度按时间bf1o4zei1#
感谢@Matthias建议使用sounddevice模块。这正是我所需要的。
下面是一个将实时音频水平打印到shell的工作示例:
cl25kdpy2#
Python 3用户
我有几个问题,使工作,所以我用:https://python-sounddevice.readthedocs.io/en/0.3.3/examples.html#plot-microphone-signal-s-in-real-time
我需要安装
sudo apt-get install python3-tk
for python 3.6 look Tkinter module not found on Ubuntu然后我修改了脚本:
是的,它在工作:)
eyh26e7m3#
最快、最小的工作示例如下: