您当前的位置: 首页 >  Python

耐心的小黑

暂无认证

  • 1浏览

    0关注

    323博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python音频操作工具PyAudio上手

耐心的小黑 发布时间:2021-05-16 12:24:18 ,浏览量:1

一、前言

当需要使用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相关方法

在这里插入图片描述

关注
打赏
1640088279
查看更多评论
立即登录/注册

微信扫码登录

0.0396s