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实现计算最小编辑距离
Mar 17 Python
Python字符串切片操作知识详解
Mar 28 Python
Python操作Excel之xlsx文件
Mar 24 Python
对numpy中array和asarray的区别详解
Apr 17 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
详解Python 函数如何重载?
Apr 23 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
python list多级排序知识点总结
Oct 23 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
教你怎么用Python实现多路径迷宫
Apr 29 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的FTP学习(二)[转自奥索]
2006/10/09 PHP
深入PHP FTP类的详解
2013/06/13 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
Python3字符串学习教程
2015/08/20 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
一份python入门应该看的学习资料
2018/04/11 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
django框架使用方法详解
2019/07/18 Python
Python logging设置和logger解析
2019/08/28 Python
django序列化serializers过程解析
2019/12/14 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
暑假实习求职信范文
2013/09/22 职场文书
高中生学习生活的自我评价
2013/11/27 职场文书
大学生职业规划论文
2014/01/11 职场文书
2014年计生标语
2014/06/23 职场文书
同意报考公务员证明
2015/06/17 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript