Python音频操作工具PyAudio上手教程详解
Python  /  管理员 发布于 7年前   184
当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包。
PyAudio是Python开源工具包,由名思义,是提供对语音操作的工具包。提供录音播放处理等功能,可以视作语音领域的OpenCv。
PyAudio为跨平台音频I / O库 PortAudio 提供 Python 绑定。使用PyAudio,您可以轻松地使用Python在各种平台上播放和录制音频,例如GNU / Linux,Microsoft Windows和Apple Mac OS X / macOS。
PyAudio的灵感来自:
2.安装
目前的版本是 PyAudio v0.2.11 。在大多数平台上使用pip安装PyAudio。对于v0.2.9之前的版本,PyAudio分发安装二进制文件,这些文件 存档在这里 。
微软Windows
使用 pip 安装:
python -m pip install pyaudio
笔记:
使用 Homebrew 安装必备的portaudio库,然后使用pip安装PyAudio:
brew install portaudio pip install pyaudio
笔记:
Debian / Ubuntu
使用包管理器安装PyAudio:
sudo apt-get install python-pyaudio python3-pyaudio
如果没有最新版本的PyAudio,请使用pip安装它:
pip install pyaudio
笔记:
portaudio19-dev
)和python开发包( python-all-dev
)。PyAudio来源
源代码可从Python Package Index(PyPI)下载: pypi.python.org/pypi/PyAudio 。
或克隆git存储库:
git clone https://people.csail.mit.edu/hubert/git/pyaudio.git
要从源代码构建PyAudio,您还需要构建 PortAudio v19 。有关为各种平台构建PyAudio的一些说明,请参阅 编译提示 。要使用Microsoft Visual Studio构建PyAudio,请查看Sebastian Audet的 说明 。
1).采集音频
下面以一段代码演示如何从计算机麦克风采集一段音频,采集音频时长 4s,保存文件 output.wav
使用了tqdm模块,可以方便显示出来读取过程,如下:
* recording100%|| 172/172 [00:03<00:00, 43.40it/s] * done recording
import pyaudioimport wavefrom tqdm import tqdmdef record_audio(wave_out_path,record_second): CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 44100 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)) wf.setframerate(RATE) print("* recording") 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)
要使用PyAudio,首先使用 pyaudio.PyAudio()
(1)实例化PyAudio ,它设置portaudio系统。
要录制或播放音频,请使用 pyaudio.PyAudio.open()
(2)在所需设备上打开所需音频参数的流。这设置了 pyaudio.Stream
播放或录制音频。
通过使用流式传输 pyaudio.Stream.write()
音频数据或使用流式传输音频数据来播放音频 pyaudio.Stream.read()
。
(3)请注意,在“阻止模式”中,每个 pyaudio.Stream.write()
或 pyaudio.Stream.read()
阻止直到所有给定/请求的帧都被播放/记录。或者,要动态生成音频数据或立即处理录制的音频数据,请使用下面概述的“回调模式”。
使用 pyaudio.Stream.stop_stream()
暂停播放/录制,并 pyaudio.Stream.close()
终止流。(4)
最后,使用 pyaudio.PyAudio.terminate()
(5)终止portaudio会话
2).播放音频
下面使用播放的功能来播放1)中保存的音频 output.wav
通过tqdm,显示播放进度条,如下:
100%|| 172/172 [00:03<00:00, 43.40it/s]
"""PyAudio Example: Play a WAVE file."""import pyaudioimport wavefrom tqdm import tqdmdef 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")
2).以回调方式播放音频
当需要在执行其他程序时同时播放音频,可以使用回调的方式播放,示例代码如下:
"""PyAudio Example: Play a WAVE file."""import pyaudioimport wavefrom tqdm import tqdmimport timedef play_audio_callback(wave_path): CHUNK = 1024 wf = wave.open(wave_path, 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() def callback(in_data, frame_count, time_info, status): data = wf.readframes(frame_count) return (data, pyaudio.paContinue) # open stream (2) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True, stream_callback=callback) # read data stream.start_stream() while stream.is_active(): time.sleep(0.1) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate()play_audio_callback("output.wav")
Reference:
1. http://people.csail.mit.edu/hubert/pyaudio/
总结
以上所述是小编给大家介绍的Python音频操作工具PyAudio上手教程详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号