0.引子

当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包。

PyAudio是Python开源工具包,由名思义,是提供对语音操作的工具包。提供录音播放处理等功能,可以视作语音领域的OpenCv。

1.简介

Python学习交流群:1004391443

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)下载: http://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() 。(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 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")

python的pyaudio教程入门_Python音频操作工具PyAudio上手教程!相关推荐

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

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

  2. python音频分析工具_『开发技巧』Python音频操作工具PyAudio上手教程

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

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

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

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

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

  5. python的pyaudio教程入门_Python豪杰物语:pyaudio的安装播放音频示例

    环境 Python 3.7.0 Win 10 1.pyaudio的安装 直接用pip安装的pyaudio不支持3.7,所以在安装或import的时候会报错.所以直接下载whl文件安装即可. 切换到wh ...

  6. python的pyaudio教程入门_Python PyAudio 安装使用

    Python PyAudio安装: Python3.7 无法安装pyaudio pip install pyaudio 提示error: Microsoft Visual C++ 14.0 is re ...

  7. python人工智能编程教程入门_Python人工智能教程让你从入门到践

    本书旨在让你成为优秀的程序员,具体地说,是优秀的Python程序员.通过阅读本书,你将迅速掌握编程概念,打下坚实的基础,并养成良好的习惯.阅读本书后,你就可以开始学习Python高级技术,并能够更轻松 ...

  8. python面向对象编程教程入门_python入门教程09-01 (python语法入门之面向对象编程)...

    分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地将对象进行进行分类,面向不同的对象处理的方式也不同,下面我们一起来看看吧! 一 对象的概念 "面向对象"的核心是&quo ...

  9. python中delete怎么用_python删除np.deletePython基础教程05 - 缩进和选择

    缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python! ...

  10. python人工智能方向如何入门_Python人工智能入门课程大纲;.pdf

    Python 人工智能入门课程大纲 零基础踏入 AI 领域,学习 Py thon 编程.数据分析与机器学习技能 更新日期 / 2019-02- 14 学习目标 在这个课程中,你将学习 AI 领域所需的 ...

最新文章

  1. Android用户界面布局(layouts)
  2. 1.9 程序示例--局部加权线性回归-机器学习笔记-斯坦福吴恩达教授
  3. Linux网络编程 五种I/O 模式及select、epoll方法的理解
  4. 跑faster rcnn测试时遇到错误Attribute Error: 'NoneType' object has no attribute 'astype'
  5. 服务框架及服务治理组件——业界调研
  6. 就业技术书文件表格_公路工程全套资料—开工施工检验等表格范本,及监理内业常用资料...
  7. 千呼万唤始出来,OpenCV 4.0正式发布!
  8. 寒武纪官宣25亿美元估值融资,也有AI芯片公司要被收购了
  9. 每天Leetcode 刷题 初级算法篇-数学问题-Fizz Buzz
  10. 用matlab实现视频截图字幕部分的拼接
  11. 前向算法(Forward Algorithm)
  12. 图片加载库之Glide和Picasso对比
  13. CSS3产生渐变效果
  14. python下GDAL库安装——以pycharm编译器为例
  15. 利用云终端减少硬件冗余 提高机房整体管理效率
  16. 大数据系列之Java调用elasticsearch的增删查改聚合
  17. win10用户名与计算机名字一样,win10电脑账户名和其他信息怎么更改
  18. 使用C++实现n阶行列式的计算
  19. caj转word怎么转,怎么将caj转换成word
  20. 关闭谷歌google右侧百度热搜(下方无偿链接),亲测有效

热门文章

  1. DOTween 数字变化
  2. linux 登陆sybase_远程连接sybase 数据库 步骤
  3. BCDboot.exe
  4. codeblocks下载
  5. 【5G核心网】 3GPP TS 系列解读
  6. 基于JAVA的私人牙科诊所管理系统
  7. Oracle 使用 PL/SQL Developer 生成 AWR 报告
  8. vue项目实现文字转换成语音播放功能
  9. 【信号处理】Python实现BPSK、QPSK、8PSK、8QAM、16QAM、64QAM的调制和解调
  10. C# 创建基于TCP、HTTP协议的JsonRpc 2.0(可跨平台、跨语言)