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采集腾讯新闻实例
Jul 10 Python
Python中os.path用法分析
Jan 15 Python
如何用itertools解决无序排列组合的问题
May 18 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
python进度条显示之tqmd模块
Aug 22 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
定义select的边框颜色
2008/04/28 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
Python基于贪心算法解决背包问题示例
2017/11/27 Python
Python模块的加载讲解
2019/01/15 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
Keras自定义IOU方式
2020/06/10 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
网络体系结构及协议的定义
2014/03/13 面试题
初中班主任评语
2014/04/24 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
雷人标语集锦
2014/06/19 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
2015年安全月活动总结
2015/03/26 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS