我正在测试Android HERE地图高级SDK,并且音频提示正常工作(包括语音TTS提示),并且已经添加了对音频焦点和闪避的支持(以降低正在播放的任何音乐的音量) 。这在HERE sdk docs for audio management中有所描述。我熟悉这些音频焦点API,并且之前在Android上实现过避免。
然而,使用HERE sdk我正在使用AudioFeedbackListener触发闪避,但TTS音频与音频焦点不同步;基本上是躲避工作,但延迟了0.25到0.5秒。我在运行OREO的三星上进行测试。
AudioFeedbackListener似乎是向后推向Android SDK的角度,因为Android建议请求焦点,等待授权,然后继续音频。但是,这不是HERE中的一个选项(没有完全使用音频代表接管音频,至少我没有看到任何类似的API。
我在HERE地图IOS SDK中看到audioRouteLatencyCompensation
有一个参数可用于帮助避免躲避,但这不适用于Android。
下面是我的音频监听器片段,用于处理音频焦点,在我的日志中,所有呼叫都返回GRANTED。
是否有其他人遇到此问题,或者有关于如何延迟HERE语音提示和哔哔声的建议,直到获得焦点为止?
private NavigationManager.AudioFeedbackListener mAudioListener = new NavigationManager.AudioFeedbackListener() {
@Override
public void onAudioStart() {
super.onAudioStart();
Log.d(TAG,"audio feedback listener: onAudioStart");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
int result = mAudioManager.requestAudioFocus(mFocusRequest);
Log.d(TAG,"Android_O request audio focus result=" + result);
} else {
int result = mAudioManager.requestAudioFocus(afChangeListener,
m_navigationManager.getAudioPlayer().getStreamId(),
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
Log.d(TAG,"request audio focus result=" + result);
}
}
@Override
public void onAudioEnd() {
super.onAudioEnd();
Log.d(TAG,"audio feedback listener: onAudioEnd");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
int result = mAudioManager.abandonAudioFocusRequest(mFocusRequest);
Log.d(TAG,"Android_O abandonAudioFocusRequest result=" + result);
} else {
mAudioManager.abandonAudioFocus(afChangeListener);
}
}
};
答案 0 :(得分:0)
在此处SDK中,尚没有提供在开始播放音频之前获取AudioFeedbackListener调用的方法。 AudioFeedbackListener调用被推入主应用程序循环,并在现有事件发生后异步调用它们。 但是音频播放立即开始。因此,您的应用程序在音频播放开始后会收到音频事件。您看到的延迟取决于当前的用户活动,设备处理器负载等。