树莓派上安装pyaudio 及 对声音实时监控
在树莓派上最常用的录音是arecord命令,但是功能有限,不能实现检测到声音做出反应。但是pyaudio能。
本文实现的功能是在树莓派上监听声音,当分贝超过阈值,将会做出反应,例子的反应是结束while循环。
原理是录制一小段的声音然后去检测分贝,如果超过阈值就结束循环,否则继续录制,检测,。。。。。。
安装pyaudio
运行一下命令:
$sudo apt-get install python-pyaudio $ sudo apt-get install git $ git clone http://people.csail.mit.edu/hubert/git/pyaudio.git $ sudo apt-get install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev $ sudo apt-get python-dev
此时当前目录会多出来一个pyaudio的文件夹,然后cd进去
$ cd pyaudio $ sudo python setup.py instal
如果没有报错此时的pyaudio已经安装到你的树莓派上了。
运行
看代码:
# -*- coding: utf-8 -*- import pyaudio import wave import numpy as np def Monitor(): CHUNK = 512 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 48000 RECORD_SECONDS = 5 WAVE_OUTPUT_FILENAME = "cache.wav" p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print("开始缓存录音") frames = [] while (True): print 'begin ' for i in range(0, 100): data = stream.read(CHUNK) frames.append(data) audio_data = np.fromstring(data, dtype=np.short) large_sample_count = np.sum( audio_data > 800 ) temp = np.max(audio_data) if temp > 800 : print "检测到信号" print '当前阈值:',temp break stream.stop_stream() stream.close() p.terminate() wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() if __name__ == '__main__': Monitor()
这个采样率不可以是8000或者16000,否则会报采样率的错。
可以看到代码中唯一的for循环,它的长度决定上面提到的一小段声音的长度。
这里设置的阈值是800.
相关推荐
LeeHDsniper 2020-11-05
橄榄 2020-11-03
wanshiyingg 2020-09-29
andonliu 2020-09-03
嵌入式开发爱好者 2020-08-28
lu00kill 2020-08-17
tianyayi 2020-08-16
LIEVEZ 2020-08-09
ohhardtoname 2020-07-25
LeeHDsniper 2020-07-19
shenxiuwen 2020-07-16
wzxxtt0 2020-06-25
mattraynor 2020-06-25
咏月东南 2020-06-10
wangz 2020-06-03
wanxuncpx 2020-06-01
tianyayi 2020-05-18
wanxuncpx 2020-05-15
mattraynor 2020-05-12
wzxxtt0 2020-05-12
LIEVEZ 2020-05-04
mattraynor 2020-05-01
LIEVEZ 2020-05-01
LIEVEZ 2020-05-01
LowisLucifer 2020-04-23
OathKeeper 2020-04-22
zcabcd 2020-04-18
wanxuncpx 2020-04-16
returnspace 2020-04-16
mattraynor 2020-04-14
tianyayi 2020-03-28
clamzxf 2020-03-28
Summer的小屋 2020-03-26
lu00kill 2020-03-17
yuancr 2020-03-04
wzxxtt0 2020-02-21
xinhao 2020-02-20
LIEVEZ 2020-02-17
wzxxtt0 2020-02-15
zhufu 2020-02-10