2014-11-13 2 views
0

오디오 데이터를 바이트 배열에 녹음하고 동시에 기록 된 데이터를 분석하기 위해 Androroid의 AudioRecord 객체를 사용하려고합니다. 하지만 어떻게해야할지 확신이 서지 않습니다. 바이트 배열을 직접 사용하면 응용 프로그램이 충돌합니다. 내가 분석 스레드에 대한 입력으로 바이트 배열을 필요로 상대적으로 안드로이드 개발에 새로운 오전과 나는이 주제에 대한 도움을 주셔서 감사합니다. 감사합니다.AudioRecord : 오디오 데이터를 지속적으로 녹음하고 동시에 분석합니다.

byte[] data; 
public void Record()throws IOException{ 
    int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING); 
    AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 
      RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize); 
    recorder.startRecording();   
    isRecording = true; 
    boolean flag = true; 
    data = new byte[bufferSize]; 
    while(isRecording){ 
     try {    
      int result = recorder.read(data, 0, bufferSize);     
      if(flag){ 
       Thread analyseThread = new Thread(new Runnable() { 
        @Override 
        public void run() { 
         theAnalysingFunction(); 
        } 
       },"AudioRecorder Thread"); 
       analyseThread.start(); 
       flag=false; 
      } 
      if (AudioRecord.ERROR_INVALID_OPERATION !=result) { 

      } else if (result == AudioRecord.ERROR_INVALID_OPERATION) { 
       Log.e("Recording", "Invalid operation error"); 
       break; 
      } else if (result == AudioRecord.ERROR_BAD_VALUE) { 
       Log.e("Recording", "Bad value error"); 
       break; 
      } else if (result == AudioRecord.ERROR) { 
       Log.e("Recording", "Unknown error"); 
       break; 
      } 
     } catch (Exception e) { 
      Log.i("Error", "AudioRecord error"); 

     } 
    }  
} 
public void theAnalysingFunction(){ 
    // 
    //Analyse the byte array named data 
    // 
} 

답변

0

이것은 멀티 스레딩입니다. 버퍼를 분석하려고합니다. 다른 스레드가이를 동시에 변경합니다.

충돌에 대해서는 U가 바이트 버퍼를 사용하는 경우 인코딩에 ENCODING_PCM_8BIT을 사용하는지 확인하십시오.

관련 문제