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之wxPython菜单使用详解
Sep 28 Python
列举Python中吸引人的一些特性
Apr 09 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
python3实现磁盘空间监控
Jun 21 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
python中的字符串内部换行方法
Jul 19 Python
Python设计模式之命令模式原理与用法实例分析
Jan 11 Python
使用pip安装python库的多种方式
Jul 31 Python
python tkinter组件使用详解
Sep 16 Python
Python 添加文件注释和函数注释操作
Aug 09 Python
Django创建一个后台的基本步骤记录
Oct 02 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+javascript液晶时钟
2006/10/09 PHP
php5中类的学习
2008/03/28 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
php中adodbzip类实例
2014/12/08 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
小程序实现留言板
2018/11/02 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
python str与repr的区别
2013/03/23 Python
python实现查询IP地址所在地
2015/03/29 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
django+mysql的使用示例
2018/11/23 Python
python超时重新请求解决方案
2019/10/21 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
团日活动总结格式
2015/05/11 职场文书
初中运动会前导词
2015/07/20 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python