TTS output always going to A2DP

前端 未结 3 1820
旧巷少年郎
旧巷少年郎 2020-12-09 06:53

My Android tutorial states that I can explicitly tell the TTS engine which stream to use:

For music playback:

params.put(TextToSpeech.Engine.KEY_PARA         


        
3条回答
  •  爱一瞬间的悲伤
    2020-12-09 07:26

    I got this working for the most part, on most devices. Here is the part that starts the TTS on the voice call stream using Bluetooth SCO instead of A2DP.

    if (mTtsReady) {
        myHash = new HashMap();
    
        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();
    }
    

    Now I just have a problem getting the stream to revert back when done. It all works fine to read TTS. It will pause any music, play the TTS, and then resume music fine. However, when I exit the app later the stream for media now plays through the phone earpiece until I reboot. I posted that question here: Audio stream stays on earpiece after using AudioManager

    You can see my whole project here: http://code.google.com/p/a2dpvolume/

提交回复
热议问题