You need to enable JavaScript to run this app.
导航

常见问题

最近更新时间2021.12.20 14:44:12

首次发布时间2021.12.20 14:44:12

播放进度回调及其准确性

播放进度回调

SDK 支持细粒度的播放进度回调。开发者可以在收到 MESSAGE_TYPE_TTS_PLAYBACK_PROGRESS 状态回调时,解析附加的 data 字段,获得播放进度(单位:百分比),格式如下:

{
    "progress": 0.3,
    "reqid": "bb081d44-0671-4789-8df5-0050edae517b",
}

准确性

SDK 返回的播放进度是当句已播放的音频长度除以该句音频的总长度:

  • 如果正在播放的句子已经合成结束,那么它的总长度是准确的,计算出的播放进度也是准确的;
  • 如果正在播放的句子正在合成,即边合成边播放的情况,该句的总长度为算法预估值,与真实值有一定偏差,据其得出的播放进度也不完全准确;
  • 分句策略会影响预估的准确性

综上,如果开发者想要获得准确的播放进度,建议根据标点(;!?。!?;…)对文本进行分割,分句提前合成进行缓存。该策略下,已完成合成的句子,后续的播放进度为准确值。

触发鉴权证书下载的条件

SDK 支持鉴权证书下载功能,因为没有必要每次初始化都重新下载证书,所以下载只可能在以下几种情况才会触发:

  1. 指定的目录不存在证书文件;
  2. 证书文件损坏;
  3. 证书过期;
  4. 该证书可授权的功能中不包含当前申请的功能(只使用语音合成能力的客户不存在这种情况);
后台播放需做的特殊处理

如果需要语音合成 SDK 在后台播报,就可能遇到其他应用使用播放器或录音机的场景。针对这几种情况,我们推荐开发者参考下面的示例代码进行处理,篇幅有限故仅展示核心代码,完整样例程序可参考 Demo 源码。以下示例代码实现了几种效果:

  • 其他应用需要录音:开始录音,语音合成播报暂停;录音结束,语音合成播报恢复;
  • 其他应用需要播放(微信消息):开始播放,语音合成播报暂停;播放结束,语音合成播报恢复;
  • 其他应用播放音乐(QQ 音乐):开始播放歌曲,语音合成播报暂停;停止播放歌曲,语音合成播报不再恢复;

通过请求、抛弃 Audio Focus 并注册相应的 Listener 完成相应的处理:

// Add this code to the onCreate method
mAFChangeListener = new AudioManager.OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        switch (focusChange) {
            case AudioManager.AUDIOFOCUS_GAIN:
                Log.d(SpeechDefines.TAG, "onAudioFocusChange: AUDIOFOCUS_GAIN, " + mResumeOnFocusGain);
                if (mResumeOnFocusGain) {
                    mResumeOnFocusGain = false;
                    resumePlayback();
                }
                break;
            case AudioManager.AUDIOFOCUS_LOSS:
                Log.d(SpeechDefines.TAG, "onAudioFocusChange: AUDIOFOCUS_LOSS");
                mResumeOnFocusGain = false;
                pausePlayback();
                break;
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                Log.d(SpeechDefines.TAG, "onAudioFocusChange: AUDIOFOCUS_LOSS_TRANSIENT");
                mResumeOnFocusGain = mEngineStarted;
                pausePlayback();
                break;
        }
    }
};
mAudioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);

// Invoke this method before StartEngine
public void AcquireAudioFocus() {
    // requesting audio focus and processing the response
    int res = mAudioManager.requestAudioFocus(mAFChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    if (res == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
        mPlaybackNowAuthorized = false;
    } else if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        mPlaybackNowAuthorized = true;
    }
}

// Add this code in MESSAGE_TYPE_ENGINE_STOP process methoid
if (mPlaybackNowAuthorized) {
    mAudioManager.abandonAudioFocus(mAFChangeListener);
    mPlaybackNowAuthorized = false;
}
特定机型音量变低

在华为 P30 手机,EMUI 11.0.0.142 上,测试中发现有时会出现播放器音量变低的情况。目前认为这是一个系统 bug, 在系统自带音频播放器上也存在这样的现象。

部分机型后台播报卡顿

在部分 Android 机型(魅族 16th, 酷派大神 Note3)上,如果应用没有使用 foreground services,会出现后台播报卡顿的现象。目前认为这是一种系统行为,建议有后台播放需求的调用方为应用添加 foreground services