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 相关文章推荐
基于wxpython开发的简单gui计算器实例
May 30 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python中virtualenvwrapper安装与使用
May 20 Python
python破解zip加密文件的方法
May 31 Python
python定时关机小脚本
Jun 20 Python
Python中创建二维数组
Oct 17 Python
python抓取搜狗微信公众号文章
Apr 01 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
用Python画小女孩放风筝的示例
Nov 23 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 Python
Python实现GIF图倒放
Jul 16 Python
Python3基于plotly模块保存图片表格
Aug 03 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php 判断数组是几维数组
2013/03/20 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
简单的js计算器实现
2016/10/26 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
Python实现批量下载图片的方法
2015/07/08 Python
scrapy爬虫实例分享
2017/12/28 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Python实现自动访问网页的例子
2020/02/21 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
linux 下selenium chrome使用详解
2020/04/02 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
python datetime时间格式的相互转换问题
2020/06/11 Python
python 使用多线程创建一个Buffer缓存器的实现思路
2020/07/02 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
幼儿园区域活动总结
2014/05/08 职场文书
公司担保书格式范文
2014/05/12 职场文书