Mp3文件的PCM数据存储是否依赖于Big Endian和Little Endian?

时间:2016-10-23 18:55:24

标签: c# naudio endianness

我作为初学者正在使用PCM,我正在使用Naudio库。所以我想知道PCM数据的存储是否依赖于Little Endian和Big Endian,或者如果不存储依赖于那么存储器寻址是否取决于这个Big和Little Endian,因为PCM数据得到了最低有效字节和当然最重要的字节而且我知道Little Endian和Big Endian有不同的方式将这些字节存储到内存中,因此从磁盘读取数据到内存可能会产生错误的值,直到我反转数组然后将其转换为short值。

为了让你明白我在说什么,这是一个简短的例子:

非常短的PCM数据,只有4个字节:

Address Value
1000    90
1001    AB
1002    12
1003    CD

这是大端的存储。 以下是Little Endian中的存储

Address Value
1000    CD
1001    12
1002    AB
1003    90

当您使用Naudio读取PCM时,会发生字节反转吗?因为我检查BitConverter是否是Little Endian,根据我反转我的字节数组,有点像这样:

                    Int16 Left_Sample = BitConverter.ToInt16(Buffer, i);
                    Int16 Right_Sample = BitConverter.ToInt16(Buffer, i + 2);
                    Int16 Final_Sample = (Int16)(0.5f * ((float)Left_Sample + (float)Right_Sample));
                    byte[] Final_Byte = BitConverter.GetBytes(Final_Sample);
                    if (BitConverter.IsLittleEndian){ Array.Reverse(Final_Byte); }

总结如下:

问:Big和Little Endian是否会影响字节存储?

问:我是否需要使用if(BitConverter.IsLittleEndian)语句来反转数组?

1 个答案:

答案 0 :(得分:2)

在WAV文件中,PCM样本存储为little-endian。

MP3文件是一种压缩的音频格式,因此说它使用的是什么字节顺序真的没有意义,但是当NAudio转换为PCM时,它将再次成为小端。

AIFF文件通常将样本存储为big-endian,但同样,NAudio将为您处理此问题。

如果您没有看到更多代码,那么很难说,但如果您正常使用NAudio,我怀疑您是否需要自行交换任何字节顺序。