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 相关文章推荐
使用grappelli为django admin后台添加模板
Nov 18 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
May 16 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
Python 处理数据的实例详解
Aug 10 Python
wxPython的安装与使用教程
Aug 31 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
Python字符串处理的8招秘籍(小结)
Aug 13 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
Nov 06 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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
使用无限生命期Session的方法
2006/10/09 PHP
多数据表共用一个页的新闻发布
2006/10/09 PHP
初识php MVC
2014/09/10 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python 列表list使用介绍
2014/11/30 Python
Python中常见的数据类型小结
2015/08/29 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
Python之pymysql的使用小结
2019/07/01 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
施工人员岗位职责
2013/12/12 职场文书
财会自我鉴定范文
2013/12/27 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
运动会通讯稿300字
2015/07/20 职场文书
mysql如何查询连续记录
2022/05/11 MySQL