Android-在智能手机和蓝牙模块之间路由音频的功能
这是我关于Stackoverflow的第一篇文章。 在过去的几天里,我尝试在android智能手机上发送音频,但我没有找到合适的功能 它是用来制作蓝牙婴儿电话的 我需要在智能手机和蓝牙模块之间建立路由。蓝牙模块最初用于制造手机、汽车免提、无线扬声器 我与项目音频端的A2DP和HFP(免提)配置文件进行通信 我可以在设备之间建立“sco”连接(用于音频蓝牙交换的连接),并从蓝牙模块获取音频。但当连接“sco”工作时,我就不能再使用智能手机上的扬声器和麦克风了 我希望找到一个解决方案,在智能手机上使用音频,同时在蓝牙模块上使用音频 我搜索了一个函数来路由音频 AudioManager类有一些函数来路由音频,比如setRouting或setParameters,但我还没有得到任何结果。 您可以在下面看到我用于从babyphone端(蓝牙模块端)获取音频的代码: 如果我不能将音频路由到智能手机扬声器,同时使用“sco”连接从babyphone侧的麦克风获取音频,我需要尽快了解它,以便改变我的项目方向 如果可能,智能手机端的babyphone程序需要在所有最新的智能手机上运行 英语不是我的第一语言,所以有些句子可能不正确Android-在智能手机和蓝牙模块之间路由音频的功能,android,audio,routing,bluetooth,Android,Audio,Routing,Bluetooth,这是我关于Stackoverflow的第一篇文章。 在过去的几天里,我尝试在android智能手机上发送音频,但我没有找到合适的功能 它是用来制作蓝牙婴儿电话的 我需要在智能手机和蓝牙模块之间建立路由。蓝牙模块最初用于制造手机、汽车免提、无线扬声器 我与项目音频端的A2DP和HFP(免提)配置文件进行通信 我可以在设备之间建立“sco”连接(用于音频蓝牙交换的连接),并从蓝牙模块获取音频。但当连接“sco”工作时,我就不能再使用智能手机上的扬声器和麦克风了 我希望找到一个解决方案,在智能手机上使
我愿意接受任何解决方案。A2DP用于媒体播放,是单向的。SCO用于通过BT进行语音通话/VoIP/录音,是双向的,但质量较低 当您启用BluetoothSco并在通话中设置模式为
或在通话中设置模式为时(至少在我使用过的大多数/所有设备上),将会发生的情况是流式语音通话将被路由到BT\u SCO输出设备,并且输入设备将根据输出设备进行选择(因为该模式)这意味着BT_SCO输入设备
我的建议——虽然我不能保证它能在每台设备上工作——是不要在通信中设置模式为。setBluetoothScoOn(true)
呼叫将在内部设置“强制使用”设置以录制到BT_SCO,并将其与使用默认值
或语音识别
音频源相结合,应选择BT_SCO麦克风作为录制设备。
然而,从BT_SCO和内部麦克风同时录制可能无法以便携式方式进行。
对于输出,您可以使用铃声
、报警
或音乐
流类型,当不在语音通话中时,这些流类型应该路由到内部扬声器,而不是BT_SCO。@user2235813可能是音频源。摄像机可以打开使用内部麦克风的第二台录音机。@Michael,通过蓝牙路由呼叫在pjsip上可以正常工作,但当通过蓝牙连接的设备接收呼叫时,蓝牙耳机或耳机不会发出铃声,车载蓝牙也不会。任何人都有任何想法或建议。任何帮助或建议都将不胜感激。运气好吗?我正在尝试将我的蓝牙耳机的麦克风用作PA系统,换句话说,播放应该通过插孔(输出)进行,(我猜通过另一个蓝牙设备是不可能的)。看来这是不可能的
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()