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 相关文章推荐
pycharm 使用心得(四)显示行号
Jun 05 Python
Python中模块string.py详解
Mar 12 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
python实现内存监控系统
Mar 07 Python
Python自定义一个类实现字典dict功能的方法
Jan 19 Python
pymongo中聚合查询的使用方法
Mar 22 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
解决Mac下使用python的坑
Aug 13 Python
python 实现波浪滤镜特效
Dec 02 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 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
php+ajax无刷新分页实例详解
2015/12/07 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
js实现中文实时时钟
2020/01/15 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
Python 异常处理实例详解
2014/03/12 Python
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python实现的求解最大公约数算法示例
2018/05/03 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
python 6种方法实现单例模式
2020/12/15 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
中西医专业毕业生职业规划书
2014/02/24 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
道歉的话怎么说
2015/05/12 职场文书
python办公自动化之excel的操作
2021/05/23 Python