为了能够让导航正常进行语音播报,还需要对TTS模块进行初始化,百度导航SDK支持两种TTS实现方案,即内置TTS和外置TTS。
内置TTS初始化方法是:
// 使用内置TTS
BNTTsInitConfig config = new BNTTsInitConfig.Builder()
.context(getApplicationContext())
.sdcardRootPath(getSdcardDir())
.appFolderName(APP_FOLDER_NAME)
.appId(BNDemoUtils.getTTSAppID())
.appKey(BNDemoUtils.getTTSAppKey())
.secretKey(BNDemoUtils.getTTSsecretKey())
.authSn("8092f102-684cde5d-01-0050-006d-0091-01")
.build();
BaiduNaviManagerFactory.getTTSManager().initTTS(config);
外置TTS初始化方法是:
BaiduNaviManagerFactory.getTTSManager().initTTS(mIBNOuterTTSPlayerCallback );
内置TTS 当使用内置TTS接口初始化时,表示将使用内置TTS模块,此时App工程需要集成TTS module,同时设置申请配置过的tts appid。 内置TTS示例代码
// 使用内置TTS
BNTTsInitConfig config = new BNTTsInitConfig.Builder()
.context(getApplicationContext())
.sdcardRootPath(getSdcardDir())
.appFolderName(APP_FOLDER_NAME)
.appId(BNDemoUtils.getTTSAppID())
.appKey(BNDemoUtils.getTTSAppKey())
.secretKey(BNDemoUtils.getTTSsecretKey())
.authSn("8092f102-684cde5d-01-0050-006d-0091-01")
.build();
BaiduNaviManagerFactory.getTTSManager().initTTS(config);
// 注册同步内置tts状态回调
BaiduNaviManagerFactory.getTTSManager().setOnTTSStateChangedListener(
new IBNTTSManager.IOnTTSPlayStateChangedListener() {
@Override
public void onPlayStart() {
Log.e("BNSDKDemo", "ttsCallback.onPlayStart");
}
@Override
public void onPlayEnd(String speechId) {
Log.e("BNSDKDemo", "ttsCallback.onPlayEnd");
}
@Override
public void onPlayError(int code, String message) {
Log.e("BNSDKDemo", "ttsCallback.onPlayError");
}
}
);
// 注册内置tts 异步状态消息
BaiduNaviManagerFactory.getTTSManager().setOnTTSStateChangedHandler(
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Log.e("BNSDKDemo", "ttsHandler.msg.what=" + msg.what);
}
}
);
内置TTS示例代码 当初始化TTS只传入IBNOuterTTSPlayerCallback时,表示将使用外置TTS能力,即通过回调接口参数将外部的TTS能力注入到百度导航SDK内部,此时无需设置tts appid,同时可以不集成百度导航SDK自带的TTS module。
外置TTS 注意:当使用外置TTS能力时,一定要正确返回getTTSState()接口的返回值,百度导航SDK内部将根据该值判断当前TTS模块状态,是否能够进行播报,其返回值类型如下:
IBNTTSManager.IBNOuterTTSPlayerCallback.PLAYER_STATE_NOT_INIT; //未初始化 IBNTTSManager.IBNOuterTTSPlayerCallback.PLAYER_STATE_IDLE; // 空闲 IBNTTSManager.IBNOuterTTSPlayerCallback.PLAYER_STATE_PLAYING; // 播放中 IBNTTSManager.IBNOuterTTSPlayerCallback.PLAYER_STATE_PAUSE; // 暂停 IBNTTSManager.IBNOuterTTSPlayerCallback.PLAYER_STATE_ERROR; // 错误