从PyAudio获取音量级别以便在Arduino中使用

时间:2014-10-21 03:16:46

标签: audio arduino microphone arduino-uno pyaudio

我希望将笔记本电脑的音频输入(只是我的Macbook中的内置麦克风)中的音量数据发送到Arduino,并尽可能少地延迟。

我发现使用PyAudio捕获音频输入并不困难,但该模块的大部分示例都将音频读数保存为wav或其他文件格式。我可以直接测量音量,因为我正在将其读入PyAudio,或者我是否需要将其保存到文件并分析该文件?我不关心音量以外音频中的任何其他数据。

非常感谢。

1 个答案:

答案 0 :(得分:4)

您可以实时阅读该卷。要执行此操作,请设置录制但不保存数据,只需处理即可。在这里,我将使用Python包含的audioop模块获取每个块的RMS值。 (此示例只是对PyAudio网页中记录演示的修改,以包含audioop.rms。)

import pyaudio
import wave
import audioop

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    rms = audioop.rms(data, 2)    # here's where you calculate the volume

stream.stop_stream()
stream.close()
p.terminate()

当然,如果您不喜欢RMS,则audioop还有其他音量指标。