1

よくわかりません。Android で MIC からサウンドを録音する必要があったため、次のコードを使用しました。

recorder = new AudioRecord(AudioSource.MIC, 44100,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT, N);
buffer = new byte[N];
//...
recorder.read(buffer, 0, N);

私たちが知っているように、バイト配列は -128 から +128 までの値を保存できますが、16 ビットのサウンドはより多くのストレージ (short と int など) を必要としますが、驚くべきことに Java と Android には、record記録されたデータをバイト配列に保存する方法があります。

それはどのように可能ですか?私は何が欠けていますか?

4

1 に答える 1

1

バイトをショット整数と考えています。それはちょうど8ビットです。1000111011100000 (16 ビット) を格納する必要がありますか? 最初のバイトは 10001110、2 番目のバイトは 11100000 です。これらのビットを数値として解釈できるかどうかは、ここでは関係ありません。より一般的な方法では、byte[] は通常、バイナリの「生データ」を処理する方法です (オーディオ ストリーム、暗号化されたコンテンツ、またはビット ストリームのように扱うその他のものとします)。

16 ビットの「ワード」が n 個ある場合、それを格納するには 2n バイトが必要になります。バイト 0 はワード 0 の下位 (または上位) 部分になり、バイト 1 はワード 0 の残りの部分になり、バイト 0 はワード 1 の下位 (または上位) 部分になります...

于 2012-11-30T00:16:39.120 に答える