700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python实现树莓派监控_树莓派上安装pyaudio 及 对声音实时监控

python实现树莓派监控_树莓派上安装pyaudio 及 对声音实时监控

时间:2019-08-07 01:57:09

相关推荐

python实现树莓派监控_树莓派上安装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.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。