音频读取之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.mzph.cn/news/745627.shtml

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

相关文章

Vue2 + node.js项目

1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …

有趣的前端知识(三)

推荐阅读 有趣的前端知识(一) 有趣的前端知识(二) 文章目录 推荐阅读JS内置对象JS外部对象BOM模型history对象screen对象navigator对象 DOM(文档对象模型)DOM的方法(对于节点的操作&#xff09…

【打工日常】docker部署快速开发海报工具

一、fastposter海报生成器介绍 fastposter 是一款海报生成器,它能够让您快速、轻松地创建各种类型的海报。 只需上传一张背景图,然后在需要的位置添加文字、图片、二维 、头像等组件。点击生成代码按钮,直接获取各种语言 SDK 的调用代码&…

智能物流新纪元:分布式I/O模块重塑仓储自动化

随着工业4.0概念的深入人心,物流行业正在经历前所未有的变革。在这个过程中,物流企业必须积极走向工业自动化、智能化,进而提高物流效率,降低物流成本,以便更好地满足客户和市场的需求。智能物流、仓库自动化已然是趋势…

Java实现PDF文字内容识别,结合OCR实现PDF图片实现

使用插件:UMI-OCR、PDFBOX 实现思路:通过PDFBOX识别PDF文字,如果是图片,则识别不出来,再调用OCR进行识别返回文字;OCR识别较慢,长图识别不出来,目前HTTP方式只支持图片格式&#xf…

【设计模式】二、UML 类图与面向对象设计原则 之 UML概述

二、UML 类图与面向对象设计原则 (一)UML 类图 UML 概述类与类的UML图示类之间的关系 (二)面向对象设计原则 单一职责原则(Single Responsibility Principle, SRP)开闭原则(Open-Closed Princip…

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕

雅特力车规级MCU-AT32A403A开发板评测 06 GC9A01 SPI-LCD 1.28圆形屏幕 硬件平台 AT32A403A Board开发板 1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口GC9A01 产品介绍 推荐一个屏幕资料参考网站 http://www.lcdwiki.com/1.28inch_IPS_Module 1.28寸圆形IPS彩屏&…

C语言——动态内存分配

前言:通过前面的学习,我们知道C语言中在内存中开辟空间的方法有:变量和数组。既然拥有了开辟空间的方法,我们为什么还要学习动态内存分配呢? int val 20; //在内存中开辟四个字节的空间 int arr[10] { 0 }; //在内…

【金三银四】掌趣科技24.3.7 H项目 服务端开发笔试题

考试题型: 不定项选择题 10 道 , 填空题 10 道 , 问答题 2 道 , 编程题 4 道 目录 不定项选择题 10 道填空题 10 道问答题 2 道编程题 4 道 不定项选择题 10 道 在TCP协议中,发送方的窗口大小是由两个关键因素共同决定…

鸿蒙 Harmony 初体验

前言 看现在网上传得沸沸扬扬的鸿蒙,打算弄个 hello world 玩一下, 不然就跟不上时代的发展了 环境安装 我的环境 Windows 11 家庭中文版HarmonyOS SDK (API 9)DevEco Studio (3.1.1 Release)Node.js (16.19.1) 开发IDE下载 官方下载链接 配置 nodejs 这里帮…

Opencascade基础教程(9):切换视图

1、切换视图 1、1 增加视图切换按钮,并添加消息响应函数。 void COCCDemoView::OnButtonFrontview() {//前视图m_View->SetProj(V3d_Yneg);m_View->FitAll(); }void COCCDemoView::OnButtonRearview() {//后视图m_View->SetProj(V3d_Ypos);m_View->Fit…

【华为Datacom数通认证】HCIA-HCIP-HCIE

华为认证课程概述 华为认证是华为技术有限公司(简称"华为")基于"平台生态"战略,围绕"云-管-端"协同的新ICT技术架构,打造的业界覆盖ICT领域最广的认证体系,包含"ICT技术架构认证"、"ICT开发者…

学习JAVA的二十二天(基础)

目录 网络编程 三要素: IP InetAddress类 端口号 协议 UDP协议 TCP协议 前言:学习JAVA的第二十一天(基础)-CSDN博客 网络编程 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 三要素:…

installation of package ‘RDocumentation’ had non-zero exit status

installation of package ‘RDocumentation’ had non-zero exit status Warning in install.packages :installation of package ‘httr’ had non-zero exit status Warning in install.packages :installation of package ‘openssl’ had non-zero exit status 由于项目需…

蓝桥杯(1):python排序

1 基础 1.1 输出 1.1.1 去掉输出的空格 print("Hello","World",123,sep"") print("hello",world,123,sep) print(hello,world,123) #输出结果 #HelloWorld123 #helloworld123 #hello world 123 1.1.2 以不同的方式结尾 print(&quo…

Ubuntu Flask 运行 gunicorn+Nginx 部署

linux Ubuntu 下运行python 程序出现killed 原因:CPU或内存限制:在华为云上,你可能有CPU或内存使用的限制。例如,如果你使用的是一个固定大小的实例,那么超过该实例的CPU或内存限制可能会导致进程被杀死。 参考&am…

Python Web开发记录 Day10:Django part4 靓号管理与优化

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、数据库准备2、靓号列表3、新建靓号4、编辑靓…

Vue手写模拟步骤条

效果图&#xff1a; 如果要使用element的步骤条就需要强行修改样式&#xff0c;参考之前的那篇步骤条。这里我采用手写div 代码&#xff1a; 思路是给最外层的div一个左边框&#xff0c;给里面的step-item设置左边框为图片&#xff0c;通过定位来移动。 <div class"m…

Canal实现mysql与缓存同步

什么是Canal Canal是阿里巴巴旗下的一款开源项目, 基于java开发. Canal是基于mysql的主从同步来实现的. github地址: https://github.com/alibaba/canal Canal把自己伪装成MySQL的一个slave节点, 从而监听master的binary log变化. 再把得到的变化信息通知给Canal的客户端, 进而…

个人简历主页搭建系列-02:github 仓库作为联系方式

这篇文章暂时没有开始正式搭建网站。首先是最重要的注意事项&#xff1a;隐私。 真实姓名如果大家自己不介意的话其实我觉得还好&#xff0c;现在在互联网上想扒个姓名挺简单的&#xff0c;而且很多人都实名上网hh&#xff08;比如我的几位田径队学弟笑&#xff09;。 电话&a…