python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程
0.引子
当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包。
PyAudio是Python开源工具包,由名思义,是提供对语音操作的工具包。提供录音播放处理等功能,可以视作语音领域的OpenCv。
1.简介
PyAudio为跨平台音频I / O库PortAudio提供Python 绑定。使用PyAudio,您可以轻松地使用Python在各种平台上播放和录制音频,例如GNU / Linux,Microsoft Windows和Apple Mac OS X / macOS。
PyAudio的灵感来自:
pyPortAudio / fastaudio:PortAudio v18 API的Python绑定。
tkSnack:Tcl / Tk和Python的跨平台声音工具包。
2.安装
目前的版本是PyAudio v0.2.11。在大多数平台上使用pip安装PyAudio。对于v0.2.9之前的版本,PyAudio分发安装二进制文件,这些文件 存档在这里。
微软Windows
使用pip安装:
python -m pip install pyaudio
笔记:
如果pip尚未与您的Python安装捆绑在一起,请在此处获取 。
pip将获取并安装PyAudio轮(预先打包的二进制文件)。目前,有车轮兼容Python 2.7,3.4,3.5和3.6 的 官方发行版。对于这些版本,可以使用32位和64位车轮。
这些二进制文件包括使用MinGW构建的PortAudio v19 v190600_20161030。它们仅支持Windows MME API,不包括对DirectX,ASIO等的支持。如果需要支持未包含的API,则需要编译PortAudio和PyAudio。
Apple Mac OS X.
使用Homebrew安装必备的portaudio库,然后使用pip安装PyAudio:
brew install portaudio
pip install pyaudio
笔记:
如果尚未安装,请下载 Homebrew。
pip将下载PyAudio源代码并为您的Python版本构建它。
Homebrew和构建PyAudio还需要安装Xcode命令行工具(更多信息)。
Debian / Ubuntu
使用包管理器安装PyAudio:
sudo apt-get install python-pyaudio python3-pyaudio
如果没有最新版本的PyAudio,请使用pip安装它:
pip install pyaudio
笔记:
pip将下载PyAudio源并为您的系统构建它。请务必事先安装portaudio库开发包(portaudio19-dev)和python开发包(python-all-dev)。
为了更好地隔离系统包,请考虑在virtualenv中安装PyAudio 。
PyAudio来源
源代码可从Python Package Index(PyPI)下载:pypi.python.org/pypi/PyAudio。
或克隆git存储库:
要从源代码构建PyAudio,您还需要构建 PortAudio v19。有关为各种平台构建PyAudio的一些说明,请参阅编译提示。要使用Microsoft Visual Studio构建PyAudio,请查看Sebastian Audet的说明。
3.示例
1).采集音频
下面以一段代码演示如何从计算机麦克风采集一段音频,采集音频时长 4s,保存文件 output.wav
使用了tqdm模块,可以方便显示出来读取过程,如下:
* recording
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s]
* done recording
import pyaudio
import wave
from tqdm import tqdm
def 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()阻止直到所有给定/请求的帧都被播放/记录。或者,要动态生成音频数据或立即处理录制的音频数据,请使用下面概述的“回调模式”。
2).播放音频
下面使用播放的功能来播放1)中保存的音频 output.wav
通过tqdm,显示播放进度条,如下:
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s]
"""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")
2).以回调方式播放音频
当需要在执行其他程序时同时播放音频,可以使用回调的方式播放,示例代码如下:
"""PyAudio Example: Play a WAVE file."""
import pyaudio
import wave
from tqdm import tqdm
import time
def 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:
python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程相关推荐
- python音频分析工具_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- python处理音频的软件_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- python录音pyaudio_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- python pyqt教程_『开发技巧』PyQt5入门教程
PyQt5相关 PyQt5是一套来自Digia的Qt5应用框架和Python的粘合剂.支持Python2.x和Python3.x版本.本教程使用Pyhton 3.Qt库是最强大的GUI支持库的一种.P ...
- python是语言还是软件_程序开发语言之Python:是追逐还是坚守?
Python作为计算机程序设计语言的其中一种,最初是被设计用于编写自动化脚本(shell),随着版本的不断更新.语言新功能的添加和机器学习的兴起,Python从2017年开始受到广泛关注. Pytho ...
- 『开发技巧』全网最详尽手把手教你在Ubuntu安装搜狗输入法
最近在使用Ubuntu进行开发,用惯了搜狗输入法,所以尝试在Ubuntu上安装使用.发现网络上的教程都不够完整,所以把自己探索安装完整过程记录下来. 0x01:安装fcitx 命令行执行 sudo a ...
- 『开发技术』Python中文分词工具SnowNLP教程
介绍一个好用多功能的Python中文分词工具SnowNLP,全称Simplified Chinese Text Processing.在实现分词的同时,提供转换成拼音(Trie树实现的最大匹配)及繁体 ...
- python编一个答题程序_我开发了一个Python答题小程序,近70份奖品等你来拿
微信小程序非常火爆,我想做小程序已经很久了,几个月前终于下定决心做一款小程序.本身是码农出身,希望做一款跟编程相关的小程序,于是就有了这一款"码题达人"小程序. 搜索微信小程序:码 ...
- python中拼音怎么用_实用小技巧,Python一秒将汉字转为拼音
大家好,欢迎来到Crossin的编程教室! 有时在处理文件时候,我们需要将中文汉字转换为拼音或者拼音首字母的需求:还有的时候,我们需要对汉字进行按拼音字母排序(汉字的默认排序是编码序而非拼音序).针对 ...
最新文章
- Fragment中使用viewLifecycleOwner/getActivity/this
- 什么是BGP,BGP的优点有哪些?-Vecloud
- mysql修改表引擎Engine
- objc_setAssociatedObject 关联的简单用法
- 9.Tornado下的一个简易Blog--2013-05-21
- optimized mysql_MySQL|MySQL执行计划
- Linux远程管理协议(RFB、RDP、Telnet和SSH)
- 均薪连续三年过万,北上深人才需求大 !| 5G 人才报告
- 职业程序员不必那么职业
- bilibili手机缓存视频转换为mp4
- 私有化单机题库管理软件“题库管家”1.3版本正式发布,windows版与mac版下载地址
- 离散数学——基础推理
- win10c盘扩容_【电脑维护宝典】C盘不再亮起红灯!
- 江苏省无锡市高二计算机小高考,江苏新高考高二还要考小高考吗?江苏新高考高中怎么分科?...
- 友好的可视化工具——trelliscope
- PCD格式、Trimmed ICP实现、旋转矩阵四元数欧拉角
- 数据通信与计算机网络复习笔记
- 如何去掉CSDN中图片的水印
- Firefox流失近5000万用户,世界第三大浏览器正在消亡
- Go mgo+Mongodb连接失败问题