python实现录音小程序

yipeiwu_com5年前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设计】。

相关文章

python机器学习之神经网络(三)

python机器学习之神经网络(三)

前面两篇文章都是参考书本神经网络的原理,一步步写的代码,这篇博文里主要学习了如何使用neurolab库中的函数来实现神经网络的算法。 首先介绍一下neurolab库的配置: 选择你所...

解决pandas中读取中文名称的csv文件报错的问题

之前在使用Pandas处理csv文件时,发现如果文件名为中文,则会报错: OSError: Initializing from file failed 后来在一位博主的博客中解释了...

如何高效使用Python字典的方法详解

前言 众所周知字典(dict)对象是 Python 最常用的数据结构,社区曾有人开玩笑地说:"Python企图用字典装载整个世界",字典在Python中的重要性不言而喻,这里整理了几个关...

Python拼接微信好友头像大图的实现方法

Python拼接微信好友头像大图的实现方法

基于 itchat 库来获取微信好友头像并执行拼接操作,对微信上文字化好友列表数据进行可视化展示。 获取好友头像 def save_avatar(folder): """ 保...

利用Tkinter和matplotlib两种方式画饼状图的实例

当我们学习python的时候,总会用到一些常用的模块,接下来我就详细讲解下利用两种不同的方式画饼状图。 首先利用【Tkinter】中的canvas画布来画饼状图: from tkin...