2016-10-23 7 views
2

私は初心者として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)文を使用する必要がありますか?

答えて

2

WAVファイルの中で、PCMサンプルはリトルエンディアンとして保存されます。

MP3ファイルは圧縮されたオーディオ形式なので、どのエンディアンが使用されているのかは分かりませんが、NAudioがPCMに変換するとリトルエンディアンになります。

通常、AIFFファイルはビッグエンディアンとしてサンプルを保存しますが、NAudioもこれを処理します。

あなたのコードをもっと見ることなく、言いにくいですが、通常はNAudioを使用している場合は、バイトオーダーを自分でスワップする必要があります。

関連する問題