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实现简单QQ单用户机器人的方法
Jul 03 Python
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
对python使用telnet实现弱密码登录的方法详解
Jan 26 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
python支持多线程的爬虫实例
Dec 21 Python
PyTorch中反卷积的用法详解
Dec 30 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python 批量下载阴阳师网站壁纸
May 19 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
Zend 输出产生XML解析错误
2009/03/03 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
javascript prototype 原型链
2009/03/12 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
2016/01/29 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python笔记(叁)继续学习
2012/10/24 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
Python continue语句实例用法
2020/02/06 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
python def 定义函数,调用函数方式
2020/06/02 Python
python ssh 执行shell命令的示例
2020/09/29 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
物理教学随笔感言
2014/02/22 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
运动会开幕式主持词
2015/07/01 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers