2011-01-11 253 views
11

在我的應用程序中,我需要將麥克風的聲音直接指向揚聲器。沒有其他行動。 我找到了一種通過播放文件和關閉揚聲器來將聲音從麥克風指向耳機的方法。所以我猜揚聲器可以工作類似。但是我不知道如何擺脫播放文件的事情。謝謝。如何在Android上直接從麥克風播放聲音?

speaker() { 
    m_audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    m_audioManager.setSpeakerphoneOn(true); // not needed I think 
    //m_audioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL); earpiece need this? 
    setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); 
    m_audioManager.setMode(AudioManager.MODE_IN_CALL); 

回答

14

使用AudioRecord & AudioTrack到&播放(改變記錄來..._音樂,如果揚聲器所需

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); 
    arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize); 
    atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize, AudioTrack.MODE_STREAM); 
    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); 
       } 
    } 
+0

嘿A117,你可以請參考以下鏈接http://stackoverflow.com/questions/ 10012009 /我怎麼可以播放聲音時,設備接收傳入呼叫在Android,並建議我你的代碼是用來滿足我的要求?提前致謝。 – anddev 2012-04-05 07:19:37

相關問題