python调用pyaudio使用麦克风录制wav声音文件的教程


Posted in Python onJune 26, 2019

python的pyaudio可以进行录音,播放,生成wav文件等等,WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为WAV,数据本身的格式为PCM或压缩型,属于无损音乐格式的一种。在我们研究语音识别,自然语言处理的过程中,常常会使用到它,比如我们调用百度语音识别所以我们首先研究一下pyaudio库的安装与使用。

安装:

pip install pyaudio

调用pyaudio使用麦克风录制声音:

python中的pyaudio库可以直接通过麦克风录制声音,我们可以通过调用该库,获取到wav测试语音。 具体代码如下所示:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from pyaudio import PyAudio, paInt16 
import numpy as np 
from datetime import datetime 
import wave
class recoder:
  NUM_SAMPLES = 2000   #pyaudio内置缓冲大小
  SAMPLING_RATE = 8000  #取样频率
  LEVEL = 500     #声音保存的阈值
  COUNT_NUM = 20   #NUM_SAMPLES个取样之内出现COUNT_NUM个大于LEVEL的取样则记录声音
  SAVE_LENGTH = 8     #声音记录的最小长度:SAVE_LENGTH * NUM_SAMPLES 个取样
  TIME_COUNT = 60   #录音时间,单位s
  Voice_String = []
  def savewav(self,filename):
    wf = wave.open(filename, 'wb') 
    wf.setnchannels(1) 
    wf.setsampwidth(2) 
    wf.setframerate(self.SAMPLING_RATE) 
    wf.writeframes(np.array(self.Voice_String).tostring()) 
    # wf.writeframes(self.Voice_String.decode())
    wf.close() 
  def recoder(self):
    pa = PyAudio() 
    stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True, 
      frames_per_buffer=self.NUM_SAMPLES) 
    save_count = 0 
    save_buffer = [] 
    time_count = self.TIME_COUNT
    while True:
      time_count -= 1
      # print time_count
      # 读入NUM_SAMPLES个取样
      string_audio_data = stream.read(self.NUM_SAMPLES) 
      # 将读入的数据转换为数组
      audio_data = np.fromstring(string_audio_data, dtype=np.short)
      # 计算大于LEVEL的取样的个数
      large_sample_count = np.sum( audio_data > self.LEVEL )
      print(np.max(audio_data))
      # 如果个数大于COUNT_NUM,则至少保存SAVE_LENGTH个块
      if large_sample_count > self.COUNT_NUM:
        save_count = self.SAVE_LENGTH 
      else: 
        save_count -= 1
      if save_count < 0:
        save_count = 0 
      if save_count > 0 : 
      # 将要保存的数据存放到save_buffer中
        #print save_count > 0 and time_count >0
        save_buffer.append( string_audio_data ) 
      else: 
      #print save_buffer
      # 将save_buffer中的数据写入WAV文件,WAV文件的文件名是保存的时刻
        #print "debug"
        if len(save_buffer) > 0 : 
          self.Voice_String = save_buffer
          save_buffer = [] 
          print("Recode a piece of voice successfully!")
          return True
      if time_count==0: 
        if len(save_buffer)>0:
          self.Voice_String = save_buffer
          save_buffer = [] 
          print("Recode a piece of voice successfully!")
          return True
        else:
          return False
if __name__ == "__main__":
  r = recoder()
  r.recoder()
  r.savewav("test.wav")

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

总结

以上所述是小编给大家介绍的python调用pyaudio使用麦克风录制wav声音文件的教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python控制台显示时钟的示例
Feb 24 Python
python结合opencv实现人脸检测与跟踪
Jun 08 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
tornado 多进程模式解析
Jan 15 Python
python使用xslt提取网页数据的方法
Feb 23 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
python中for循环变量作用域及用法详解
Nov 05 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
python实现同一局域网下传输图片
Mar 20 Python
Python图像处理二值化方法实例汇总
Jul 24 Python
Python collections模块的使用方法
Oct 09 Python
python装饰器常见使用方法分析
Jun 26 #Python
解决python super()调用多重继承函数的问题
Jun 26 #Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 #Python
python里dict变成list实例方法
Jun 26 #Python
Python音频操作工具PyAudio上手教程详解
Jun 26 #Python
python3中类的继承以及self和super的区别详解
Jun 26 #Python
对Python中class和instance以及self的用法详解
Jun 26 #Python
You might like
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python实现简单温度转换的方法
2015/03/13 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
详解python datetime模块
2020/08/17 Python
python爬虫---requests库的用法详解
2020/09/28 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
python装饰器代码深入讲解
2021/03/01 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
区域销售经理岗位职责
2013/12/10 职场文书
眼镜促销方案
2014/03/15 职场文书
取保候审保证书
2014/04/30 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL