我正在使用 TTS 编写应用程序,我可以使用 UtteranceProgressListener(不要担心有关此主题的旧版本)从音乐播放器获得音频焦点,并在演讲完成后将焦点返回给音乐播放器。但是应用程序 TTS 仍然与谷歌地图(导航器)的声音重叠。
无论如何,我是否可以分辨出 Map 何时在说话,并且我的声音可以排队,甚至可以冲洗(因为现在,当他们两个都在说话时,我无法辨别/理解他们中的任何一个)。
或者有人可以向我指出谷歌地图的来源(或我可以使用的隐藏 API),我知道谷歌地图不是 Android 开源的一部分。
以下是我的代码片段:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
private class utteranceListener extends UtteranceProgressListener {
private OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
// Pause playback
audioManager.abandonAudioFocus(afChangeListener);
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){
// we don't duck, just abandon focus
audioManager.abandonAudioFocus(afChangeListener);
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
// Resume playback
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
audioManager.abandonAudioFocus(afChangeListener);
}
}
};
@Override
public void onDone(String utteranceId)
{
audioManager.abandonAudioFocus(afChangeListener);
}
@Override
public synchronized void onError(String utteranceId)
{
audioManager.abandonAudioFocus(afChangeListener);
}
@Override
public void onStart(String utteranceId)
{
int result = audioManager.requestAudioFocus(afChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
}
}
顺便说一句,在音乐和 TTS 方面,我更喜欢老式的 AUDIOFOCUS_LOSS_TRANSIENT,而不是 AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK,“躲避”的音乐仍然使(TTS)语音难以听,尤其是在播放说唱音乐时,有时只是“演讲/谈话” .