Python如何运用pyaudio库去做一个固定采样率音频录制器

这篇文章主要介绍了Python如何运用pyaudio库去做一个固定采样率音频录制器问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Python用pyaudio库做固定采样率音频录制器

首先要去下载一个对应的pyaudio库的whl文件,目前最新版本是cp38的那个,如果版本太低是用不了的,下载好后在编译环境下的控制台输入pip install +whl文件路径+XXX.whl+回车 

# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ import pyaudio import wave CHUNK=256#设置底缓存块的大小为256 FORMAT=pyaudio.paInt16#设置采样深度为16位 CHANNELS=2#设置声道数为2 RATE=16000#设置采样率16 RECORD_SECONDS=10#录音时长为10s p=pyaudio.PyAudio()#实例化一个对象 #打开声卡 stream=p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) #创建列表用来储存采样的音频数据 record_buf=[] print("***开始录音:请在10s内输入语音***") for i in range(0,int(RATE/CHUNK*RECORD_SECONDS)): data=stream.read(CHUNK) record_buf.append(data) print("***录音结束***") wf=wave.open('audiol.wav','wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(record_buf)) wf.close()#写完后关闭声卡 stream.stop_stream()#停止声卡 stream.close()#关闭声卡 p.terminate()#终止pyaudio

先前我出现了一个错误:一直提示sample width not specified(采样深度没有被指定)

 在我无数次检查后发现出错的地方是程序中sample少打了个字母'e'

最后在相应的文件夹下会出现wav文件

Python音频操作工具pyaudio上手

当需要使用Python处理音频数据时,使用Python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包。

PyAudio是Python开源工具包,由名思义,是提供对语音操作的工具包。提供录音播放处理等功能,可以视作语音领域的OpenCV

来看示例

1、采集音频

下面以一段代码演示如何从计算机麦克风采集一段音频,采集音频时长 4s,保存文件 output.wav

使用了tqdm模块,可以方便显示出来读取过程:

import pyaudio import wave from tqdm import tqdm def record_audio(wave_out_path,record_second): FORMAT = pyaudio.paInt16#音频数据格式 CHANNELS = 2#声道数 RATE = 44100#采样率 CHUNK = 1024#每次读多少个数据 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) wf = wave.open(wave_out_path, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT))#其实就是2,表示两个字节 wf.setframerate(RATE) print("* recording") ## RATE / CHUNK * record_second意思是: ## 采样率是RATE,每秒采集RATE个数据,所以每秒的音频需要读取RATE / CHUNK次 for i in tqdm(range(0, int(RATE / CHUNK * record_second))): data = stream.read(CHUNK) wf.writeframes(data) print("* done recording") stream.stop_stream() stream.close() p.terminate() wf.close() record_audio("output.wav",record_second=4)

2、播放音频

下面使用播放的功能来播放1中保存的音频 output.wav,通过tqdm,显示播放进度条:

"""PyAudio Example: Play a WAVE file.""" import pyaudio import wave from tqdm import tqdm def play_audio(wave_path): CHUNK = 1024 wf = wave.open(wave_path, 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() # open stream (2) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) # read data data = wf.readframes(CHUNK) # play stream (3) datas = [] while len(data) > 0: data = wf.readframes(CHUNK) datas.append(data) for d in tqdm(datas): stream.write(d) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate() play_audio("output.wav")

wave_read相关方法

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持0133技术站。

以上就是Python如何运用pyaudio库去做一个固定采样率音频录制器的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » python