之前有处理过一些相对较为不常见的音频格式,也睬过很多坑,这里做一下简单记录。后面可能随着接触音频类型的增多做进一步更新,像之前有记录过包含LIST数据块的wav格式录音就是调试过程中发现遗漏点。
在此之前先整理一下常规音频文件头的基本结构,如下图:
可以看到在文件头中,不同位置的字节代表不同的数据块。相对来说,大部分情况一些数据块的信息是关注度不高的,像LIST数据块,而另一些诸如音频长度,格式,位长,采样率等等是关注度较高的,所以在处理过程中可以把需要的数据块定义成一个通用的结构,在解析后设置该结构对应的结果返回。对于wav文件来说,以chunk为基本存储单位,一个wav文件包含3个必要chunk和一个可选chunk,在文件中排列循序是:RIFF chunk ,Format chunk ,Fact chunk(可选),Data chunk。
所以在从前往后读取文件头并解析时,riff chunk和fm chunk时固定的。chunk划分如下:
根据其不同数据块的次序和长度以及字节长度,可以定义一份固定的riff和fm chunk的结构如下:
{ "name" : "riff_id", "index" : 0, "type" : "chars", "len" : 4, "value" : "RIFF" }, { "name" : "file_size", "index" : 1, "type" : "int", "len" : 4, "value" : 0 }, { "name" : "riff_type", "index" : 2, "type" : "chars", "len&#