2013-04-02 10 views
5

Questo è il mio primo post su Stackoverflow. Cerco di instradare l'audio su smartphone Android negli ultimi giorni ma non trovo la funzione per farlo correttamente.Android - Funzione per instradare l'audio tra smartphone e modulo bluetooth

È per la creazione di un babyphone Bluetooth.

Ho bisogno di fare un routing tra smartphone e modulo Bluetooth. Il modulo Bluetooth è inizialmente utilizzato per rendere Handset, auto Handfree, altoparlante wireless ...

Io comunico con i profili A2DP e HFP (Handfree) per il lato audio del progetto.

È possibile stabilire una connessione "sco" (connessione utilizzata con gli scambi Bluetooth audio) tra i dispositivi e ripristinare l'audio dal modulo Bluetooth. Ma quando una connessione "sco" funziona, non posso più usare l'altoparlante e il microfono sul mio smartphone.

Spero di trovare una soluzione per utilizzare l'audio sul mio smartphone e nello stesso tempo l'audio sul mio modulo Bluetooth.

Ho cercato su http://developer.android.com/index.html per una funzione per indirizzare l'audio.

La classe AudioManager ha alcune funzioni per indirizzare l'audio come setRouting o setParameters ma non ho ancora alcun risultato. http://developer.android.com/reference/android/media/AudioManager.html

Potete vedere qui sotto il codice che uso per ottenere l'audio dal lato interfono (lato modulo Bluetooth):

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() 

Se non posso percorso audio dell'altoparlante smartphone e utilizzare la connessione “sco” nel Allo stesso tempo per riprendere l'audio dal microfono sul lato babyphone, ho bisogno di conoscerlo il prima possibile per cambiare la direzione del mio progetto.

Il programma babyphone sul lato smartphone deve essere eseguito su tutti gli smartphone recenti, se possibile.

L'inglese non è la mia prima lingua, quindi alcune frasi potrebbero non essere corrette.

Sono aperto a qualsiasi soluzione.

+0

Qualche fortuna? Sto provando ad usare il microfono della mia cuffia bluetooth come un sistema PA, in altre parole la riproduzione dovrebbe essere sopra la presa (uscita), (immagino che su un altro dispositivo bluetooth sarebbe impossibile). Sembra che non sia possibile il – Diego

risposta

1

A2DP è per la riproduzione multimediale ed è a senso unico. SCO è utilizzato per le chiamate vocali/VoIP/registrazione su BT ed è bidirezionale ma con una qualità inferiore.

Cosa accadrà (sulla maggior parte/tutti i dispositivi con cui ho lavorato almeno) quando si attiva BluetoothSco e impostare la modalità di IN_CALL o IN_COMMUNICATION è che STREAM_VOICE_CALL verranno indirizzate al dispositivo di output BT_SCO, e il dispositivo di input sarà essere selezionato in base al dispositivo di output (a causa della modalità) che indica il dispositivo di input BT_SCO.

Il mio suggerimento - sebbene non possa garantire che funzioni su tutti i dispositivi - è non impostare la modalità su IN_COMMUNICATION. La chiamata setBluetoothScoOn(true) imposterà internamente l'impostazione "uso forzato" per la registrazione su BT_SCO e combinandola con l'uso di DEFAULT o VOICE_RECOGNITION AudioSource dovrebbe selezionare il microfono BT_SCO come dispositivo di registrazione.
Tuttavia, la registrazione da BT_SCO e dal microfono interno allo stesso tempo probabilmente si rivelerà impossibile da eseguire in modo portatile.
Per l'output è possibile utilizzare i tipi di flusso RING, ALARM o MUSIC, che devono essere instradati all'altoparlante interno anziché a BT_SCO quando non sono in una chiamata vocale.

+0

@ user2235813 Forse l'AudioSource.CAMCORDER potrebbe fare il trucco per aprire un secondo registratore che usa il microfono interno. – Schlangi

Problemi correlati