2012-01-22 5 views
0

오디오 녹음을하고 동시에 내 안드로이드 응용 프로그램에서 재생하려고하는데, 처음에는 잘 작동하는 코드가 충돌합니다. 아래의 오류가 나타납니다. 아무도이 문제를 해결하거나 해결 방법을 제안 할 수 있습니까?오디오 녹음 및 루프백 문제

Error : 
DALVIK THREADS: 
    (mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0) 
    "main" prio=5 tid=1 NATIVE 
     | group="main" sCount=1 dsCount=0 obj=0x40022178 self=0xce48 
     | sysTid=3508 nice=-19 sched=0/0 cgrp=[fopen-error:2] handle=-1345006496 
     | schedstat=(94146739 97717292 625) 
      at android.media.AudioTrack.native_write_byte(Native Method) 
     at android.media.AudioTrack.write(AudioTrack.java:912) 
     at com.brcm.factorymode.audioloop.speaker.RecordNPlay.loopback(RecordNPlay.java:102) 
     at com.brcm.factorymode.audioloop.speaker.RecordNPlay$1.run(RecordNPlay.java:131) 
     at com.brcm.factorymode.audioloop.speaker.RecordNPlay.do_loopback(RecordNPlay.java:136) 
     at com.brcm.factorymode.audioloop.speaker.RecordNPlay.onCreate(RecordNPlay.java:53) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
     at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:130) 
     at android.app.ActivityThread.main(ActivityThread.java:3683) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 

아래에서 사용하는 코드를 확인하십시오.

 public void loopback() { 
      buffer = new byte[BUF_SIZE]; 
      // Prepare the AudioRecord & AudioTrack 
      Log.e("LOG", "Entered into loopback function...."); 

      try { 

       buffersize = AudioRecord.getMinBufferSize(SAMPLE_RATE,AudioFormat.CHANNEL_IN_MONO, 
           AudioFormat.ENCODING_PCM_16BIT); 

      } catch (Throwable t) { 
       Log.e("Audio", "Buffer size failed"); 
      } 

      if (buffersize <= BUF_SIZE) { 
       buffersize = BUF_SIZE; 
      } 
      try { 
       //findAudioRecord(); 
       m_record = new AudioRecord(MediaRecorder.AudioSource.MIC, 
         SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, 
         AudioFormat.ENCODING_PCM_16BIT, buffersize * 1); 

       m_track = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
         SAMPLE_RATE, AudioFormat.CHANNEL_OUT_MONO, 
         AudioFormat.ENCODING_PCM_16BIT, buffersize * 1, 
         AudioTrack.MODE_STREAM); 

       m_track.setPlaybackRate(SAMPLE_RATE); 
       Log.e("LOG", "INITIALIZATIONS DONE...."); 

      } catch (Throwable t) { 
       Log.e("Audio", "Audio Failed"); 
      } 
      if(m_record!=null) 
      if (m_record.getState() == AudioRecord.STATE_INITIALIZED) 
       m_record.startRecording(); 
      if(m_track!=null) 
      if (m_track.getState() == AudioTrack.STATE_INITIALIZED) 
       m_track.play(); 
      try { 
       int i = 0; 
       while (i<=10) { 
       // buffer=new byte[buffersize]; 
        m_record.read(buffer, 0, buffersize); 
        m_track.write(buffer, 0, buffersize); 
        //m_track.flush(); 

    /*    try{ 
        Thread.sleep(200); 
        }catch(Exception e){} 
    */    
        i++; 
       } 
       if (i>10) { 
        buffer = null; 
         m_record.stop(); 
        m_track.stop(); 
        i=0; 
       } 
      } catch (Exception e) { 
       Log.e("Em_recordRROR", "exception: " + e.getLocalizedMessage()); 
      } 

      Log.i("D2Record", "loopback exit"); 
     } 

     private void do_loopback() { 

      m_thread = new Runnable() { 
       public void run() { 
        android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); 
        m_isRun = true; 

        loopback(); 

       } 
      }; 

      m_thread.run(); 
     } 

답변

0

이 문제는 해결되었습니다. 문제는 장치 소스에 있기 때문에 많은 다른 장치에서 테스트했습니다. 잘 작동하고 있습니다.

+0

plz 내 질문에 좀 봐 비슷한 문제가 나를 도와주세요 http://stackoverflow.com/questions/9413998/live-audio-recording-and-playing-in-android – aProgrammer