前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >树莓派上安装pyaudio 及 对声音实时监控

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

作者头像
Mshu
发布2018-10-31 10:42:56
6.2K1
发布2018-10-31 10:42:56
举报
文章被收录于专栏:咸鱼不闲咸鱼不闲

在树莓派上最常用的录音是arecord命令,但是功能有限,不能实现检测到声音做出反应。但是pyaudio能。

本文实现的功能是在树莓派上监听声音,当分贝超过阈值,将会做出反应,例子的反应是结束while循环。

原理是录制一小段的声音然后去检测分贝,如果超过阈值就结束循环,否则继续录制,检测,。。。。。。

安装pyaudio

运行一下命令:

代码语言:javascript
复制
$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进去

代码语言:javascript
复制
$ cd pyaudio
$ sudo python setup.py instal

如果没有报错此时的pyaudio已经安装到你的树莓派上了。

运行

看代码:

代码语言:javascript
复制
# -*- 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.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装pyaudio
  • 运行
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档