admin管理员组文章数量:1535376
2024年6月10日发(作者:)
Wave文件的格式非常混乱。如果把wave文件的格式比作盆汤,毫无疑问有太多的
厨师在完全未经协调的情况下,向这道汤里添加了太多的佐料。Wave文 件的格式规范中,
有太多相互独立而且缺乏协调的组织向其中增加内容。结果是wave文件中有很多chunk
是在重复别的chunk中的数据,而且通常是用 一种完全不同的方式。下面的讲解中我们
尽量把注意力集中于wave文件中那些最经常出现的chunk上。
____________________________
| RIFF WAVE Chunk |
| groupID = 'RIFF' |
| riffType = 'WAVE' |
| __________________ |
| | Format Chunk | |
| | ckID = 'fmt ' | |
| |__________________| |
| __________________ |
| | Sound Data Chunk | |
| | ckID = 'data' | |
| |__________________| |
|__________________________|
采样点和采样帧
解释一个Wave文件内容的过程很大部分围绕在采样点和采样帧这两个概念上。一个
采样点是代表了给定声音在给定的时间点上的一个样本值。如果我们假设采用的是PCM格
式的wave文件,并且样点精度大于8bit,每一个采样点被保存为一个占用9-32bit的2
的补码表示的数值。样点精度值保存在 Format chunk中的wBitsPerSample属性中。例
如一个16bit波形中的一个采样点是一个线性的16bit有符号整数,取值范围- 32768~
32767.但是8bit的波形文件中,每一个样本点是一个线性的无符号数,范围0~255。上
述带符号和无符号表示方法的差异,又是微软员工的杰作。
绝大多数cpu的读写指令都是真对8bit的“字节”的,如果一个波形文件的采样点精
度不是8的整数倍,它必须被凑到最接近的8的整数倍。1- 8bits/sample的波形文件
用8bit保存一个样本,9-16bits/sample的波形文件用16bit保存一个样本……依此类推。
此外,数据比特是左对齐的,多余的填充bit都被设置为0。例如一个12bit的采样点,
在wave文件中占用16bits,所以这两个字节的4-15号bit是数据,0-3号bit是填充
的0。下图就是一个占据12bit的样点1在内存中的情况:
| 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 |
版权声明:本文标题:WAVE文件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1717993877a632244.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论