这是我在 Stackoverflow 上的第一篇文章。过去几天我尝试在 android 智能手机上路由音频,但我找不到正确执行此操作的功能。
它用于制作蓝牙婴儿电话。
我需要在智能手机和蓝牙模块之间进行路由。蓝牙模块最初用于制作Handset、汽车免提、无线音箱……
我与项目音频方面的 A2DP 和 HFP(免提)配置文件进行通信。
我可以在设备之间建立“sco”连接(用于音频蓝牙交换的连接)并从蓝牙模块取回音频。但是当连接“sco”正常工作时,我无法再使用智能手机上的扬声器和麦克风。
我希望找到一种解决方案,在我的智能手机上使用音频,同时在我的蓝牙模块上使用音频。
我在http://developer.android.com/index.html上搜索了路由音频的功能。
AudioManager 类具有一些功能来路由音频,例如 setRouting 或 setParameters,但我还没有任何结果。 http://developer.android.com/reference/android/media/AudioManager.html
您可以在下面看到我用来从婴儿手机端(蓝牙模块端)获取音频的代码:
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()
如果我不能将音频路由到智能手机扬声器并同时使用“sco”连接从 babyphone 端的麦克风取回音频,我需要尽快知道它以改变我的项目方向。
如果可能,智能手机端的 babyphone 程序需要在所有最近的智能手机上运行。
英语不是我的第一语言,所以有些句子可能不正确。
我愿意接受任何解决方案。