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中的Matplotlib模块入门教程
Apr 15 Python
Python计算三角函数之asin()方法的使用
May 15 Python
详解Python中的静态方法与类成员方法
Feb 28 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
pycharm安装图文教程
May 02 Python
Python之web模板应用
Dec 26 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
解决Django中多条件查询的问题
Jul 18 Python
django如何实现视图重定向
Jul 24 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
利用python 下载bilibili视频
Nov 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
php中随机显示图片的函数代码
2011/06/23 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
javascript绘制漂亮的心型线效果完整实例
2016/02/02 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
python实现名片管理系统项目
2019/04/26 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
回门宴答谢词
2014/01/13 职场文书
竞选学习委员演讲稿
2014/04/28 职场文书
1亿有多大教学反思
2014/05/01 职场文书
2015年端午节活动总结
2015/02/11 职场文书
搞笑老公保证书
2015/02/26 职场文书
运动与健康自我评价
2015/03/09 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL