1

次のコードでマイクから生データを読み込もうとしています:

            short buffer[] = new short[AudioRecord.getMinBufferSize(8000,
                    AudioFormat.CHANNEL_IN_MONO,
                    AudioFormat.ENCODING_PCM_16BIT)];
            Log.d("O_o",""+buffer.length);
            AudioRecord rec = new AudioRecord(
                    MediaRecorder.AudioSource.MIC, 8000,
                    AudioFormat.CHANNEL_IN_MONO,
                    AudioFormat.ENCODING_PCM_16BIT, buffer.length);

            rec.startRecording();
            int read = rec.read(buffer, 0, buffer.length);
            for (int i = 0; i < read; i++) {
                Log.d("O_o",i+" "+buffer[i]);
            }
            rec.stop();
            rec.release();

しかし、バッファは常に 257 個の値でいっぱいです。どうしたの ?

UDP:初期値のように見えます。サイクルで read() を呼び出すと、通常の値になります。

4

1 に答える 1

1

あなたは間違いなくこの質問と答えを見てください。それはあなたのコードを非常に改善するであろういくつかのコードを示しています。

基本的に、あなたの問題はあなたがそれを同期的に読もうとしているということです。オーディオプロセスは通常非同期で実装する必要があり、一度に256バイトサイズのオーディオチャンクを取得します。

于 2013-02-23T00:39:37.710 に答える