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 相关文章推荐
django1.8使用表单上传文件的实现方法
Nov 04 Python
python rsa 加密解密
Mar 20 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
May 29 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
QML实现钟表效果
Jun 02 Python
python中的yield from语法快速学习
Nov 06 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/05/09 PHP
CentOS安装php v8js教程
2015/02/26 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
javascript常用方法总结
2015/05/14 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
详解python多线程之间的同步(一)
2019/04/03 Python
详解Python 切片语法
2019/06/10 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
python中wheel的用法整理
2020/06/15 Python
python实现取余操作的简单实例
2020/08/16 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
Notino芬兰:购买香水和化妆品
2019/04/15 全球购物
工程造价与管理专业应届生求职信
2013/11/23 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
高效课堂标语
2014/06/26 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
合作协议书格式范本
2016/03/21 职场文书