树莓派下pyaudio安装与声音监控应用
树莓派下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安装与声音监控应用相关推荐
- 内网环境下docker安装PMM 并监控 PG与MySQL
0.前言 虽然PMM官网上安装指南上安装PMM有三种方式,但目前主流安装 还是以docker 的方式安装. PMM分两个版本:PMM1和PMM2,PMM1控制力度比较好一些,PMM2界面比较丰富友好一 ...
- RabbitMQ 在 Win10 环境下的安装与配置
文章目录 1. RabbitMQ 环境配置(ErLang 10.4 + MQ 3.7.17) 1.1 ErLang 下载安装 1.2 RabbitMQ 下载安装 1.3 环境变量配置 1.3.1 新建 ...
- 树莓派下安装pytorch(踩坑记录)
目标:在树莓派4b上安装conda运行pytorch 硬件平台:树莓派4b 操作系统:Raspberry Pi OS with desktop 环境:pytorch 1. 安装系统镜像 下载树莓派镜像 ...
- archlinux下详细安装教程及常见问题解答
--archlinux 版本是 2010.5 月的发行版-- grub 0.4.4 menu.lst 写上下面的这些 title archlinux2010.5 map --mem --heads=0 ...
- 树莓派解决pyaudio 采样率16k报错问题
问题出处: 以前做了一个对话机器人,但是一直不知道怎么解决唤醒这个问题.这两天忽然看到有个开源的的好项目----snowboy 它能够一直离线的监控后台 起到语音唤醒的作用.于是便查相关资料. 先是按 ...
- python playsound安装_ python音频库:Windows下pydub安装配置、过程出现的问题及常用API ...
< python音频库:Windows下pydub安装配置.过程出现的问题及常用API > 背景 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现.其中倒放与播放部分 ...
- Windows下RabbitMQ安装及注意事项
Windows下RabbitMQ安装及注意事项 简介 背景 1. RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. Rabbit ...
- flume 1.7在windows下的安装与运行
flume 1.7在windows下的安装与运行 一.安装 安装java,配置环境变量. 安装flume,flume的官网http://flume.apache.org/,下载地址,下载后直接解压即可 ...
- linux下elasticsearch 安装、配置及示例
简介 开始学es,我习惯边学边记,总结出现的问题和解决方法.本文是在两台linux虚拟机下,安装了三个节点.本次搭建es同时实践了两种模式--单机模式和分布式模式.条件允许的话,可以在多台机器上配置 ...
- Solaris10下Nagios安装
Solaris10下Nagios安装<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&q ...
最新文章
- 一个注解搞定 SpringBoot 接口防刷,还有谁不会?
- 【廖雪峰python入门笔记】tuple_创建
- 阿里云为澳门装上“城市大脑”
- 白话Elasticsearch68-ES生产集群部署重要的操作系统设置
- 如何看懂dtd文档?
- vba上传指定文件ftp服务器
- 文件打开特别慢_“Origin进不去、下载慢”的解决办法合集
- saltstack 任务管理和集群(三)
- jee--eclipse下tomcat出现did not find a matching property.(转)
- Pluto-基于Caffe的GPU多机多卡深度学习算法产品
- Yearn正在评估恢复yDAI池的方式
- python库下载本地安装_Python包方法的本地安装,python
- stl 向量_C ++ STL中的向量delete()和clear()
- 半导体器件物理【3】半导体与IC工艺
- cachecloud 安装
- 报错Found existing installation: tensorflow 1.2.1
- 通过fileProvider接收外部App传递文件路径的一些坑
- MySQL 中的 “My” 是什么意思?
- 前端(五)DOM 文档对象模型
- 沧小海笔记本之xilinx srio核的学习记录之目录