use*_*813 5 audio routing android bluetooth
这是我在Stackoverflow上的第一篇文章.我尝试在过去几天在Android智能手机上路由音频,但我找不到正确的功能.
它用于制作蓝牙Babyphone.
我需要在智能手机和蓝牙模块之间进行路由.蓝牙模块最初用于制作手机,汽车免提,无线扬声器......
我与项目的音频端的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()
Run Code Online (Sandbox Code Playgroud)
如果我无法将音频路由到智能手机扬声器并同时使用"sco"连接从babyphone端的麦克风上取回音频,我需要尽快知道它以改变我的项目方向.
如果可能,智能手机端的babyphone程序需要在所有最近的智能手机上运行.
英语不是我的第一语言,所以一些句子可能不正确.
我愿意接受任何解决方案.
A2DP 用于媒体播放,并且是单向的。SCO 用于通过 BT 进行语音通话/VoIP/录音,是双向的,但质量较低。
IN_CALL当您启用BluetoothSco并将模式设置为或IN_COMMUNICATION将STREAM_VOICE_CALL被路由到BT_SCO输出设备,并且将根据输出设备选择输入设备时,会发生什么(至少在我使用过的大多数/所有设备上)(由于模式的原因)这意味着 BT_SCO 输入设备。
我的建议 - 尽管我不能保证它适用于所有设备 - 是不要将模式设置为IN_COMMUNICATION. 该setBluetoothScoOn(true)调用将在内部设置“强制使用”录音设置到 BT_SCO,并将其与使用DEFAULT或VOICE_RECOGNITIONAudioSource 相结合,应选择 BT_SCO 麦克风作为录音设备。
然而,以便携式方式同时从 BT_SCO 和内部麦克风进行录音可能是不可能的。
对于输出,您可以使用RING,ALARM或MUSIC流类型,当不在语音通话中时,应将其路由到内部扬声器而不是 BT_SCO。
| 归档时间: |
|
| 查看次数: |
7340 次 |
| 最近记录: |