python音频处理的示例详解


Posted in Python onDecember 23, 2020

准备工作:
首先,我们需要 import 几个工具包,一个是 python 标准库中的 wave 模块,用于音频处理操作,另外两个是 numpy 和 matplot,提供数据处理函数。

一:读取本地音频数据

处理音频第一步是需要从让计算机“听到”声音,这里我们使用 python 标准库中自带的 wave模块进行音频参数的获取。

(1) 导入 wave 模块
(2) 使用 wave 中的函数 open 打开音频文件,wave.open(file,mode)函数带有两个参数, 第一个 file 是所需要打开的文件名及路径,使用字符串表示;第二个 mode 是打开的模式,也是用字符串表示 ('rb'或'wb')
(3) 打开音频后使用 getparams() 获取音频基本的相关参数(nchannels:声道数,
sampwidth:量化位数或量化深度,framerate:采样频率,nframes:采样点数)

# 导入 wave 模块
import wave
# 用于绘制波形图
import matplotlib.pyplot as plt
# 用于计算波形数据
import numpy as np
# 用于系统处理,如读取本地音频文件
import os
 
# 打开WAV文档
f = wave.open(r"2.wav",'rb' )
# 读取格式信息
params = f.getparams ()
nchannels,sampwidth, framerate, nframes = params [:4]
print(framerate)

二:读取单通道音频,并绘制波形图(常见音频为左右2个声道)

(1) 通过第一步,可以继续读取音频数据本身,保存为字符串格式

readframes:

读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位),readframes返回的是二进制数据(一大堆bytes),在Python中用字符串表示二进制数据。

strData = f.readframes(nframes)

(2) 如果需要绘制波形图,则需要将字符串格式的音频数据转化为 int 类型

frombuffer:

根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组。

通过frombuffer函数将二进制转换为整型数组,通过其参数dtype指定转换后的数据格式。

waveData=np.frombuffer(strData,dtype=np.int16)

此处需要使用到 numpy 进行数据格式的转化

(3) 将幅值归一化
把数据变成(0,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。

waveData=waveData*1.0/(max(abs(waveData)))

这一步去掉也可画出波形图,可以尝试不用此步,找出波形图的不同

(4) 绘制图像

通过取样点数和取样频率计算出取样的时间:

time = np.arange(0,nframes)*(1.0/framerate)

import wave
# 导入 wave 模块
import matplotlib.pyplot as plt
# 用于绘制波形图
import numpy as np
# 用于计算波形数据
import os
#  用于系统处理,如读取本地音频文件
 
f = wave.open(r"di.wav",'rb' )
params = f.getparams ()
nchannels,sampwidth, framerate, nframes = params [:4]
print(framerate)
 
# 读取波形数据
strData = f.readframes(nframes)
# 将字符串转换为16位整数
waveData = np.frombuffer(strData,dtype=np.int16)
# 幅值归一化
waveData = waveData*1.0/(max(abs(waveData)))
#计算音频的时间
time = np.arange(0,nframes)*(1.0 / framerate)
 
plt.plot(time,waveData)
plt.xlabel("Time(s)")
plt.ylabel("Amplitude") 
plt.title("Single channel wavedata")
plt.show()

效果图

python音频处理的示例详解

到此这篇关于python音频处理的示例详解的文章就介绍到这了,更多相关python音频处理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python批量同步web服务器代码核心程序
Sep 01 Python
Python设计模式之抽象工厂模式
Aug 25 Python
Python实现接受任意个数参数的函数方法
Apr 21 Python
pandas重新生成索引的方法
Nov 06 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
如何实现Django Rest framework版本控制
Jul 25 Python
python同步windows和linux文件
Aug 29 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
python爬虫框架feapde的使用简介
Apr 20 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 Python
python 实现客户端与服务端的通信
Dec 23 #Python
python实现excel公式格式化的示例代码
Dec 23 #Python
python 基于opencv实现图像增强
Dec 23 #Python
python接口自动化框架实战
Dec 23 #Python
pycharm远程连接服务器并配置python interpreter的方法
Dec 23 #Python
python实现发送QQ邮件(可加附件)
Dec 23 #Python
如何通过安装HomeBrew来安装Python3
Dec 23 #Python
You might like
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
flask应用部署到服务器的方法
2019/07/12 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
某公司部分笔试题
2013/11/05 面试题
行政管理毕业生自荐信
2014/02/24 职场文书
捐资助学倡议书
2014/04/15 职场文书
餐厅筹备计划书
2014/04/25 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
政风行风建设责任书
2014/07/23 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
高考1977观后感
2015/06/04 职场文书
雷锋的观后感
2015/06/10 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书
学生检讨书范文
2019/06/24 职场文书
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android