python实现录音小程序

 更新时间:2020年10月26日 14:01:36   作者:MrYx  
这篇文章主要为大家详细介绍了python实现录音小程序,实现录音播放功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了python实现录音小程序的具体代码,供大家参考,具体内容如下

学习目标:掌握python的pyaudio扩展包和Wave模块录制语音的方法

  • Wav音频:声道数,采样频率,量化位数

python Wav包是自带的,pyaudio需要下载

pip3 install pyaudio

python读Wav文件:

fp=wave.open('','rb')
 nf=fp.getnframes()#获取文件的采样点数量
 print('sampwidth:',fp.getsampwidth())
 print('framerate:',fp.getframerate())
 print('channels:',fp.getnchannels())
 f_len=nf*2#文件长度计算,每个采样2个字节
 audio_data=fp.readframes(nf)

python写Wav文件:

def save_wave_file(filename,data):
 '''save the date to the wavfile'''
 wf=wave.open(filename,'wb')
 wf.setnchannels(channels)#声道
 wf.setsampwidth(sampwidth)#采样字节 1 or 2
 wf.setframerate(framerate)#采样频率 8000 or 16000
 wf.writeframes(b"".join(data))#https://stackoverflow.com/questions/32071536/typeerror-sequence-item-0-expected-str-instance-bytes-found
 wf.close()

利用PyAudio录音:

def my_record():
 pa=PyAudio()
 stream=pa.open(format = paInt16,channels=1,
   rate=framerate,input=True,
   frames_per_buffer=NUM_SAMPLES)
 my_buf=[]
 count=0
 while count<TIME*20:#控制录音时间
 string_audio_data = stream.read(NUM_SAMPLES)#一次性录音采样字节大小
 my_buf.append(string_audio_data)
 count+=1
 print('.')
 save_wave_file('01.wav',my_buf)
 stream.close()

利用PyAudio播放音频

chunk=2014
def play():
 wf=wave.open(r"01.wav",'rb')
 p=PyAudio()
 stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=
 wf.getnchannels(),rate=wf.getframerate(),output=True)
 while True:
 data=wf.readframes(chunk)
 if data=="":break
 stream.write(data)
 stream.close()
 p.terminate()

完整录音播放的demo

import wave
from pyaudio import PyAudio,paInt16

framerate=8000
NUM_SAMPLES=2000
channels=1
sampwidth=2
TIME=2
def save_wave_file(filename,data):
 '''save the date to the wavfile'''
 wf=wave.open(filename,'wb')
 wf.setnchannels(channels)
 wf.setsampwidth(sampwidth)
 wf.setframerate(framerate)
 wf.writeframes(b"".join(data))
 wf.close()

def my_record():
 pa=PyAudio()
 stream=pa.open(format = paInt16,channels=1,
   rate=framerate,input=True,
   frames_per_buffer=NUM_SAMPLES)
 my_buf=[]
 count=0
 while count<TIME*20:#控制录音时间
 string_audio_data = stream.read(NUM_SAMPLES)
 my_buf.append(string_audio_data)
 count+=1
 print('.')
 save_wave_file('01.wav',my_buf)
 stream.close()

chunk=2014
def play():
 wf=wave.open(r"01.wav",'rb')
 p=PyAudio()
 stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels=
 wf.getnchannels(),rate=wf.getframerate(),output=True)
 while True:
 data=wf.readframes(chunk)
 if data=="":break
 stream.write(data)
 stream.close()
 p.terminate()

if __name__ == '__main__':
 my_record()
 print('Over!') 
 play()

更多用法详见 pyaudio文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python 绘制3D图案例分享

    python 绘制3D图案例分享

    这篇文章主要介绍了python 绘制3D图案例分享,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-07-07
  • python爬虫中抓取指数的实例讲解

    python爬虫中抓取指数的实例讲解

    在本篇文章里小编给大家整理了关于python爬虫中抓取指数的实例讲解内容,有兴趣的朋友们学习下。
    2020-12-12
  • Python格式化输出字符串的五种方法总结

    Python格式化输出字符串的五种方法总结

    Python语言有许多优点,常用于不同的领域,如数据科学、web开发、自动化运维等。本文将学习如何使用字符串中内置的方法来格式化字符串,感兴趣的可以了解一下
    2022-06-06
  • python flask开发的简单基金查询工具

    python flask开发的简单基金查询工具

    基于python flask开发的简单基金查询工具,支持大盘指数实时情况查看,总持仓实际涨幅、预估涨幅等功能,感兴趣的朋友可以下载该项目来查看使用
    2021-06-06
  • python如何在word中存储本地图片

    python如何在word中存储本地图片

    这篇文章主要介绍了python如何在word中存储本地图片,想了解docx模块的同学,可以参考下
    2021-04-04
  • python性能测试工具locust的使用

    python性能测试工具locust的使用

    这篇文章主要介绍了python性能测试工具locust的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • Django如何使用redis作为缓存

    Django如何使用redis作为缓存

    这篇文章主要介绍了Django如何使用redis作为缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解

    Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解

    mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形式操作,这篇文章主要介绍了Windows和夜神模拟器上抓包程序mitmproxy的安装使用详解,需要的朋友可以参考下
    2022-10-10
  • python实现文件助手中查看微信撤回消息

    python实现文件助手中查看微信撤回消息

    这篇文章主要为大家详细介绍了python实现文件助手中查看微信撤回消息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • OpenMV与JSON编码问题解析

    OpenMV与JSON编码问题解析

    这篇文章主要介绍了OpenMV与JSON编码,JSON是一种简洁高效的交换数据的格式,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-06-06

最新评论