音频读取之wave和liborsa

wave

常见的语音信号处理python库有librosa, scipy, soundfile等等。wave库是python的标准库,对于python来说相对底层,wave不支持压缩/解压,但支持单声道/立体声语音的读取。

读取音频

import wave #导入库file_path = 'D:/ba.wav' #文件路径
f = wave.open(file_path, "rb") #读取参数
params = f.getparams()nchannels, sampwidth, framerate, nframes = params[:4]
str_data = f.readframes(nframes)
f.close()audio_data = np.frombuffer(str_data, dtype=np.short)
audio_data1 = audio_data*1.0/(max(abs(audio_data)))#归一化到[-1,1]
time = np.arange(0, nframes) * (1.0 / framerate)

“WAV”格式文件由“fmt”和“data”,两个部分组成,其中“fmt”的存储块用来存音频文件的格式,“data”的存储块用来存实际的声音信息,物理上描述的振幅和时间:长度(时间)和振幅。

我们看看读取到的参数params:
在这里插入图片描述

里面包含6个子参数:
在这里插入图片描述

getparams()得到的params,返回6个参数分别是:(nchannels,sampwidth,framerate,nframe,comptype,compname)

  • nchannels:返回音频通道的数量(单声道为1,立体声为2)。
  • sampwidth:返回以字节为单位的样本宽度。(2字节byte)
  • framerate:返回采样频率。
  • nframe:返回音频帧数。(这里应该是点数,看后面解释)
  • comptype:返回压缩类型(“ NONE”是唯一受支持的类型)。
  • compname:压缩名称。

通过上面信息,我们知道该段音频的采样点数为84896,每点用2byte=16bit保存,那么需要84896*2=169792字节B。

换算单位:
1B(Byte 字节)=8bit,
1KB (Kilobyte 千字节)=1024B,
1MB (Megabyte 兆字节 简称“兆”)=1024KB,

即该音频大小为:169792/1024=165.81KB=0.16MB

注:
疑问:它的帧数是如何计算的?
这条语音长度是多少采样点?我们用librosa库读取音频,发现size和上面是一样的,所以nframe应该是语音采样点数。

data, sr = librosa.load(file_path, sr =None) #必须加sr =None,不然默认采样成22050

在这里插入图片描述
首先,可以看到audio_data的值是显示不出来的,进行如下操作:

y=np.asarray(audio_data,'int64')# 类型转换成int64

此时value处就有显示值了,画出来:
在这里插入图片描述
可以看到wavefile读出的数据是一个整型,没有做32767的归一化。

进行归一化:

audio_data1 = audio_data*1.0/(max(abs(audio_data)))#归一化到[-1,1]

在这里插入图片描述

归一化后,和librosad读取出的数据的范围还是不一样。liborsa读取出来的数据,是做了32767的归一化。wavefile的归一化是除以最大值。
在这里插入图片描述

音频重采样

重采样到16000Hz

data = librosa.resample(data.astype(np.float32), fs, 16000) #注意一定要对数据做astype(np.float32),否则会出现下采样无效。

做完重采样后会出现最大值远大于32767的情况,因此需要注意,需要对其进行动态标准化,避免早保存时候出现溢出(np.int16的最大值是32767,多了会削波)。可以添加判断,np.max(abs(x_filted)) / np.max(abs(up_sample_data))

音频保存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/540776.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cesium-可视化区域分析

全部代码 <template><div id="cesiumContainer" style="height: 100vh;"></div><div id="toolbar" style="position: fixed;top:20px;left:220px;"><el-breadcrumb :separator-icon="ArrowRight&quo…

第2篇:1位二选一数据选择器

Q&#xff1a;创建1位二选一数据选择器&#xff0c;并在DE2-115开发板上通过滑动开关和LEDR硬件来实现。 A&#xff1a;基本原理&#xff1a;两个1位数据输入(x&#xff0c;y)&#xff0c;一个1位数据s控制&#xff08;高、低电平&#xff09;选择(x&#xff0c;y)其中一个数据…

xss.haozi.me靶场“0x00-0x0A”通关教程

君衍. 一、靶场介绍二、第一关 0x00 不做限制三、第二关 0x01 文本闭合标签绕过四、第三关 0x02 双引号闭合绕过五、第四关 0x03 过滤括号六、第五关 0x04 编码绕过七、第六关 0x05 注释闭合绕过八、第七关 0x06 换行绕过九、第八关 0x07 删除标签十、第九关 0x08 多加空格绕过…

[Redis]——Redis持久化的两种方式RDB、AOF

目录 RDB快照模式 概念&#xff1a; 触发时机&#xff1a; 异步做快照 AOF追加模式 概念&#xff1a; 触发时机&#xff1a; bgrewriteaof命令&#xff1a; 比较两种模式&#xff1a; RDB快照模式 概念&#xff1a; RDB模式就是保存当前Redis的状态到本地磁盘文件&am…

Vue2 父子组件某一属性的双向绑定

原本&#xff1a;父组件使用props传值给孩子组件初始化&#xff0c;触发事件子组件使用$emit传值给父组件&#xff0c;很麻烦后来&#xff1a;使用computed和$event例子代码&#xff1a; <template><div class"box">grandpa <el-input v-model"…

【网络】HTTP协议

目录 1. 什么是HTTP协议&#xff1f; 2. 为什么使用HTTP协议&#xff1f; 3. HTTP协议通信过程 4. 什么是url&#xff1f; 5. HTTP报文 5.1 请求报文 5.2 响应报文 6. HTTP请求方式 7. HTTP头部字段 8. HTTP状态码 9. 连接管理 长连接与短连接 管线化连接 1. 什么…

1、鸿蒙学习-为应用/服务进行签名

针对应用/服务的签名&#xff0c;DevEco Studio为开发者提供了自动签名方案&#xff0c;帮助开发者高效进行调试。也可选择手动方式对应用/服务进行签名&#xff0c;如果使用了需要ACL的权限&#xff0c;需采用手动方式进行签名。 自动签名 说明 使用自动签名前&#xff0c;请…

探讨大世界游戏的制作流程及技术——大场景制作技术概况篇

接上文&#xff0c;我们接下来了解一下大世界场景制作技术有哪些&#xff0c;本篇旨在给大家过一遍目前业界的做法&#xff0c;能让大家有一个宏观的知识蓝图。实际上&#xff0c;针对不同的游戏类型和美术风格&#xff0c;制作技术在细节上有着非常大的不同&#xff0c;业界目…

3、设计模式之工厂模式1(Factory)

工厂模式是什么&#xff1f;     工厂模式是一种创建者模式&#xff0c;用于封装和管理对象的创建&#xff0c;屏蔽了大量的创建细节&#xff0c;根据抽象程度不同&#xff0c;主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。 简单工厂模式 看一个具体的需求 看一个…

pytorch升级打怪(三)

数据集合数据加载器 简介加载数据集迭代和可视化数据集为您的文件创建自定义数据集__init____len____getitem__ 准备您的数据以使用DataLoaders进行训练通过DataLoader进行遍载 简介 处理数据样本的代码可能会变得混乱且难以维护&#xff1b;理想情况下&#xff0c;我们希望我…

4种小众的能力,帮你更好地适应未来

新年伊始&#xff0c;又是一个全新的开始。 未来的社会究竟需要什么样的能力&#xff1f;这已经是一个很老的话题&#xff0c;已经有许许多多讨论了。但这其中&#xff0c;可能有一些是容易被人忽略的&#xff0c;或者不容易被注意到的。 我想跟你一起分享&#xff0c;我对这个…

高分1、2号卫星原始遥感影像数据

高分一号 高分一号卫高分一号卫星是中国高分辨率对地观测系统的首发星&#xff0c;突破了高空间分辨率、多光谱与宽覆盖相结合的光学遥感等关键技术&#xff0c;设计寿命5至8年。 高分辨率对地观测系统工程是《国家中长期科学和技术发展规划纲要(2006&#xff5e;2020年)》确定…