『开发技巧』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,首先使用

要录制或播放音频,请使用

请注意,在“阻止模式”中,每个

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音频分析工具_『开发技巧』Python音频操作工具PyAudio上手教程相关推荐

  1. python处理音频的软件_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

  2. python的pyaudio教程入门_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

  3. python录音pyaudio_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

  4. python pyqt教程_『开发技巧』PyQt5入门教程

    PyQt5相关 PyQt5是一套来自Digia的Qt5应用框架和Python的粘合剂.支持Python2.x和Python3.x版本.本教程使用Pyhton 3.Qt库是最强大的GUI支持库的一种.P ...

  5. python 内存分析工具_[转] python运行时内存分析工具meliae

    meliae是一个python进程内存占用监控.分析工具,它的安装需要依赖pyrex包. 一.安装: 安装python内存分析工具 sudo pip install cython sudo pip i ...

  6. python代码编写工具_编写更好的Python代码的终极指南

    python代码编写工具 Despite its 尽管它 downsides, Python remains the king of today's programming world. Its ve ...

  7. 『开发技术』Python中文分词工具SnowNLP教程

    介绍一个好用多功能的Python中文分词工具SnowNLP,全称Simplified Chinese Text Processing.在实现分词的同时,提供转换成拼音(Trie树实现的最大匹配)及繁体 ...

  8. python 内存泄漏分析工具_记一次调试python内存泄露的问题

    这两天由于公司需要, 自己编写了一个用于接收dicom文件(医学图像文件)的server. 经过各种coding-debuging-coding-debuging之后, 终于上线了, 上线后心里美滋滋 ...

  9. python数据分析模块包括_数据开发必会 | Python数据分析模块

    作为数据开发,Python强大的数据分析模块还是必须要会的,横向拓展数据分析与挖掘技术栈也是很有必要的.本文将对Pandas.NumPy.SciPy.Matplotlib等分析挖掘库的安装和使用进行简 ...

最新文章

  1. CentOS下Redis安装配置小结
  2. 掌握这 11 个方法论,搞定一场完美技术面试!
  3. matlab z变换离散化_用C++编写一个简单的光栅化渲染器:3D篇
  4. nmap结果导出html,nmap的简单使用 - osc_ijgldkz9的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. jquery:TypeError: $(...).on is not a function
  6. 两个按钮间设置空格(间距)
  7. Internet Download Manager v6.41 Build 2
  8. kali PHP网站渗透,小白日记35:kali渗透测试之Web渗透
  9. 目前微型计算机硬件主要采用,目前使用的微型计算机硬件主要采用的电子器件是()。 A. 真空管 B. 晶体管 C. 大规模和超大规模集成电路...
  10. mysql全库搜索关键字_数据库 全文检索
  11. 实验3:利用SVM实现线性高斯分类
  12. 安装bcc、cachetop、cachestat
  13. 《开源安全运维平台--OSSIM最佳实践》节日期间当当自营店 五折 优惠活动开始啦!...
  14. 谷歌地球倾斜模型3Dtiles格式cesium格式一键导入查看
  15. 算法设计与分析期末总结
  16. python读取身份证中的生日信息
  17. 关于银环蛇Z370主板的,M.2固态与SATA接口冲突的解决办法
  18. Cadence网表算法
  19. centos 6.8使用wine安装QQ2016
  20. 使用Java解压zip格式压缩包

热门文章

  1. 【写作技巧】本科毕业论文开题报告写作攻略
  2. docker中linux用户名密码,linuxea:尽可能不在docker镜像中嵌入配置或者密码
  3. python 下载图片到内存卡_python-23:将图片下载到本地
  4. python利用函数求20的阶乘_请运用reduce函数,计算20的阶乘,慕课网2-19
  5. 计算机初级机考要注意哪些,初级会计机考需要注意哪些问题?四个机考小技巧奉上!...
  6. 仪表自定义刻度值_汇总丨工业仪表知识大全和选型参考
  7. php登陆页添加记住密码选项,PHP 实现登录记住密码
  8. c++ mysql 导入sql_mysql导入sql文件命令和mysql远程登陆使用详解
  9. 机器视觉:双远心镜头在弹簧检测中的应用
  10. 几个查看进程及日志的命令