python实现录音小程序

yipeiwu_com6年前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脚本实现集群检测和管理功能

场景是这样的:一个生产机房,会有很多的测试机器和生产机器(也就是30台左右吧),由于管理较为混乱导致了哪台机器有人用、哪台机器没人用都不清楚,从而产生了一个想法--利用一台机器来管理所有...

python 转换 Javascript %u 字符串为python unicode的代码

web采集的数据为 %u6B63%u5F0F%u4EBA%u5458,需要读取并转换为python对象,想了下不调用Javascript去eval,只能自己翻译了。 核心代码: i...

Python cookbook(数据结构与算法)对切片命名清除索引的方法

本文实例讲述了Python对切片命名清除索引的方法。分享给大家供大家参考,具体如下: 问题:如何清理掉到处都是硬编码的切片索引 解决方案:对切片命名 假设有一些代码用来从字符串的固定位置...

跟老齐学Python之网站的结构

跟老齐学Python之网站的结构

很早很早的时候,computer这个东西习惯于被称之为计算机,因为它的主要功能是完成一些科学计算的东西,我记得自己鼓捣它的时候,就是计算,根本就没有想到它有早一日还可以用来做别的。后来另...

python编程测试电脑开启最大线程数实例代码

python编程测试电脑开启最大线程数实例代码

本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下。 #!/usr/bin/env python #coding=gbk import thr...