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 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
Python中的自省(反射)详解
Jun 02 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
Django框架使用mysql视图操作示例
May 15 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
python logging 重复写日志问题解决办法详解
Aug 04 Python
Python实现Excel自动分组合并单元格
Feb 22 Python
浅谈Python中的正则表达式
Jun 28 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 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 构造函数construct的前下划线是双的_
2009/12/08 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python制作CSDN免积分下载器
2015/03/10 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
django认证系统 Authentication使用详解
2019/07/22 Python
python groupby 函数 as_index详解
2019/12/16 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
Python多分支if语句的使用
2020/09/03 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
七年级地理教学反思
2014/01/26 职场文书
车辆转让协议书
2014/09/24 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
HTML中的表单元素介绍
2022/02/28 HTML / CSS
Go语言grpc和protobuf
2022/04/13 Golang