我試圖閱讀近實時,該音量來自Python中USB麥克風的音頻。如何閱讀python和ffmpeg中的實時麥克風音量或類似
我有件,但無法弄清楚如何把它放在一起。
如果我已經有一個.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的實時輸出,但我的字節知識有點缺乏。
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上運行。
我用[pyaudio(https://people.csail.mit.edu/hubert/pyaudio/);它可在[pypi](https://pypi.python.org/pypi/PyAudio)上找到。 –
對於管道轉換爲WAV,在'-'之前放入'-acodec aac'並插入'-f wav'' – Mulvya
您可以使用[sounddevice](http://python-sounddevice.readthedocs.io/)模塊。有一個[實時繪製麥克風信號的示例](http://python-sounddevice.readthedocs.io/en/latest/examples.html#plot-microphone-signal-s-in-real-time)很容易被改變來計算聲級而不是繪圖。 – Matthias