TTS输出始终为A2DP

an0*_*00b 5 android bluetooth text-to-speech

我的Android教程声明我可以明确告诉TTS引擎使用哪个流:

对于音乐播放:

params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC));
Run Code Online (Sandbox Code Playgroud)

并拨打电话:

params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_VOICE_CALL));
Run Code Online (Sandbox Code Playgroud)

我的理解是,音频路由到蓝牙耳机的作品,从而STREAM_MUSICA2DP(在Android的蓝牙设置又名"媒体音频")和STREAM_VOICE_CALLHSP(在Android的蓝牙设置又名"手机音频").

但不管我是否使用STREAM_MUSICSTREAM_VOICE_CALL在我的小应用程序中,音频总是出于某种原因A2DP.

我做错了什么?有没有办法将TTS输出路由到耳机的HSP配置文件?

jro*_*oal 5

我在大多数设备上都能正常工作。下面是使用蓝牙 SCO 而不是 A2DP 在语音呼叫流上启动 TTS 的部分。

if (mTtsReady) {
    myHash = new HashMap<String, String>();

    myHash.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "A2DP_Vol");

    OLD_AUDIO_MODE = am2.getMode();
    if(SMSstream == 1){
        if (am2.isBluetoothScoAvailableOffCall()) {
            am2.startBluetoothSco();
        }
        if(!am2.isSpeakerphoneOn()){
            speakerPhoneWasOn = false;
            am2.setSpeakerphoneOn(true);
        }
        myHash.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
                String.valueOf(AudioManager.STREAM_VOICE_CALL));
        am2.requestAudioFocus(null, AudioManager.STREAM_VOICE_CALL,
                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

    }
    else{
        am2.requestAudioFocus(null, AudioManager.STREAM_MUSIC,
        AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
        myHash.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
                String.valueOf(AudioManager.STREAM_MUSIC));
    }

    new CountDownTimer(SMS_DELAY, SMS_DELAY/2) {

        @Override
        public void onFinish() {
            try {
                mTts.speak(str, TextToSpeech.QUEUE_ADD,
                        myHash);
            } catch (Exception e) {
                Toast.makeText(application,
                        R.string.TTSNotReady,
                        Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }

        }

        @Override
        public void onTick(long arg0) {

        }

    }.start();
}
Run Code Online (Sandbox Code Playgroud)

现在我只是在完成后让流恢复回来时遇到问题。阅读 TTS 一切正常。它将暂停所有音乐,播放 TTS,然后正常恢复音乐。但是,当我稍后退出应用程序时,媒体流现在会通过手机耳机播放,直到我重新启动。我在这里发布了这个问题:使用 AudioManager 后音频流保留在耳机上

您可以在这里看到我的整个项目: http: //code.google.com/p/a2dpvolume/