这是我第一篇关于Stackoverflow的文章。过去几天,我试图在android智能手机上路由音频,但我找不到合适的功能。
这是为了制造蓝牙婴儿电话。
我需要在智能手机和蓝牙模块之间做一个路由选择。蓝牙模块最初用于制造手机、汽车免提、无线扬声器.
我与项目的音频侧的A2DP和HFP(Handfree)配置文件进行通信。
我可以建立一个“上海合作组织”连接(与音频蓝牙交换机使用的连接)之间的设备,并从蓝牙模块获得音频。但是,当一个连接“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”连接从婴儿电话一侧的麦克风返回音频,我需要尽快了解它,以改变我的项目的方向。
智能手机方面的婴儿电话程序需要在所有最近的智能手机上运行,如果可能的话。
英语不是我的第一语言,所以有些句子可能不正确。
我对任何解决方案都持开放态度。
发布于 2013-04-02 16:01:39
A2DP是用来播放媒体的,是单向的.上海合作组织用于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。
https://stackoverflow.com/questions/15767540
复制相似问题