简介

Waveform Audio File Format(WAVE,又或者是因为扩展名而被大众所知的 wav),是微软与 IBM公司所开发在个人电脑存储音频流的编码格式。
由于项目需要从 wav 文件中读取音频数据,现有许多框架的 API 文档参差不齐,学习成本过高且复用性不高,所以我们准备抛弃已有的API,利用java基础io包构建自己的API。

wav文件格式

为了利用java 原生 io包中的字节流读取文件数据实现睡眠音频的操作,最终在 IOS 平台复现的目的,我们首先要了解 wav 文件内容格式,充分理解wav文件管理音频的原理。
wav文件遵守资源交换文件格式之规则,在文件的前 44(或 46)字节放置头部(header),使播放器或编辑器能够简单掌握文件的基本信息,其内容以区块(chunk)为最小单位,每一区块长度为 4 字节,而区块之上则由子区块包裹,每一子区块长度不拘,但须在前头先宣告标签及长度(字节)。头部的前 3 个区块记录文件格式及长度;接着第一个子区块包含 8 个区块,记录声道数量、采样率等信息;接着第二个子区块才是真正的音频资料,长度则视音频长度而定。内容如下图所示。


须注意的是,每个区块的端序不尽相同,而音频内容本身则是采用小端序。

wav文件的读取(java)

目前已经实现数据的读取,可以获取音频中的采样点信息,以及音频文件的相关描述信息。结果示例如下所示:

下一步工作

规范代码格式,并尝试阅读重采样原理,使用java源码实现重采样。

睡眠音频分割及识别问题(十)--Java读取wav文件相关推荐

  1. 睡眠音频分割及识别问题(十二)--基于IOS的YAMNet音频识别(总结)

    1 结构体 此部分定义了两个结构体用于存储音频信息: AudioFragment:用于存储单个音频片段(0.975s, 16000Hz)的标签评分信息: AudioInfo:用于存储整个音频信息,包含 ...

  2. 睡眠音频分割及识别问题(六)--输入输出及方案讨论

    简介 2021年7月13日,我和我的三个研究生一起拜访了玉米树,和王总等一起针对睡眠音频分割及识别问题进行了深入的讨论,达成了如下共识. 输入 由于保存整个晚上的睡眠音频所需要的存储空间过大,目前拟采 ...

  3. 睡眠音频分割及识别问题(十一)--基于Android的YAMNet音频识别(总结)

    WAV文件格式介绍 WAV文件遵守资源交换文件格式之规则,在文件的前44(或46)字节放置标头(header),使播放器或编辑器能够简单掌握文件的基本信息,其内容以区块(chunk)为最小单位,每一区 ...

  4. 睡眠音频分割及识别问题(一)

    问题描述 通过手机App的录音功能,获得用户一整夜的睡眠音频,对睡眠音频进行分割,并对睡眠阶段进行判定. (1)假设条件一:用户在相对安静的环境下进行睡眠,背景音可能会出现风声.雨声.汽车噪音.空调声 ...

  5. 睡眠音频分割及识别问题(八)--数据采集

    问题 在采用PANN或者YAMNet框架进行学习的时候,没有梦话.磨牙等睡眠音频数据,在一些公开数据集上也没有找到(如果有哪位读者知道,麻烦给我在评论区留言,万分感谢). 公开数据集包括: (1)ht ...

  6. 睡眠音频分割及识别问题(七)--接口输入输出讨论

    简介 关于接口输入输出的讨论. 输入 1.音频文件路径,类型为:字符串: 2.预测多标签类型的排名,前n名,类型为:整型. 处理 1.将输入的音频分割为多个以1s为时间单位的音频片段: 2.利用PAN ...

  7. 睡眠音频分割及识别问题(二)

    输入 通过手机麦克风录制的任意长度睡眠声音. 输出 睡眠阶段曲线,该曲线可以反映出深度睡眠,浅度睡眠.REM睡眠.清醒各个阶段. 研究的核心问题 1.录制策略 (1)每隔10分钟录制一段睡眠音: 2. ...

  8. 睡眠音频分割及识别问题(九)--Android下的YAMNet

    部署PANNs模型面临的问题 加载模型出错 在使用PANNs模型时,在PC端可以较好的运行,可是在Android端运行的时候,编译过程提示缺少libpytorch_jni.so文件,导致无法加载模型, ...

  9. 睡眠音频分割及识别问题(四)--YAMNet简介

    简介 YAMNet模型是在 AudioSet 数据集(一个大型音频.视频数据集)上训练的音频事件分类器. 模型输入 该模型接收包含任意长度波形的float32一维张量或 NumPy数组,且满足范围[- ...

最新文章

  1. java中Integer装箱的注意
  2. 【python图像处理】图像的增强(ImageEnhance类详解)
  3. 使用命令行对Android应用签名
  4. 解决Jenkins的job启动tomcat时会在job结束时关闭问题
  5. java下标运算符_《Java从小白到大牛精简版》之第6章 运算符(下)
  6. 论文拒稿的评价可以有多狠?
  7. 华中科技大学计算机第三次作业,华中科技大学微机原理第三次作业.doc
  8. python和lisp学哪个好_五位专家跟你讲讲为啥Python更适合做AI/机器学习
  9. 恢复oracle中误删除delete的数据、drop掉的表
  10. java模拟浏览器htmlunit,Java版本的浏览器HtmlUnit入门示例
  11. 举例在项目中动态构建自己的程序集,.NET产生动态程序集!
  12. GitHub中文排行榜,帮助你发现高分优秀中文项目(二)-Java
  13. win10键盘鼠标怎么使用?(键盘操纵鼠标)
  14. java 合并mp3
  15. 5G NGC — 关键技术 — 网络切片 — 网络切片管理器网元
  16. C++编译器如何实现异常处理
  17. SVG开发包, 20 个有用的 SVG 工具,提供更好的图像处理
  18. java中finally语句是否一定会被执行
  19. 怪异盒模型flex布局
  20. 高质量C++/C编程指南(重要)

热门文章

  1. 计算机远程桌面自动关闭,windows10重启之后自动关闭远程桌面是怎么回事
  2. mysql 安全删除_mysql的binlog安全删除的一种方法
  3. qt读oracle时间戳,QT利用QDateTime获取当前时间戳的方法toTime_t
  4. oracle连续周数,详细讲解Oracle数据库的“周数计算”
  5. idea搭建maven项目关于数据库连接jar包版本问题解决方案
  6. Linux7添加syslog,请教linux下安装syslog的方法.是安装,不是配置
  7. python后端开发学什么_零基础学Python,这是阿里Python8年开发经验写给你的学习路线图...
  8. Java的一些学习心得
  9. 怎么制作游戏脚本_精彩的游戏视频混剪怎么做?录屏剪辑一站式制作
  10. 【学习笔记】结合代码理解设计模式 —— 代理模式(静态代理、动态代理、延伸)