AudioFormatオーディオフォーマット

2214 ワード

一、AndroidとPCの間でオーディオデータを伝達して受信する場合、まずオーディオデータのフォーマットが一致することを保証します。javaでAudioFormat類のオーディオフォーマットを提供します。以下は著者が使うコンストラクションです。
public AudioFormat(float sampleRate,
                   int sampleSizeInBits,
                   int channels,
                   boolean signed,
                   boolean bigEndian)
線形PCM符号化と所与のパラメータを持つ構造  AudioFormat。フレームサイズを各チャンネルのサンプルを含むバイト数に設定し、フレームレートをサンプルレートに設定します。
パラメータ:sampleRate - 毎秒のサンプル数sampleSizeInBits - 各サンプルのビット数channels - チャンネル数(モノラル1つ、ステレオ2つ)signed - データには符号があるか、符号がないかを示します。bigEndian - ビット順に単一のサンプル中のデータを格納するかどうかを示す(false little-endianを意味します。
二、このコンストラクションの中で、他のパラメータはよく分かります。bigEndanとlittleEndanバイトだけが記憶する順番が分かりません。インターネットで調べて、説明します。
  来た:http://blog.csdn.net/sunshine1314/article/details/2309655
バイト順の問題になると、必ず二つのCPUグループが絡む。それはMotoolaのパワーPCシリーズCPUとIntelのx 86シリーズのCPUです。PowerPCシリーズはbig endian方式でデータを格納していますが、x 86シリーズはlittle endian方式でデータを格納しています。一体何がbig endianで、何がlittle endianですか?     big endianとは、低アドレスで最も有効なバイト(MSB)を格納することであり、little endianは低アドレスで最も有効なバイト(LSB)を保存することである。
     文字で説明するのは抽象的かもしれませんが、次は画像で説明します。例えば、デジタル0 x 123455678の2つの異なるバイト順のCPUにおける記憶順序は、以下の通りである。Big エンディアン
   低アドレス                                            アドレス   ----------------------------------------->    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |     12     |      34    |     56      |     78    |    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+リトルエンディアン
   低アドレス                                            アドレス   ----------------------------------------->    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    |     78     |      56    |     34      |     12    |    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
現在の大多数のOSはwindows、linuxなどLittle-endianを使ってバイトを記憶しています。Mac、OSはBig-endianを使ってバイトを記憶しています。すべてのネットワークプロトコルは、ビット・エンディアンを使用してデータを伝送するものであり、2台が異なるバイト順のホスト通信を行う場合は、データを送信する前に、バイト順の変換を経てネットワーク・バイト順に変換してから送信しなければならない。
三、作者はAndroidとWindows 7システムのPCの間で音声対話をする時、big-endianを使って話の内容を聞くことができなくて、little-endianを使うのは成功で、具体的な原因はまだ完全に理解していません。後でゆっくり勉強します。
AudioFormat format=new AudioFormat(8000、16、1、true、false);