2013-03-11 115 views
2

我用下面的教程製作錄音應用程序:爲什麼Android AudioRecord初始化失敗?

當我啓動我的測試設備(LG P970 Optimus的黑色),我得到一個錯誤代碼上:

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

我發現了一些「解決方案「就像添加到清單RECORD_AUDIO權限 並使用.release()方法。但所有這些東西都已經在源代碼中準備好了。

這個問題的其他解決方案?它可能是設備嗎?

+0

http://stackoverflow.com/questions/4843739/audiorecord-object-not-initializing – 2013-03-11 09:25:14

+0

謝謝,但我不能評論@Dustin在這個主題的解決方案。我試過這個解決方案,現在我得到錯誤getMinBuferSize()無效的音頻格式 – user2043332 2013-03-11 11:09:19

+0

你不能使用8位getMinBufferSize()最後我檢查。使用16位而不是 – alrikai 2013-10-11 23:16:18

回答

2

我已經解決了這個錯誤像this.becuse我們可以像這樣調用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; 
    } 
+0

完美答案100%正常工作。偉大的工作bro \ – 2017-11-16 07:13:00

1

這個錯誤你是因爲你在AudioRecord構造函數中指定緩衝區的大小得到。

bufferSizeInBytes記錄過程中寫入音頻數據的緩衝區的總大小(以字節爲單位)。新的音頻數據可以以比這個尺寸更小的塊讀取。請參閱getMinBufferSize(int,int,int)以確定成功創建AudioRecord實例所需的最小緩衝區大小。 使用小於getMinBufferSize()的值將導致初始化失敗。

這就是爲什麼總是用AudioRecord這樣的:在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"); 

     } 
2

改變音頻源作爲默認..... 我能夠通過使用

MediaRecorder.AudioSource.DEFAULT 
0
來解決這個問題

這可能是因爲您的Android設備阻止了您的應用權限。轉到Android設備的設置>權限> Your_App並允許錄製音頻。這對我來說雖然解決了問題