首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android -在智能手机和蓝牙模块之间路由音频的功能

Android -在智能手机和蓝牙模块之间路由音频的功能
EN

Stack Overflow用户
提问于 2013-04-02 15:04:15
回答 1查看 8.4K关注 0票数 5

这是我第一篇关于Stackoverflow的文章。过去几天,我试图在android智能手机上路由音频,但我找不到合适的功能。

这是为了制造蓝牙婴儿电话。

我需要在智能手机和蓝牙模块之间做一个路由选择。蓝牙模块最初用于制造手机、汽车免提、无线扬声器.

我与项目的音频侧的A2DP和HFP(Handfree)配置文件进行通信。

我可以建立一个“上海合作组织”连接(与音频蓝牙交换机使用的连接)之间的设备,并从蓝牙模块获得音频。但是,当一个连接“sco”工作时,我不能再使用我的智能手机上的扬声器和麦克风。

我希望找到一个解决方案,在我的智能手机上使用音频,同时在我的蓝牙模块上使用音频。

我在http://developer.android.com/index.html上搜索一个用于路由音频的函数。

AudioManager类有一些函数来路由音频,如setRouting或setParameters,但我还没有得到任何结果。http://developer.android.com/reference/android/media/AudioManager.html

您可以在下面看到用于从婴儿电话端(蓝牙模块侧)获取音频的代码:

代码语言:javascript
运行
复制
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”连接从婴儿电话一侧的麦克风返回音频,我需要尽快了解它,以改变我的项目的方向。

智能手机方面的婴儿电话程序需要在所有最近的智能手机上运行,如果可能的话。

英语不是我的第一语言,所以有些句子可能不正确。

我对任何解决方案都持开放态度。

EN

回答 1

Stack Overflow用户

发布于 2013-04-02 16:01:39

A2DP是用来播放媒体的,是单向的.上海合作组织用于BT上的语音通话/ VoIP /录音,是双向的,但质量较低。

当您启用BluetoothSco并将模式设置为IN_CALLIN_COMMUNICATION时(至少在我曾经使用过的大多数/所有设备上)将发生的情况是,STREAM_VOICE_CALL将被路由到BT_SCO输出设备,并且将根据输出设备(因为该模式)选择输入设备,这意味着BT_SCO输入设备。

我的建议--尽管我不能保证它在每个设备上都能工作--是而不是将模式设置为IN_COMMUNICATIONsetBluetoothScoOn(true)调用内部将“强制使用”设置设置为BT_SCO,并结合使用DEFAULTVOICE_RECOGNITION AudioSource应选择BT_SCO麦克风作为记录设备。

然而,从BT_SCO和内部麦克风同时进行录音可能是不可能以便携式方式进行的。

对于输出,您可以使用RINGALARMMUSIC流类型,当没有语音呼叫时,应该将它们路由到内部扬声器而不是BT_SCO。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15767540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档