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实现的ini文件操作类分享
Nov 20 Python
Python读大数据txt
Mar 28 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
Jun 02 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
python实现快递价格查询系统
Mar 03 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 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+highchats生成动态统计图
2014/05/21 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
PHP微商城开源代码实例
2019/03/27 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
Highcharts入门之简介
2016/08/02 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
Python设计模式之观察者模式简单示例
2018/01/10 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
python 实现IP子网计算
2021/02/18 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
团结演讲稿范文
2014/05/23 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
师范生教育见习总结
2015/06/23 职场文书
如何书写授权委托书?
2019/06/25 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题