简介
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源码实现重采样。