5

Android:マイクからバッファを読み込んで、処理を実行できるようにしたいのですが、以下は私のコードです

int sampleRateInHz = 8000;// 44100, 22050 and 11025
        int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
        int audioFormat = AudioFormat.ENCODING_PCM_16BIT;

        //int bufferSize =11025 + 
        int bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz,channelConfig, audioFormat);


        short[] buffer = new short[bufferSize];

        AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz,channelConfig, audioFormat, bufferSize);

        if(audioRecord.getState()== AudioRecord.STATE_INITIALIZED){
            audioRecord.startRecording();
            Log.e("recording", "before");


            boolean flag = true;
            while (flag) {
                int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
                System.out.println(buffer);
            }

            audioRecord.stop();
            audioRecord.release();
        }
        Log.e("recording", "stopeed");


<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>

プログラムをテストしようとするたびに次のエラーが発生します

06-04 00:18:17.222: E/AudioRecord-Java(488): [android.media.AudioRecord] ネイティブ AudioRecord オブジェクトの初期化時のエラー コード -20。

4

3 に答える 3

7

この例外は、次の場合にも発生します。

  1. オーディオ録音がすでに進行中、または
  2. 録音が利用できない、または
  3. アプリに適切な権限がない例: アプリに記録権限がないなど
于 2013-05-17T07:14:46.980 に答える
1

私が理解していることから、 CHANNEL_CONFIGURATION_MONO は減価償却されており、バッファに読み込むときに代わりに CHANNEL_IN_MONO を使用する必要があります。AudioRecord オブジェクトのインスタンス化で同様の問題が発生しましたが、これが解決策であることが判明しました。

于 2012-06-03T19:06:45.787 に答える