2011-03-14 74 views
1

我在记录音频(实时监控)时得到0.3-0.5秒的延迟。这里是我的代码:AudioRecord延迟(Android)GT-i5700

代码从这里:Android - Getting audio to play through earpiece

公众的声音类别扩展活动{

private boolean isRecording; 
private AudioManager am; 
private int count; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    am.setMicrophoneMute(true); 

    while(count <= 1000000){ 
    Record record = new Record(); 
    record.run(); 
    count ++; 
    Log.d("COUNT", "Count is : " + count); 
    } 
} 

public class Record extends Thread 
{ 

     static final int bufferSize = 200000; 
     final short[] buffer = new short[bufferSize]; 
     short[] readBuffer = new short[bufferSize]; 

     public void run() { 
     isRecording = true; 
     android.os.Process.setThreadPriority 
     (android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); 

     int buffersize = AudioRecord.getMinBufferSize(11025, 
     AudioFormat.CHANNEL_CONFIGURATION_MONO, 
     AudioFormat.ENCODING_PCM_16BIT); 

         AudioRecord arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 
             11025, 
             AudioFormat.CHANNEL_CONFIGURATION_MONO, 
             AudioFormat.ENCODING_PCM_16BIT, 
             buffersize); 

         AudioTrack atrack = new AudioTrack(AudioManager.STREAM_MUSIC, 
             11025, 
             AudioFormat.CHANNEL_CONFIGURATION_MONO, 
             AudioFormat.ENCODING_PCM_16BIT, 
             buffersize, 
             AudioTrack.MODE_STREAM); 


         am.setRouting(AudioManager.MODE_NORMAL,1, 
          AudioManager.STREAM_MUSIC); 


         int ok = am.getRouting(AudioManager.ROUTE_EARPIECE); 
         Log.d("ROUTING", "getRouting = " + ok); 
         setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); 
         //am.setSpeakerphoneOn(true); 
         Log.d("SPEAKERPHONE", "Is speakerphone on? : " + am.isSpeakerphoneOn()); 
         am.setSpeakerphoneOn(false); 
         Log.d("SPEAKERPHONE", "Is speakerphone on? : " + am.isSpeakerphoneOn()); 
         atrack.setPlaybackRate(11025); 

         byte[] buffer = new byte[buffersize]; 
         arec.startRecording(); 
         atrack.play(); 

         while(isRecording) { 
           arec.read(buffer, 0, buffersize); 
           atrack.write(buffer, 0, buffer.length); 
         } 

         arec.stop(); 
         atrack.stop(); 
         isRecording = false; 
     } 
} 

}

你能帮助我吗? (对不起,我的英语)

回答