Android - 在智能手机和蓝牙模块之间路由音频的功能
这是我在*上的第一篇文章。 我尝试在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()
如果我不能音频路由到智能手机的扬声器,并使用了“上海合作组织”的连接同时从婴儿手机侧的麦克风取回音频,我需要尽快知道它改变我的项目的方向。
如果可能的话,智能手机侧的婴儿电话程序需要在所有最近使用的智能手机上运行。
英语不是我的第一语言,所以有些句子可能不正确。
我愿意接受任何解决方案。
A2DP用于媒体播放,并且是单向的。 SCO用于通过BT进行语音通话/ VoIP /录音,并且是双向的,但质量较低。
会发生什么(在大多数/我曾经使用过的所有设备至少)当您启用BluetoothSco和模式设置为IN_CALL
或IN_COMMUNICATION
是STREAM_VOICE_CALL
将被路由到BT_SCO输出设备,输入设备将根据输出设备选择(由于模式),这意味着BT_SCO输入设备。
我的建议 - 虽然我不能保证它可以在每个设备上工作 - 是而不是将模式设置为IN_COMMUNICATION
。 setBluetoothScoOn(true)
调用将在内部将用于记录的“强制使用”设置设置为BT_SCO,并将其与使用DEFAULT
或VOICE_RECOGNITION
AudioSource相结合,应选择BT_SCO麦克风作为记录设备。
但是,同时录制BT_SCO和内置麦克风可能无法以便携方式进行录制。
对于输出,您可以使用RING
,ALARM
或MUSIC
流类型,在未进行语音呼叫时应将其路由到内部扬声器而不是BT_SCO。
@ user2235813也许AudioSource.CAMCORDER可以做的伎俩来打开使用内部麦克风的第二个录音机。 – Schlangi
运气好吗?我试图将蓝牙耳机的麦克风用作扩声系统,换句话说,播放应该在插孔(输出)上,(我猜测其他蓝牙设备是不可能的)。这似乎是不可能tho – Diego