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之私有函数和专有方法
Oct 24 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
对django2.0 关联表的必填on_delete参数的含义解析
Aug 09 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
快速解决jupyter notebook启动需要密码的问题
Apr 21 Python
pytorch 实现变分自动编码器的操作
May 24 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 access 数据连接与读取保存编辑数据的实现代码
2010/05/12 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
PHP实现的json类实例
2015/07/28 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
Python中文字符串截取问题
2015/06/15 Python
python匿名函数用法实例分析
2019/08/03 Python
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
GetYourGuide台湾:预订旅游活动、景点和旅游项目
2019/06/10 全球购物
老人祝寿主持词
2014/03/28 职场文书
2015年加油站工作总结
2015/05/13 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
MySQL创建表操作命令分享
2022/03/25 MySQL
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python