2013-04-02 19 views
5

Bu, Stackoverflow'taki ilk gönderiim. Son birkaç gündür android akıllı telefona ses yollamayı deniyorum, ancak bunu düzgün bir şekilde yerine getiremiyorum.Android - Akıllı telefon ve bluetooth modülü arasında ses iletimi işlevi

Bir Bluetooth Bebek Telefonu yapmak içindir.

Akıllı telefon ve Bluetooth modülü arasında bir yönlendirme yapmam gerekiyor. Bluetooth modülü başlangıçta Ahize, araba Handfree, kablosuz hoparlör ...

Projenin ses tarafı için A2DP ve HFP (Handfree) profilleri ile iletişim kurar.

Cihazlar arasında “sco” bağlantısı kurabilir (Audio Bluetooth değişimleri ile bağlantı kurabilir) ve Bluetooth modülünden ses alabilirim. Ancak “sco” bağlantısı kurulduğunda, akıllı telefonumdaki hoparlör ve mikrofonu kullanamıyorum.

Akıllı telefonumda ve aynı zamanda Bluetooth modülümdeki sesin kullanımı için bir çözüm bulmayı umuyorum.

Ses yönlendirmek için bir işlev için http://developer.android.com/index.html numaralı telefondan aradım.

AudioManager sınıfı, setRouting veya setParameters gibi sesleri yönlendirmek için bazı işlevlere sahiptir, ancak henüz bir sonucum var. http://developer.android.com/reference/android/media/AudioManager.html

Sen babyphone tarafında (Bluetooth modülü tarafı) ses almak için kullandığınız kod aşağıda görebilirsiniz

: Ben akıllı telefon hoparlöre değil rota ses ve içinde “sco” bağlantısını kullanabilirsiniz Eğer

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

Aynı anda mikrofonun mikrofondan sesini geri almak için, projemin yönünü değiştirmek için en kısa zamanda bunu bilmem gerekiyor.

Akıllı telefon tarafındaki bebek telefonu programının mümkünse tüm akıllı telefonlarda çalışması gerekir.

İngilizce benim ilk dilim değil, bu nedenle bazı cümle doğru olmayabilir.

Herhangi bir çözüme açığım var.

+0

Herhangi bir şans? Bluetooth kulaklığımın mikrofonunu bir PA sistemi olarak kullanmaya çalışıyorum, başka bir deyişle oynatma işlemi jack (çıkış) üzerinden yapılmalı (başka bir bluetooth cihaz üzerinden tahmin edersiniz). Bu mümkün değil gibi görünüyor – Diego

cevap

1

A2DP medya oynatma içindir ve tek yönlüdür. SCO, BT üzerinden sesli aramalar/VoIP/kayıt için kullanılır ve iki yönlüdür, ancak daha düşük kalitede.

Eğer BluetoothSco etkinleştirmek ve IN_CALL moduna ayarlamak veya IN_COMMUNICATIONSTREAM_VOICE_CALL BT_SCO çıkış cihazına yönlendirilir olması ve ne zaman (çoğu üzerinde/I çalıştığım tüm cihazların en azından) giriş cihazı olacak ne olacak BT_SCO giriş cihazı anlamına gelen çıkış cihazına göre (moddan dolayı) seçilebilir.

Önerim - her aygıtta çalışacağını garanti edemesem de - değil modu IN_COMMUNICATION olarak ayarlayın. setBluetoothScoOn(true) araması dahili olarak BT_SCO'ya kayıt için "güç kullanımı" ayarını ayarlayacak ve bunu DEFAULT veya VOICE_RECOGNITION AudioSource kullanarak birleştirerek kayıt cihazı olarak BT_SCO mikrofonunu seçmelidir. Bununla birlikte, BT_SCO ve dahili mikrofonun aynı anda kaydedilmesi muhtemelen taşınabilir bir şekilde yapmanın imkansız olduğunu kanıtlayacaktır.
Çıktı için, sesli aramada değilken BT_SCO yerine iç hoparlöre yönlendirilmesi gereken RING, ALARM veya MUSIC akış türlerini kullanabilirsiniz.

+0

@ user2235813 Belki de AudioSource.CAMCORDER dahili mikrofon kullanan ikinci bir kaydedici açmak için hile yapabilir. – Schlangi

İlgili konular