2

次のチュートリアルを使用して、録音アプリを作成しました。

テスト デバイス (LG P970 Optimus Black) で起動すると、次のエラー コードが表示されます。

 Error creating AudioRecord instance: initialization check failed.
 Error code -20 when initializing native AudioRecord object.

マニフェストに許可を追加してメソッドを使用するなど、いくつかの「解決策」を見つけました。しかし、これらはすべてソースコードにすでに含まれていました。RECORD_AUDIO.release()

この問題の他の解決策はありますか? それはデバイスでしょうか?

4

4 に答える 4

2

デフォルトとしてAudioRecordのオーディオソースを変更します.....私はこの問題を使用して解決することができました

MediaRecorder.AudioSource.DEFAULT 
于 2015-01-25T07:55:36.520 に答える
2

このエラー Like this. を解決しました。これは、AudioRecors オブジェクトをこのように呼び出すことができるためです。

private AudioRecord findAudioRecord() {
        // TODO Auto-generated method stub
           for (int rate : mSampleRates) {

               for (short audioFormat : new short[] { AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT }) {

                   for (short channelConfig : new short[] { AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO }) {

                       try {

                           Log.d("AudiopRecording", "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: "

                                   + channelConfig);

                           int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);

                           if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {

                               // check if we can instantiate and have a success

                               AudioRecord recorder = new AudioRecord(AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);

                               if (recorder.getState() == AudioRecord.STATE_INITIALIZED)

                                   return recorder;

                           }

                       } catch (Exception e) {

                           Log.e("AudiopRecording", rate + "Exception, keep trying.",e);

                       }

                   }

               }

           }


        return null;
    }
于 2013-10-21T10:46:32.240 に答える
1

このエラーは、AudioRecord コンストラクターで指定したバッファー サイズが原因で発生します。

bufferSizeInBytes 録音中にオーディオ データが書き込まれるバッファの合計サイズ (バイト単位)。新しいオーディオ データは、このサイズよりも小さいチャンクでこのバッファーから読み取ることができます。AudioRecord インスタンスを正常に作成するために必要な最小バッファ サイズを決定するには、getMinBufferSize(int, int, int) を参照してください。getMinBufferSize() より小さい値を使用すると、初期化に失敗します。

そのため、常に AudioRecord を次のように使用します。

     try {

       int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);



       AudioRecord recorder = new AudioRecord(AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);

                       if (recorder.getState() == AudioRecord.STATE_INITIALIZED){

                               return recorder;

                       }

       } catch (Exception e) {

       Log.i("AudioRecording", "Error in Audio Record");

       }
于 2014-10-01T10:55:11.963 に答える