Reading a single channel from a multi-channel wav file
我需要从wav文件中提取单个通道的样本,该文件最多包含12个(11.1格式)通道。我知道在普通的立体声文件中,样本是交错的,首先是左,然后是右,就像这样,
1 | [1st L] [1st R] [2nd L] [2nd R]... |
因此,要读取左侧频道,我会这样做,
1 2 3 4 | for (var i = 0; i < myByteArray.Length; i += (bitDepth / 8) * 2) { // Get bytes and convert to actual samples. } |
要获得正确的频道,我只需执行
但是,具有2个以上通道的文件使用什么顺序?
Microsoft已经创建了一个涵盖多达18个渠道的标准。根据他们的意见,wav文件需要有一个特殊的meta子块(在"可扩展格式"部分下),该子块指定一个"通道掩码"(
主频道布局
下面是MCL,即应交错现有通道的顺序以及每个通道的位值。如果不存在通道,则存在的下一个通道将"下拉"到丢失通道的位置,并且将使用其顺序号,但不会使用位值。 (无论通道是否存在,位值对于每个通道都是唯一的),
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Order | Bit | Channel 1. 0x1 Front Left 2. 0x2 Front Right 3. 0x4 Front Center 4. 0x8 Low Frequency (LFE) 5. 0x10 Back Left (Surround Back Left) 6. 0x20 Back Right (Surround Back Right) 7. 0x40 Front Left of Center 8. 0x80 Front Right of Center 9. 0x100 Back Center 10. 0x200 Side Left (Surround Left) 11. 0x400 Side Right (Surround Right) 12. 0x800 Top Center 13. 0x1000 Top Front Left 14. 0x2000 Top Front Center 15. 0x4000 Top Front Right 16. 0x8000 Top Back Left 17. 0x10000 Top Back Center 18. 0x20000 Top Back Right |
例如,如果通道掩码为