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 |

本文标签: 文件采样符号样点