树莓派下paudio安装与声音监控运用

在树莓派平台上使用pyaudio实现usb麦克风的录音功能,进而可以实现人机交互,实现语音识别和语音合成。
参考pyaudio官方文档,链接地址如下:

http://people.csail.mit.edu/hubert/pyaudio/docs/

pyaudio是python的模块,在树莓派下安装pyaudio 首先需安装portaudio.dev
安装步骤如下:
1、安装portaudio.dev : sudo apt-get install portaudio.dev
2、安装python-pyaudio: sudo apt-get install python-pyaudio
3、安装sox快速检测麦克风配置是否正确sudo apt-get install sox
4、测试麦克风配置是否正确,树莓派终端输入以下命令
rec temp.wav

5、测试pyaudio 代码如下:录音40s并保存为audio.wav播放

#_*_ coding:UTF-8 _*_
# @author: zdl
# 测试pyaudio 使用pyaudio录音,录音完毕播放录音内容
# 需要安装pyaudio 安装过程在教程中讲解
# pyaudio API函数库参考: http://people.csail.mit.edu/hubert/pyaudio/docs/#pyaudio.Stream.writeimport wave
from pyaudio import PyAudio,paInt16# 设置采样参数
NUM_SAMPLES = 2000
TIME = 2
chunk = 1024# read wav file from filename
def read_wave_file(filename):fp = wave.open(filename,'rb')nf = fp.getnframes()     #获取采样点数量print('sampwidth:',fp.getsampwidth())  print('framerate:',fp.getframerate())print('channels:',fp.getnchannels())f_len = nf*2audio_data = fp.readframes(nf)# save wav file to filename
def save_wave_file(filename,data):  wf = wave.open(filename,'wb')wf.setnchannels(1)      # set channels  1 or 2wf.setsampwidth(2)      # set sampwidth 1 or 2wf.setframerate(16000)  # set framerate 8K or 16Kwf.writeframes(b"".join(data))  # write datawf.close()#recode audio to audio.wav
def record():pa = PyAudio()     # 实例化 pyaudio# 打开输入流并设置音频采样参数 1 channel 16K framerate stream = pa.open(format = paInt16,channels=1,rate=16000,input=True,frames_per_buffer=NUM_SAMPLES)audioBuffer = []   # 录音缓存数组count = 0# 录制40s语音while count<TIME*20:string_audio_data = stream.read(NUM_SAMPLES) #一次性录音采样字节的大小audioBuffer.append(string_audio_data)count +=1print('.'),  #加逗号不换行输出# 保存录制的语音文件到audio.wav中并关闭流save_wave_file('audio.wav',audioBuffer)stream.close()# 播放后缀为wav的音频文件
def play():wf = wave.open(r"audio.wav",'rb') # 打开audio.wavp = PyAudio()                     # 实例化pyaudio# 打开流stream = p.open( format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(),output=True)# 播放音频while True:data = wf.readframes(chunk)if data == "":breakstream.write(data)# 释放IOstream.stop_stream()stream.close()p.terminate()# main函数 录制40s音频并播放
if __name__ == '__main__':print('record ready...')record()print('record over!') play()

程序演示结果:

使用不同的usb摄像头会出现采样率报错的问题,解决方案参考以下博客:
https://blog.csdn.net/u013860985/article/details/79326379
https://blog.csdn.net/u013372900/article/details/80296125
添加一个新的~/.asoundrc 到pi目录下:sudo nano ~/.asoundrc
输入以下内容:

pcm.!default {type hwcard 1
}
ctl.!default {type hwcard 1
}

或者:

pcm.!default {type asymplayback.pcm {type plugslave.pcm "hw:0,0"}capture.pcm {type plugslave.pcm "hw:1,0"}
}
ctl.!default {type hwcard 1
}

树莓派音频输出设置:
1、选择树莓派 audio output 为AUTO或者3.5mm sudo raspi-config 设置
2、如何调整输出音量,终端输入 alsamixer 命令然后上下键调整

3、语音合成的音频为MP3文件,pyaudio只能播放wav文件,所以需要安装MP3播放插件 mplayer。
安装 sudo apt-get install mplayer
测试 mplayer xx.mp3 (需先进入xx.mp3的文件夹下)
Python 程序播放 MP3: os.system('mplayer %s' % 'xx.mp3')

思考:如何采用pyaudio制作声音的监控装置呢?监控噪声、人或者物体运动然后提示报警?

#coding:utf-8
# @author: zdl #需要安装pyaudio
import wave
import numpy as np
from pyaudio import PyAudio,paInt16
import time
NUM_SAMPLES = 2000
global tchunk = 1024
def play(filename):wf = wave.open(filename,'rb')p = PyAudio()stream = p.open( format=p.get_format_from_width(wf.getsampwidth()),channels=wf.getnchannels(),rate=wf.getframerate(),output=True)while True:data = wf.readframes(chunk)if data == "":breakstream.write(data)stream.stop_stream()stream.close()p.terminate()def save_wave_file(filename,data):   #save data to filenamewf = wave.open(filename,'wb')wf.setnchannels(1)   #set channelwf.setsampwidth(2)  #采样字节  1 or 2wf.setframerate(16000)  #采样频率  8K or 16Kwf.writeframes(b"".join(data))wf.close()# 声音监视函数
def Monitor():pa = PyAudio()      # 调用句柄stream = pa.open(format = paInt16,channels=1,rate=16000,input=True,frames_per_buffer=NUM_SAMPLES)print('开始缓存录音')audioBuffer = []rec = []audioFlag = Falset = Falsewhile True:data = stream.read(NUM_SAMPLES,exception_on_overflow = False) #add exception para#if audioFlag == True:# rec.append(data)        #剪切的语音文件audioBuffer.append(data)     #录音源文件audioData = np.fromstring(data,dtype=np.short) #字符串创建矩阵largeSampleCount = np.sum(audioData > 2000)temp = np.max(audioData)print tempif temp > 8000 and t == False:  # 声音阈值,结合实验确定,实现声音监控t = 1 #开始录音print "检测到语音信号,开始录音"begin = time.time()print tempif t:end = time.time()if end-begin > 5:timeFlag = 1 #5s录音结束if largeSampleCount > 20:saveCount = 4else:saveCount -=1if saveCount <0:saveCount =0if saveCount >0:rec.append(data)else:if len(rec) >0 or timeFlag:save_wave_file('01.wav',rec)rec = []t = 0timeFlag = 0stream.stop_stream()stream.close()p.terminate()if __name__ == '__main__':Monitor()

可以查看我的github获取更多信息:https://github.com/dalinzhangzdl/AI_Car_Raspberry-pi

树莓派下pyaudio安装与声音监控应用相关推荐

  1. 内网环境下docker安装PMM 并监控 PG与MySQL

    0.前言 虽然PMM官网上安装指南上安装PMM有三种方式,但目前主流安装 还是以docker 的方式安装. PMM分两个版本:PMM1和PMM2,PMM1控制力度比较好一些,PMM2界面比较丰富友好一 ...

  2. RabbitMQ 在 Win10 环境下的安装与配置

    文章目录 1. RabbitMQ 环境配置(ErLang 10.4 + MQ 3.7.17) 1.1 ErLang 下载安装 1.2 RabbitMQ 下载安装 1.3 环境变量配置 1.3.1 新建 ...

  3. 树莓派下安装pytorch(踩坑记录)

    目标:在树莓派4b上安装conda运行pytorch 硬件平台:树莓派4b 操作系统:Raspberry Pi OS with desktop 环境:pytorch 1. 安装系统镜像 下载树莓派镜像 ...

  4. archlinux下详细安装教程及常见问题解答

    --archlinux 版本是 2010.5 月的发行版-- grub 0.4.4 menu.lst 写上下面的这些 title archlinux2010.5 map --mem --heads=0 ...

  5. 树莓派解决pyaudio 采样率16k报错问题

    问题出处: 以前做了一个对话机器人,但是一直不知道怎么解决唤醒这个问题.这两天忽然看到有个开源的的好项目----snowboy 它能够一直离线的监控后台 起到语音唤醒的作用.于是便查相关资料. 先是按 ...

  6. python playsound安装_ python音频库:Windows下pydub安装配置、过程出现的问题及常用API ...

    < python音频库:Windows下pydub安装配置.过程出现的问题及常用API > 背景 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现.其中倒放与播放部分 ...

  7. Windows下RabbitMQ安装及注意事项

    Windows下RabbitMQ安装及注意事项 简介 背景 1.      RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. Rabbit ...

  8. flume 1.7在windows下的安装与运行

    flume 1.7在windows下的安装与运行 一.安装 安装java,配置环境变量. 安装flume,flume的官网http://flume.apache.org/,下载地址,下载后直接解压即可 ...

  9. linux下elasticsearch 安装、配置及示例

    简介  开始学es,我习惯边学边记,总结出现的问题和解决方法.本文是在两台linux虚拟机下,安装了三个节点.本次搭建es同时实践了两种模式--单机模式和分布式模式.条件允许的话,可以在多台机器上配置 ...

  10. Solaris10下Nagios安装

    Solaris10下Nagios安装<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&q ...

最新文章

  1. 一个注解搞定 SpringBoot 接口防刷,还有谁不会?
  2. 【廖雪峰python入门笔记】tuple_创建
  3. 阿里云为澳门装上“城市大脑”
  4. 白话Elasticsearch68-ES生产集群部署重要的操作系统设置
  5. 如何看懂dtd文档?
  6. vba上传指定文件ftp服务器
  7. 文件打开特别慢_“Origin进不去、下载慢”的解决办法合集
  8. saltstack 任务管理和集群(三)
  9. jee--eclipse下tomcat出现did not find a matching property.(转)
  10. Pluto-基于Caffe的GPU多机多卡深度学习算法产品
  11. Yearn正在评估恢复yDAI池的方式
  12. python库下载本地安装_Python包方法的本地安装,python
  13. stl 向量_C ++ STL中的向量delete()和clear()
  14. 半导体器件物理【3】半导体与IC工艺
  15. cachecloud 安装
  16. 报错Found existing installation: tensorflow 1.2.1
  17. 通过fileProvider接收外部App传递文件路径的一些坑
  18. MySQL 中的 “My” 是什么意思?
  19. 前端(五)DOM 文档对象模型
  20. 沧小海笔记本之xilinx srio核的学习记录之目录

热门文章

  1. 会声会影x4素材_怎么给视频打马赛克?运用会声会影2019
  2. Tableau6——地图绘制
  3. VMware虚拟机体验koolshare论坛LEDE固件
  4. python绘制缓和曲线_CAD中如何绘制缓和曲线
  5. matlab中饱和函数怎么写,matlab中饱和函数如何表示呢
  6. idea中加入git版本控制
  7. linux下安装zmap和zgrab
  8. 【等保知识】等保三级要求多少分?几分能过?
  9. 8uftp,8uftp使用教程图解
  10. ios弱网测试_弱网测试方法整理