0

AudioRecordと16ビットエンコーディングを使用して電話のマイクから録音するアプリケーションを作成し、録音を再生することができます。互換性の理由から、8ビットエンコーディングを使用する必要がありますが、そのエンコーディングを使用して同じプログラムを実行しようとすると、無効なオーディオ形式が取得され続けます。私のコードは:

int bufferSize = AudioRecord.getMinBufferSize(11025, 
AudioFormat.CHANNEL_CONFIGURATION_MONO, 
AudioFormat.ENCODING_PCM_8BIT);
AudioRecord recordInstance = new AudioRecord(
MediaRecorder.AudioSource.MIC, 11025,
 AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,
bufferSize);

誰もが問題が何であるか知っていますか?ドキュメントによると、AudioRecordは8ビットエンコーディングが可能です。

4

1 に答える 1

0

ソースを見てみるとリトルエンディアンしか対応していないのに、Androidはビッグエンディアンで書き込んでいます。そのため、リトルエンディアンに変換してから 8 ビットに変換する必要があります。これは私にとってはうまくいきました。おそらく2つを組み合わせることができます:

for (int i = 0; (offset + i + 1) < bytes.length; i += 2) {
    lens[i] = bytes[offset + i + 1];
    lens[i + 1] = bytes[offset + i];
}
for (int i = 1, j = 0; i < length; i += 2, j++) {
    lens[j] = lens[i];
}

これは、エンディアンなしの単純なバージョンです

for (int i = 0, j = 0; (offset + i) < bytes.length; i += 2, j++) {
    lens[j] = bytes[offset + i];
}
于 2010-03-11T17:47:39.610 に答える