AudioFlinger无法创建记录轨道,状态:-1,需要帮助ifx

时间:2013-12-19 22:32:56

标签: android audiorecord

public class AudioRecorderActivity extends Activity {

  private static final int RECORDER_SAMPLERATE        = 8000;
  private static final int RECORDER_CHANNELS          = AudioFormat.CHANNEL_IN_MONO;
  private static final int RECORDER_AUDIO_ENCODING    = AudioFormat.ENCODING_PCM_16BIT;
  private AudioRecord recorder                        = null;
  private static final String TAG                     = "AudioRecorderActivity";
  short[][]   buffers                                 = new short[256][160];
  int         ix                                      = 0;
  private boolean     stopped                         = false;

  private void startRecording() {

    android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
    try {
      int N = AudioRecord.getMinBufferSize (  
                          RECORDER_SAMPLERATE, 
                          RECORDER_CHANNELS, 
                          RECORDER_AUDIO_ENCODING) * 20;

      recorder = new  AudioRecord(AudioSource.MIC,
                    RECORDER_SAMPLERATE, 
                    RECORDER_CHANNELS,
                    RECORDER_AUDIO_ENCODING,N );        

      recorder.startRecording();

      while(!stopped) {
        short[] buffer = buffers[ix++ % buffers.length];      
        N = recorder.read(buffer,0,buffer.length);
      }

    } 
    catch(Throwable x) { 
      Log.v(TAG,"Error reading voice audio",x);
      x.printStackTrace();
    } 
    finally { 
      stopped = true;
      stopRecording();
    }    
  }  
}

问题:虽然代码段基于StackOverflow的一个例子,但它无法正常工作 请让我知道可能是什么错误?

以下是错误消息

12-20 03:44:32.271: E/AudioRecord(224): AudioFlinger could not create record track, status: -1
12-20 03:44:32.271: E/AudioRecord-JNI(224): Error creating AudioRecord instance: initialization check failed.
12-20 03:44:32.271: E/AudioRecord-Java(224): [ android.media.AudioRecord ] Error code -20 when initializing native AudioRecord object.

5 个答案:

答案 0 :(得分:38)

为AndroidManifest.xml添加record_audio权限

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

答案 1 :(得分:11)

在最近的Android版本中,似乎在更改清单中的权限后从Android Studio中删除apk实际上并未更改应用设置中的权限。这就是上述答案对我有用的原因。我在清单中构建了一个没有RECORD_AUDIO权限的应用程序,并在我的日志中看到了权限错误(以及OP中的错误)。我将权限添加到我的清单并重新启动设备上的应用程序,日志中的权限错误不再存在,但我仍然在OP中遇到错误。我去了我的系统,应用程序,应用程序管理器 - &gt; MyApp - &gt;权限,并看到Record Audio已列出但仍然关闭。手动转动它固定它。

我想(但尚未确认)如果我首先在我的清单中建立了正确的权限,那么这对我来说就是有效的。或者,从设备卸载我的应用程序,然后重新安装,也可能会修复,但我也没有尝试过。

答案 2 :(得分:3)

预先Marshmallow版本的android解决方案与Olexij提到的相同......

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

但是,在启动Android API 23(Marshmallow)时,这被认为是危险的权限,您必须在使用它的Activity中请求此权限。 戴夫的经历就是这样的结果;如果你在Manifest中声明了权限但是没有在运行时请求(至少第一次),那么它将在应用程序管理器中的应用程序权限中显示,但将保持关闭状态。

检查...

答案 3 :(得分:2)

API 23(Marshmallow)的解决方案很简单。你必须设置&#34; targetSdkVersion 22&#34;在获得波纹管权限后,在bulid.gradle文件中。

答案 4 :(得分:0)

给予明确许可为我解决了这个问题。

尝试以下步骤

Android Version 7.0
Settings -> Applications -> <MyAPP> -> Permissions 
-> [Turn Camera and Microphone ON]