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

 更新时间:2023年05月06日 15:07:03   作者:Obito_TXP  
这篇文章主要介绍了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相关方法

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 你应该知道的python列表去重方法

    你应该知道的python列表去重方法

    初学者经常会遇到如何移除list中重复元素的问题。 这个问题在其他语言中可能需要for循环什么的,而在python中不用这样,非常简单,下面来通过这篇文章主要介绍了关于python列表去重方法以及拓展,需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • pytorch中with torch.no_grad():的用法实例

    pytorch中with torch.no_grad():的用法实例

    最近在看别人写的代码,遇到经常使用with torch.no_grad(),所以下面这篇文章主要给大家介绍了关于pytorch中with torch.no_grad():用法的相关资料,需要的朋友可以参考下
    2022-03-03
  • Python计算三角函数之asin()方法的使用

    Python计算三角函数之asin()方法的使用

    这篇文章主要介绍了Python计算三角函数之asin()方法的使用,是Python入门的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python读取图片为16进制表示简单代码

    Python读取图片为16进制表示简单代码

    这篇文章主要介绍了Python读取图片为16进制表示简单代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 使用python-Jenkins批量创建及修改jobs操作

    使用python-Jenkins批量创建及修改jobs操作

    这篇文章主要介绍了使用python-Jenkins批量创建及修改jobs操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python 遗传算法处理TSP问题详解

    Python 遗传算法处理TSP问题详解

    遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法
    2022-11-11
  • 浅谈Python任务自动化工具Tox基本用法

    浅谈Python任务自动化工具Tox基本用法

    这篇文章主要介绍了浅谈Python任务自动化工具Tox,tox 是一个管理测试虚拟环境的命令行工具, 它已存在多年且广被开发者们使用,对Python任务自动化工具Tox基本用法感兴趣的朋友一起看看吧
    2022-06-06
  • Python使用Qt5实现水平导航栏的示例代码

    Python使用Qt5实现水平导航栏的示例代码

    本文主要介绍了Python使用Qt5实现水平导航栏的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python提取PDF中的图片的实现示例

    Python提取PDF中的图片的实现示例

    本文主要介绍了Python提取PDF中的图片的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • python中open函数对文件处理的使用教程

    python中open函数对文件处理的使用教程

    open()函数的作用是打开一个文件,并返回一个file对象(即文件对象),下面这篇文章主要给大家介绍了关于python中open函数对文件处理的相关资料,需要的朋友可以参考下
    2022-06-06

最新评论