Android audiorecord实例失败

Android audiorecord实例失败,android,android-asynctask,fft,logcat,audiorecord,Android,Android Asynctask,Fft,Logcat,Audiorecord,我正在创建一个应用程序,用于检测通过麦克风播放的声音频率。 分析是在异步任务中完成的。当我尝试一个音符时,它就起作用了 然而,当我试着分析6个音符时,比如说来自不同吉他弦的音符,一个接一个(中间有一秒左右的延迟),它可能只捕捉到一个 这是我得到的一些LogCat输出: 11-22 19:50:04.333: ERROR/AudioHardwareMSM72XX(1296): [doRouting]sndDevice=0,mCurSndDevice=-1 11-22 19:50:04.333: E

我正在创建一个应用程序,用于检测通过麦克风播放的声音频率。 分析是在异步任务中完成的。当我尝试一个音符时,它就起作用了

然而,当我试着分析6个音符时,比如说来自不同吉他弦的音符,一个接一个(中间有一秒左右的延迟),它可能只捕捉到一个

这是我得到的一些LogCat输出:

11-22 19:50:04.333: ERROR/AudioHardwareMSM72XX(1296): [doRouting]sndDevice=0,mCurSndDevice=-1
11-22 19:50:04.333: ERROR/AudioHardwareMSM72XX(1296): [SKW]do_route_audio_rpc(0, 1, 0)
11-22 19:50:04.333: ERROR/AudioHardwareMSM72XX(1296): msm72xx_enable_audpp: 0x0000
11-22 19:50:04.333: ERROR/AudioHardwareMSM72XX(1296): [doRouting]sndDevice=0,mCurSndDevice=0
11-22 19:50:30.523: ERROR/AudioHardwareMSM72XX(1296): Cannot open /dev/msm_pcm_in errno: 16
11-22 19:50:30.533: ERROR/AudioRecord(23241): Could not get audio input for record source 1
11-22 19:50:30.533: ERROR/AudioRecord-JNI(23241): Error creating AudioRecord instance: initialization check failed.
11-22 19:50:30.533: ERROR/AudioRecord-Java(23241): [ android.media.AudioRecord ] Error code -20 when initializing native AudioRecord object.
我删除了所有重复的内容

这是我班的jist:

static AudioRecord recorder;
static short[] audioData;
static int bufferSize;
static int samplerate = 8000;         
static boolean recorded = false;

@Override
protected Integer doInBackground(params) {

bufferSize= AudioRecord.getMinBufferSize(samplerate,AudioFormat.CHANNEL_CONFIGURATION_MONO,
            AudioFormat.ENCODING_PCM_16BIT)*2; 

recorder = new AudioRecord (AudioSource.MIC,samplerate,AudioFormat.CHANNEL_CONFIGURATION_MONO,
            AudioFormat.ENCODING_PCM_16BIT,bufferSize); 

    audioData = new short [bufferSize]; //short array that pcm data is put into.

    int recordingLoops = 0;
    while (recordingLoops < 4 || recorded) {  //loop until recording is running

    if (recorder.getState()==android.media.AudioRecord.STATE_INITIALIZED)
        if(recorder.getRecordingState()==android.media.AudioRecord.RECORDSTATE_STOPPED)
              recorder.startRecording();                     
        else {         
           recorder.read(audioData,0,bufferSize); 

           getFrequencyFromAudiodata(audioData);

           recorded = true;
             }        
    recordingLoops++;  
}

    if (recorder.getState()==android.media.AudioRecord.RECORDSTATE_RECORDING) 
    {
        killRecorder();
    }

    return 1;
}
静态录音机;
静态短音频数据;
静态int缓冲区大小;
静态int采样器=8000;
静态布尔值=假;
@凌驾
受保护整数doInBackground(params){
bufferSize=AudioRecord.getMinBufferSize(采样器、AudioFormat.CHANNEL\u配置\u单声道、,
音频格式。编码\u PCM_16位)*2;
记录器=新的音频记录(AudioSource.MIC、samplerate、AudioFormat.CHANNEL\u CONFIGURATION\u MONO、,
音频格式。编码(PCM)(16位,缓冲区大小);
audioData=new short[bufferSize];//将pcm数据放入的短数组。
int-recordingLoops=0;
而(recordingLoops<4 | | recorded){//Loops直到录制运行
if(recorder.getState()==android.media.AudioRecord.STATE\u已初始化)
if(recorder.getRecordingState()==android.media.AudioRecord.RECORDSTATE\u已停止)
记录器。开始记录();
否则{
记录器。读取(音频数据,0,缓冲区大小);
从audioData(audioData)获取频率;
记录=真实;
}        
recordingLoops++;
}
if(recorder.getState()==android.media.AudioRecord.RECORDSTATE\u录制)
{
killRecorder();
}
返回1;
}
你们知道发生了什么事吗?我环顾了一下四周,但我似乎刚刚遇到人们说Android“充满了bug”

任何帮助都将不胜感激


谢谢,Ben,你可能会看到这个答案,它看起来像是在处理与录音相关的线程时考虑到的:


答案在于:

while (recordingLoops < 4 || recorded) 
并且仅当音频数据数组已充分填充时,才将recorder设置为true。
这意味着它将循环直到完美。谢谢你的帮助,戴夫

它似乎没有解决我的问题,记录器没有实例化。知道是什么引起的吗?
while (!recorded)