私は初心者としてPCMに取り組んでいます。私はNaudioライブラリを使用しています。だから私はPCMデータの記憶がリトルエンディアンとビッグエンディアンに依存しているのだろうかと思っていました。もしそうでなければ、メモリアドレッシングはこのビッグエンディアンとリトルエンディアンに依存します.PCMデータは最下位バイトと最下位バイトリトルエンディアンとビッグエンディアンがそれらのバイトをメモリに格納する方法が違うので、ディスクからメモリにデータを読み込むと、配列を逆にしてshort
の値に変換するまで間違った値が生成されることがあります。Mp3ファイルのPCMデータの格納は、ビッグエンディアンとリトルエンディアンに依存しますか?
A非常に短いPCMデータ、ちょうど4バイトの::これは中でストレージが
Address Value
1000 90
1001 AB
1002 12
1003 CD
ある
はちょうどあなたが私が何を言っているか理解させるために、ここでは簡単な例でありますビッグエンディアン。 と次はあなたがPCM Naudioを使用して読んだときAddress Value
1000 CD
1001 12
1002 AB
1003 90
はので、これはバイトの反転が起こるんリトルエンディアンでストレージのですか? BitConverterは、それに応じて、リトルエンディアンであるかどうか、私がチェックしたので、私は一種の、このように、バイトの私の配列を逆:
Q:いビッグとリトルエンディアンの要約で
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:配列を逆にするには、if(BitConverter.IsLittleEndian)
文を使用する必要がありますか?