2016-10-23 4 views
2

Я работаю над PCM как новичком, и я использую библиотеку Naudio. Поэтому мне было интересно, что хранение данных PCM зависит от Little Endian и Big Endian, или если не зависит от хранения, тогда адресация памяти зависит от этого большого и маленького Endian, потому что данные PCM получили наименее значительный байт и, конечно же, самый значительный байт и поскольку я знаю, что Little Endian и Big Endian получили другой способ хранения этих байтов в памяти, поэтому чтение данных с диска в память может привести к неправильным значениям, пока я не отформатирую массив, а затем преобразую его в значение short.Сохраняет ли данные PCM файла Mp3 в зависимости от Big Endian и little Endian?

Просто, чтобы вы поняли, что я имею в виду, вот краткий пример:

A данные очень короткий PCM, из всего 4 байта:

Address Value 
1000 90 
1001 AB 
1002 12 
1003 CD 

Это хранение в ин большой эндиан. и нижеследующее является хранение в небольшой Endian

Address Value 
1000 CD 
1001 12 
1002 AB 
1003 90 

так ли это реверсирование байтов происходит, когда вы читаете PCM с помощью NAudio? потому что я проверяю, если 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); } 

Так что в итоге:

Q: Большой и Little Endian влияет на хранение байтов?

В: Нужно ли использовать инструкцию if(BitConverter.IsLittleEndian) для изменения массива?

ответ

2

Внутри файлов WAV, образцы PCM хранятся как малозначные.

Файлы MP3 - это сжатый аудиоформат, поэтому на самом деле не имеет смысла говорить, какую энтитантность он использует, но когда NAudio преобразуется в PCM, он снова будет малозначим.

Файлы AIFF обычно хранят образцы в формате big-endian, но, опять же, NAudio справится с этим для вас.

Не видя больше своего кода, трудно сказать, но я сомневаюсь, что вам нужно будет делать любой порядок байтов, заменяя себя, если вы обычно используете NAudio.