2013-04-02 61 views
5

這是我在Stackoverflow上的第一篇文章。 我嘗試在Android智能手機上路由音頻過去幾天,但我沒有找到正確執行此操作的功能。Android - 在智能手機和藍牙模塊之間路由音頻的功能

它用於製造藍牙嬰兒手機。

我需要在智能手機和藍牙模塊之間進行路由。藍牙模塊最初用於製造手機,汽車免提,無線揚聲器......

我與項目音頻端的A2DP和HFP(免提)配置文件進行通信。

我可以在設備之間建立「sco」連接(與音頻藍牙交換機連接使用)並從藍牙模塊獲取音頻。但是當「sco」連接正在工作時,我無法再使用智能手機上的揚聲器和麥克風。

我希望找到一種解決方案,以便在我的智能手機上使用音頻,並同時在我的藍牙模塊上使用音頻。

我在http://developer.android.com/index.html上搜索了路由音頻的功能。

AudioManager類有一些功能來路由音頻,如setRouting或setParameters,但我還有任何結果。 http://developer.android.com/reference/android/media/AudioManager.html

你可以看到我用它來得到babyphone側(藍牙模塊側)音頻下面的代碼:

boolean isRecording=true; 
int buffersize = 8000; 
byte[] buffer = new byte[buffersize]; 

//audio configuration and SCO Bluetooth connection. 
AudioManager aManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
android.os.Process.setThreadPriority(
      android.os.Process.THREAD_PRIORITY_URGENT_AUDIO); 
aManager.startBluetoothSco(); 
aManager.setBluetoothScoOn(true); 
aManager.setMode(AudioManager.MODE_IN_COMMUNICATION); 

//AudioRecord configuation for recording audio from babyphone. 
AudioRecord arec = new AudioRecord(
      MediaRecorder.AudioSource.VOICE_COMMUNICATION, 
      8000, 
      AudioFormat.CHANNEL_IN_MONO, 
      AudioFormat.ENCODING_PCM_16BIT, 
      buffersize); 

//AudioTrack configuation for sending audio to smartphone speaker.     
AudioTrack atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
       8000, 
       AudioFormat.CHANNEL_OUT_MONO, 
       AudioFormat.ENCODING_PCM_16BIT, 
       buffersize, 
       AudioTrack.MODE_STREAM); 

atrack.setPlaybackRate(8000); 

//start audio recording and playing. 
arec.startRecording(); 
atrack.play(); 

while(isRecording) { 
    arec.read(buffer, 0, buffersize); 

    atrack.write(buffer, 0, buffer.length); 
} 

arec.stop(); 
atrack.stop() 

如果我不能音頻路由到智能手機的揚聲器,並使用了「上海合作組織」的連接同時從嬰兒手機側的麥克風取回音頻,我需要儘快知道它改變我的項目的方向。

如果可能的話,智能手機側的嬰兒電話程序需要在所有最近使用的智能手機上運行。

英語不是我的第一語言,所以有些句子可能不正確。

我願意接受任何解決方案。

+0

運氣好嗎?我試圖將藍牙耳機的麥克風用作擴聲系統,換句話說,播放應該在插孔(輸出)上,(我猜測其他藍牙設備是不可能的)。這似乎是不可能tho – Diego

回答

1

A2DP用於媒體播放,並且是單向的。 SCO用於通過BT進行語音通話/ VoIP /錄音,並且是雙向的,但質量較低。

會發生什麼(在大多數/我曾經使用過的所有設備至少)當您啓用BluetoothSco和模式設置爲IN_CALLIN_COMMUNICATIONSTREAM_VOICE_CALL將被路由到BT_SCO輸出設備,輸入設備將根據輸出設備選擇(由於模式),這意味着BT_SCO輸入設備。

我的建議 - 雖然我不能保證它可以在每個設備上工作 - 是而不是將模式設置爲IN_COMMUNICATIONsetBluetoothScoOn(true)調用將在內部將用於記錄的「強制使用」設置設置爲BT_SCO,並將其與使用DEFAULTVOICE_RECOGNITION AudioSource相結合,應選擇BT_SCO麥克風作爲記錄設備。
但是,同時錄製BT_SCO和內置麥克風可能無法以便攜方式進行錄製。
對於輸出,您可以使用RING,ALARMMUSIC流類型,在未進行語音呼叫時應將其路由到內部揚聲器而不是BT_SCO。

+0

@ user2235813也許AudioSource.CAMCORDER可以做的伎倆來打開使用內部麥克風的第二個錄音機。 – Schlangi

相關問題