我作为初学者正在使用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)
语句来反转数组?
答案 0 :(得分:2)
在WAV文件中,PCM样本存储为little-endian。
MP3文件是一种压缩的音频格式,因此说它使用的是什么字节顺序真的没有意义,但是当NAudio转换为PCM时,它将再次成为小端。
AIFF文件通常将样本存储为big-endian,但同样,NAudio将为您处理此问题。
如果您没有看到更多代码,那么很难说,但如果您正常使用NAudio,我怀疑您是否需要自行交换任何字节顺序。