我正在为Raspberry Pi创建一个简单的声音监视器,带有Python中的USB麦克风,可以检测声音的突然变化,无论是“拍手”、音乐中的节拍还是其他噪音。我希望它采取一个,比方说,0.1秒的样本,将其与前一个样本周期进行比较,然后在新样本超过某个阈值时发送一条消息(通过MQTT)。我一直在使用PyAudio和audioop.max,并编写了以下内容:
import time, audioop
import pyaudio
# Initialisation for PyAudio
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 1
threshold = 10;
reading = 0
previousreading = 0
# PyAudio Object
audio = pyaudio.PyAudio()
while True:
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
frames = []
for i in range(0, int(RATE/CHUNK*RECORD_SECONDS)):
data = stream.read(70)
frames.append(data)
time.sleep(0.001)
reading = audioop.max(data, 2)
if reading - previousreading > threshold:
print(reading)
previousreading = reading
stream.stop_stream()
stream.close()
# Clearing the resources
stream.stop_stream()
stream.close()
audio.terminate()
它基本上是有效的,但也存在一些问题
任何改进脚本的帮助都是非常受欢迎的。我很高兴与任何对MQTT感兴趣的人分享MQTT方面的内容(效果很好)
再加上。如果您在Raspberry Pi上使用PyAudio时遇到缓冲区溢出和不可预测的行为,请尝试解决这些问题
将块大小增加到4096,并将异常\u on\u overflow设置为false。i、 e
完成此操作后,我的脚本开始可靠地工作
好的,我遇到的问题似乎与使用树莓圆周率有关。当我在我的Mac电脑上运行相同的程序时,它会按预期工作
相关问题 更多 >
编程相关推荐