001package com.aispeech.dui.dds; 002 003import android.text.TextUtils; 004import android.util.Log; 005 006import com.aispeech.dui.dds.auth.AuthType; 007import com.aispeech.dui.manager.AILog; 008import com.aispeech.libbase.AIGsonUtil; 009 010import java.net.URLEncoder; 011import java.util.HashMap; 012import java.util.Iterator; 013import java.util.Map; 014 015public class DDSConfig { 016 017 public static final String TAG = "DDSConfig"; 018 019 /** 020 * 产品ID<br> 021 * <p> 022 * 取值:产品ID字符串<br> 023 * 是否必需:是<br> 024 * 默认值:无<br> 025 */ 026 public static final String K_PRODUCT_ID = "PRODUCT_ID"; 027 028 /** 029 * 产品分支号<br> 030 * <p> 031 * 取值:产品分支号字符串(prod/test/自定义)<br> 032 * 是否必需:是<br> 033 * 默认值:无<br> 034 */ 035 public static final String K_ALIAS_KEY = "ALIAS_KEY"; 036 037 038 /** 039 * 设备ID<br> 040 * 用于授权认证的原始设备ID,请务必确保设备ID唯一。已废弃,使用deviceName<br> 041 * <p> 042 * 取值:设备ID字符串<br> 043 * 是否必需:否<br> 044 */ 045 @Deprecated 046 public static final String K_DEVICE_ID = "DEVICE_ID"; 047 048 /** 049 * 设备 DeviceName, 用来标识设备的标识符<br> 050 * <p> 051 * 取值:设备 DeviceName <br> 052 * 是否必需:否<br> 053 * 默认值:无 054 */ 055 @Deprecated 056 public static final String K_DEVICE_NAME = "DEVICE_NAME"; 057 058 059 /** 060 * 用户ID<br> 061 * <p> 062 * 取值:用户ID字符串(保留字段)<br> 063 * 是否必需:否<br> 064 * 默认值:USER2021ID 065 */ 066 public static final String K_USER_ID = "USER_ID"; 067 068 /** 069 * 用户ID<br> 070 * <p> 071 * 取值:用户ID字符串<br> 072 * 是否必需:否<br> 073 * 默认值:无<br> 074 */ 075 static final String K_AISPEECH_USER_ID = "AISPEECH_USER_ID"; 076 077 /** 078 * 是否使用内置的资源更新通知栏<br> 079 * <p> 080 * 取值:true or false<br> 081 * 是否必需:否<br> 082 * 默认值:true<br> 083 */ 084 public static final String K_USE_UPDATE_NOTIFICATION = "USE_UPDATE_NOTIFICATION"; 085 086 /** 087 * 录音模式 088 * <p> 089 * 取值:internal or external<br> 090 * internal:为SDK内部录音<br> 091 * external:由外部调用<code>DDS.getInstance().getAgent().feedPcm()</code>传入音频<br> 092 * 是否必需:否<br> 093 * 默认值:internal<br> 094 */ 095 public static final String K_RECORDER_MODE = "RECORDER_MODE"; 096 097 /** 098 * 点击模式 099 * <p> 100 * 取值: 101 * 0: 在tts播放状态下click的时候,直接关闭对话 102 * 1: 在tts播放状态下click的时候,打断播报并进入下一轮对话,如果没有下一轮对话则关闭对话 103 * 是否必需:否<br> 104 * 默认值:0<br> 105 */ 106 public static final String K_CLICK_MODE = "CLICK_MODE"; 107 108 /** 109 * TTS播报模式<br> 110 * <p> 111 * 取值:internal or external<br> 112 * internal:为内部合成引擎<br> 113 * external:为外部合成引擎,需调用<code>DDS.getInstance().getAgent().setTTSRequestListener()</code>获取播报时机, 114 * 播报完成后调用<code>DDS.getInstance().getAgent().notifyTTSEnd()</code>标记结束<br> 115 * 是否必需:否<br> 116 * 默认值:internal<br> 117 */ 118 public static final String K_TTS_MODE = "TTS_MODE"; 119 120 /** 121 * TTS外部合成模式下<code>TTSRequestListener</code>是否返回 type == “audio” 数据<br> 122 * 需要 K_TTS_MODE 设置为 external 才能生效 123 * <p> 124 * 取值:true or false<br> 125 * true:接口回调音频<br> 126 * false:接口不会回调音频, 127 * 播报完成后调用<code>DDS.getInstance().getAgent().notifyTTSEnd()</code>标记结束<br> 128 * 是否必需:否<br> 129 * 默认值:false<br> 130 */ 131 public static final String K_TTS_EXTERNAL_AUDIO_ENABLE = "TTS_EXTERNAL_AUDIO_ENABLE"; 132 133 /** 134 * TTS开启内存优化<br> 135 * <p> 136 * 取值:true or false<br> 137 * 是否必需:否<br> 138 * 默认值:false<br> 139 */ 140 public static final String K_TTS_OPTIMIZATION = "TTS_OPTIMIZATION"; 141 142 /** 143 * 支持在对话过程中播放外部speak,优先级 1 2 3 不会被静音 144 */ 145 public static final String K_ENABLE_TTS_SIMULTANEOUS = "ENABLE_TTS_SIMULTANEOUS"; 146 147 /** 148 * 在对话中打断播放,不会释放焦点 149 */ 150 public static final String K_ENABLE_NOT_ABANDON_IN_DIALOG = "ENABLE_NOT_ABANDON_IN_DIALOG"; 151 152 /** 153 * 唤醒后是否进入对话<br> 154 * <p> 155 * 取值:dialog or partner<br> 156 * dialog:唤醒默认进入识别及对话<br> 157 * partner:唤醒后不会主动进入识别及对话,同时唤醒后会收到sys.wakeup.result的message消息<br> 158 * 是否必需:否<br> 159 * 默认值:dialog<br> 160 */ 161 public static final String K_WAKEUP_ROUTER = "WAKEUP_ROUTER"; 162 163 /** 164 * 禁止自定义欢迎语功能, 优化使用<br> 165 * <p> 166 * 取值:true/false<br> 167 * 是否必需:否<br> 168 * 默认值:false<br> 169 */ 170 public static final String K_WAKEUP_DISABLE_CUSTOM_GREETING = "WAKEUP_DISABLE_CUSTOM_GREETING"; 171 172 /** 173 * 就近唤醒网络修改之后延迟响应时间 174 */ 175 public static final String K_NETWORKMANAGER_DELAY = "NETWORKMANAGER_DELAY"; 176 177 /** 178 * 是否使用过滤识别为空功能 默认为 false 179 * <p> 180 * 识别服务识别到的结果为空时,直接舍弃对话结果,进入下一轮识别 181 * <p> 182 * 只在半双工下有效 183 * 取值:true or false<br> 184 * 是否必需:否<br> 185 * 默认值:false<br> 186 */ 187 public static final String K_ASR_IGNORE_EMPTY_RESULT = "ASR_IGNORE_EMPTY_RESULT"; 188 189 /** 190 * 设置 sdk 内部的消息队列最大长度<br> 191 * <p>默认 500, 0表示不限制长度, 建议大于100</p> 192 * <p>动态库方法运行在一个单独的线程里,通过消息队列依次调用。 193 * 在设备性能不好的设备上可以设置消息队列最大长度,防止算力不够导致内核无法及时处理完音频数据而导致内存过大的问题</p> 194 * 是否必需:否<br> 195 * 默认值:500 <br> 196 */ 197 public static final String K_MESSAGE_QUEUE_MAX_SIZE = "MESSAGE_QUEUE_MAX_SIZE"; 198 199 /** 200 * 设置远近场硬件采集模组的类型<br> 201 * <p> 202 * 是否必需:否<br> 203 * 默认值:无 204 * 示例:{"far":"mictype","near":"mictype"} <br> 205 * mictype 取值:<br> 206 * 0:默认单麦(1路音频)<br> 207 * 1:单麦回消(1路音频+1路参考音)<br> 208 * 2:线性四麦(4路音频)<br> 209 * 3:环形六麦(6路音频)<br> 210 * 4:车载双麦(废弃)<br> 211 * 5:家居双麦(2路音频)<br> 212 * 6:环麦4麦(4路音频)<br> 213 * 7:车载双麦(2路音频)<br> 214 * 8:线性六麦(6路音频)<br> 215 * 10:线性八麦(8路音频)<br> 216 * 是否必需:否<br> 217 */ 218 public static final String K_PICKUP_MIC_TYPE = "PICKUP_MIC_TYPE"; 219 220 /** 221 * 控制 AudioTrack 每次写音频数据的大小,默认有多少数据都会一次写入。<br> 222 * 可以设置 800,这样 AudioTrack 每次只写 800 字节音频数据<br> 223 * 该配置只用于极少数设备<br> 224 * 是否必需:否<br> 225 */ 226 public static final String K_PLAYER_AUDIO_TRACK_WRITE_ONCE_SIZE = "PLAYER_AUDIO_TRACK_WRITE_ONCE_SIZE"; 227 228 /** 229 * 音频的回路数量<br> 230 * 音频通道总数包含麦克风原始音频数+回路通道数。这里的配置只是回路通道数 231 * <p> 232 * 取值:数字<br> 233 * 是否必需:否<br> 234 * 默认值:0 235 */ 236 public static final String K_MIC_ECHO_CHANNEL_NUM = "MIC_ECHO_CHANNEL_NUM"; 237 238 /** 239 * 初始化是否要等待oauth的刷新token返回,默认为false 240 * 默认为false,效果为初始成功的回调不依赖于oauth是否刷新token成功,可正常初始化,但在初始化之后立即对话可能会有授权失败的问题 241 * 如果设置为true,则必须保证当前网络连接正常,如网络连接不正常,则可能导致卡死在初始化页面 242 */ 243 public static final String K_INIT_WAIT_OAUTH_REFRESH_TOKEN = "INIT_WAIT_OAUTH_REFRESH_TOKEN"; 244 245 /** 246 * 需要过滤的唤醒词 247 * <p> 248 * 唤醒词字符串,以’,‘分割唤醒词。例如 "你好小乐,你好小朋" 249 * </p> 250 * 需要过滤的唤醒词会在请求服务器时以参数带上 251 * <ul> 252 * <li>使用 oneshot 时,唤醒词 + ',' + ASR_DROP_WORDS</li> 253 * <li>不使用 oneshot 时,ASR_DROP_WORDS</li> 254 * </ul> 255 */ 256 public static final String K_ASR_DROP_WORDS = "ASR_DROP_WORDS"; 257 258 /** 259 * 就近唤醒服务地址<br> 260 * <p> 261 * 取值:服务地址<br> 262 * 是否必需:否<br> 263 * 默认值:"" 264 */ 265 public static final String K_NEAR_WAKEUP_SERVER_NAME = "NEAR_WAKEUP_SERVER_NAME"; 266 267 /** 268 * 配置参与组网的唤醒词,即配置之后该唤醒词会参与组网,其他的唤醒词不参与组网 269 * 取值:参与组网的唤醒词,不同唤醒词以,分割,如"xiao chi xiao chi, ni hao xiao chi" 270 * 是否必须:否 271 * 默认值:"" 272 */ 273 public static final String K_NEAR_WAKEUP_WORD = "NEAR_WAKEUP_WORD"; 274 275 /** 276 * 就近唤醒送给 mds 的音频是否是 AEC 之后的音频 277 * <p> 278 * 取值:true(AEC 之后的音频) or false(送的是原始音频)<br> 279 * 是否必需:否<br> 280 * 默认值:false 281 */ 282 public static final String K_NEAR_WAKEUP_AUDIO_ADOPT_AEC = "NEAR_WAKEUP_AUDIO_ADOPT_AEC"; 283 284 /** 285 * 云端对话送识别的音频类型 286 * 取值: wav, ogg 287 * 是否必须:否 288 * 默认值: ogg 289 */ 290 public static final String K_DM_ASR_AUDIO_TYPE = "CDM_AUDIO_TYPE"; 291 292 /** 293 * 云端对话送识别的音频压缩率 294 * 默认是 8 295 * CPU压力大可以配置成3~6 296 */ 297 public static final String K_DECODE_COMPLEXITY = "DECODE_COMPLEXITY"; 298 299 /** 300 * TTS 是否使用缓存 <br> 301 * 取值:true false <br> 302 * 是否必需:否 <br> 303 * 默认值:true 304 */ 305 public static final String K_TTS_CACHE = "TTS_CACHE"; 306 307 /** 308 * 识别后是否进入对话<br> 309 * <p> 310 * 取值:dialog or partner<br> 311 * dialog:识别之后进入对话<br> 312 * partner:识别之后不会进入对话,可通过ASREngine相关方法获取识别结果<br> 313 * 是否必需:否<br> 314 * 默认值:dialog<br> 315 */ 316 public static final String K_ASR_ROUTER = "ASR_ROUTER"; 317 318 /** 319 * 识别结果是否带标点符号<br> 320 * 开关同时控制识别和语义,开启后,语义解析结果也会带标点符号,且不建议在oneshot、中英文连用、轻音的情况下使用。 321 * <p> 322 * 取值:true or false<br> 323 * 是否必需:否<br> 324 * 默认值:false<br> 325 */ 326 public static final String K_ASR_ENABLE_PUNCTUATION = "ENABLE_PUNCTUATION"; 327 /** 328 * 识别过滤敏感词功能<br> 329 * <p> 330 * 取值:true or false<br> 331 * 是否必需:否<br> 332 * 默认值:false<br> 333 */ 334 public static final String K_ASR_ENABLE_CENSOR= "ENABLE_CENSOR"; 335 336 337 /** 338 * 授权文件保存路径<br> 339 * <p> 340 * 是否必需:否<br> 341 */ 342 static final String K_PROFILE_PATH = "PROFILE_PATH"; 343 344 /** 345 * 使用动态端口号<br> 346 * <p> 347 * 取值: true or false<br> 348 * 是否必需:否<br> 349 * 默认值:false<br> 350 */ 351 @Deprecated 352 static final String K_ENABLE_DYNAMIC_PORT = "ENABLE_DYNAMIC_PORT"; 353 354 /** 355 * 使用uiagent动态端口号<br> 356 * <p> 357 * 取值: true or false<br> 358 * 是否必需:否<br> 359 * 默认值:false<br> 360 */ 361 public static final String K_ENABLE_DYNAMIC_UIAGENT_PORT = "ENABLE_DYNAMIC_UIAGENT_PORT"; 362 363 /** 364 * 识别结果的拼音是否带音调<br> 365 * <p> 366 * 取值:true or false<br> 367 * 是否必需:否<br> 368 * 默认值:false<br> 369 */ 370 public static final String K_ASR_ENABLE_TONE = "ENABLE_TONE"; 371 372 /** 373 * 新增技能锁定接口,让用户说的话只落在锁定的技能里<br> 374 * <p> 375 * 取值: 376 * <pre> 377 * [ 378 * {"skillId": "123123"}, 379 * {"skillId": "123123"}, 380 * {"skillId": "123123"}, 381 * ] 382 * </pre> 383 * 是否必需:否<br> 384 * 默认值:无<br> 385 */ 386 public static final String K_PERMANENT_SKILL = "PERMANENT_SKILL"; 387 388 /** 389 * 设置指定语料的识别置信度,防止某些语料识别置信度过低被抛弃。 390 * <pre> 391 * [ 392 * { 393 * "name": "打开宝宝睡觉模式", 394 * "confidence": "0.61" 395 * }, 396 * { 397 * "name": "打开音乐", 398 * "confidence": "0.62" 399 * } 400 * ] 401 * 402 * </pre> 403 * 是否必需:否<br> 404 * 默认值:无<br> 405 */ 406 public static final String K_ASR_CUSTOM_CONF = "ASR_CUSTOM_CONF"; 407 408 /** 409 * 全双工支持vadTimeout最大次数,默认值为:1<br> 410 * <p> 411 * 取值:int型数字 412 * 是否必需:否<br> 413 * 默认值:1<br> 414 */ 415 public static final String K_ENALBE_QSG_VAD_TIMEOUT_MAX_COUNT = "ENALBE_QSG_VAD_TIMEOUT_MAX_COUNT"; 416 417 /** 418 * 开启后识别前都会有叮咚声<br> 419 * <p> 420 * 取值:true/false 421 * 是否必需:否<br> 422 * 默认值:false<br> 423 */ 424 public static final String K_ASR_BEFORE_TIPS = "ASR_BEFORE_TIPS"; 425 426 /** 427 * 优化离线gram编译逻辑,打开后,gram只在需要更新的场景下才会重新编译,否则即便重新初始化也不会编译<br> 428 * <p> 429 * 取值:true/false 430 * 是否必需:否<br> 431 * 默认值:false<br> 432 */ 433 public static final String K_OPT_GRAM_BUILD = "OPT_GRAM_BUILD"; 434 435 /** 436 * ngram 和 gram 融合时使用置信度跟大的结果,Gram更新热词词库,热词的置信度会变高 437 */ 438 public static final String K_NGRAM_GRAM_CONF_USE_MORE = "NGRAM_GRAM_CONF_USE_MORE"; 439 440 /** 441 * 自定义授权证书的SHA256, sdk 授权时会检查包名和签名的SHA256,第三方加固后可能改变,可以配置新的SHA256<br> 442 * <p> 443 * 取值:字符串<br> 444 * 是否必需:否<br> 445 * 默认值:<br> 446 */ 447 public static final String K_CUSTOM_SHA256 = "CUSTOM_SHA256"; 448 449 /** 450 * 试用授权是否连网更新成在线授权<br> 451 * <p> 452 * 取值:true or false<br> 453 * 是否必需:否<br> 454 * 默认值:true<br> 455 */ 456 public static final String K_NEED_REPLACE_PROFILE = "NEED_REPLACE_PROFILE"; 457 458 /** 459 * assets目录下的离线授权文件名<br> 460 * <p> 461 * 取值:assets目录下的离线授权文件名<br> 462 * 是否必需:否<br> 463 * 默认值:<br> 464 */ 465 public static final String K_OFFLINE_PROFILE_NAME = "OFFLINE_PROFILE_NAME"; 466 467 /** 468 * 中文数字转阿拉伯数字 469 * <p> 470 * 取值:true或者false<br> 471 * 是否必需:否<br> 472 * 默认值:false 473 */ 474 public static final String K_ASR_ENABLE_NUMBER_CONVERT = "ENABLE_NUMBER_CONVERT"; 475 476 /** 477 * 多意图顺序执行 <br> 478 * <p> 479 * 取值:true or false<br> 480 * 是否必需:否<br> 481 * 默认值:false 482 */ 483 public static final String K_ENABLE_MULTIINTENT_SEQUENCE = "ENABLE_MULTIINTENT_SEQUENCE"; 484 485 public static final String K_MULTI_INTENT_IGNORE_WAIT_SKILL = "MULTI_INTENT_IGNORE_WAIT_SKILL"; 486 487 /** 488 * 自定义唤醒词阈值<br> 489 * <p> 490 * 是否必需:否<br> 491 * 默认值:无 492 */ 493 public static final String K_ASR_CUSTOM_WAKEUP_SCORE = "CUSTOM_WAKEUP_SCORE"; 494 495 /** 496 * VAD静音超时时间(多久没有检测到人声,默认8000ms)<br> 497 * <p> 498 * 取值:毫秒时间<br> 499 * 是否必需:否<br> 500 * 默认值:8000<br> 501 */ 502 public static final String K_VAD_TIMEOUT = "VAD_TIMEOUT"; 503 504 /** 505 * 云端VAD静音判断时间<br> 506 * <p> 507 * 取值:毫秒时间<br> 508 * 是否必需:否<br> 509 * 默认值:500<br> 510 */ 511 public static final String K_CLOUD_VAD_PAUSE_TIME = "CLOUD_VAD_PAUSE_TIME"; 512 513 /** 514 * 录音机数据源类型<br> 515 * <p> 516 * 取值:AudioSource.*<br> 517 * 是否必需:否<br> 518 * 默认值:AudioSource.DEFAULT<br> 519 */ 520 public static final String K_AUDIO_SOURCE = "AUDIO_SOURCE"; 521 522 /** 523 * 录音机频道源类型<br> 524 * <p> 525 * 取值:AudioFormat.*<br> 526 * 是否必需:否<br> 527 * 默认值:内部自适应<br> 528 */ 529 public static final String K_AUDIO_CHANNEL_CONF = "AUDIO_CHANNEL_CONF"; 530 531 /** 532 * 音频通道数 <br> 533 * sdk 内计算需要的缓存大小、音量等使用 534 */ 535 public static final String K_AUDIO_CHANNEL_COUNT = "AUDIO_CHANNEL_COUNT"; 536 537 /** 538 * 录音机参数:audioFormat <br> 539 * 默认值:AudioFormat.ENCODING_PCM_16BIT 540 */ 541 public static final String K_AUDIO_FORMAT = "AUDIO_FORMAT"; 542 543 /** 544 * 内置录音机读取buffer的大小<br> 545 * <p> 546 * 取值:int型数值<br> 547 * 是否必需:否<br> 548 * 默认值:通道数*16/8*16000*100/1000 B<br> 549 */ 550 public static final String K_AUDIO_BUFFER_SIZE_IN_BYTE = "AUDIO_BUFFER_SIZE_IN_BYTE"; 551 552 /** 553 * 录音机的通道索引掩码 554 * <ul> 555 * <li>String.valueOf(0x3) 二进制表示是 11,表示2个通道</li> 556 * <li>String.valueOf(0x3F) 二进制表示是 111111,表示6个通道</li> 557 * </ul> 558 */ 559 public static final String K_AUDIO_CHANNEL_INDEX_MASK = "AUDIO_CHANNEL_INDEX_MASK"; 560 561 /** 562 * Build.VERSION_CODES.M 及以上系统是否使用新的 AudioRecord 构造方法,默认 false 563 */ 564 public static final String K_AUDIO_RECORD_USE_HIGH_API = "AUDIO_RECORD_USE_HIGH_API"; 565 566 /** 567 * 内置录音机读取buffer的大小<br> 568 * <p> 569 * 取值:int型数值<br> 570 * 是否必需:否<br> 571 * 默认值:通道数*16/8*16000*100/1000 B<br> 572 */ 573 public static final String K_AUDIO_BUFFER_SIZE = "AUDIO_BUFFER_SIZE"; 574 575 /** 576 * 录音机采样率<br> 577 * <p> 578 * 取值:16000/32000<br> 579 * 是否必需:否<br> 580 * 默认值:内部自适应<br> 581 */ 582 public static final String K_AUDIO_SAMPLERATE = "AUDIO_SAMPLERATE"; 583 584 /** 585 * 内置播放器的STREAM类型<br> 586 * <p> 587 * 取值:AudioManager.STREAM_*<br> 588 * 是否必需:否<br> 589 * 默认值:AudioManager.STREAM_ALARM<br> 590 */ 591 public static final String K_STREAM_TYPE = "STREAM_TYPE"; 592 593 /** 594 * 内置播放器的USAGE类型<br> 595 * <p> 596 * 取值:AudioAttributes.USAGE_*<br> 597 * 是否必需:否<br> 598 * 默认值:AudioAttributes.USAGE_ALARM<br> 599 */ 600 public static final String K_AUDIO_USAGE = "AUDIO_USAGE"; 601 602 /** 603 * 内置播放器的contenttype类型<br> 604 * <p> 605 * 取值:AudioAttributes.CONTENT_TYPE_*<br> 606 * 是否必需:否<br> 607 * 默认值:AudioAttributes.CONTENT_TYPE_SONIFICATION<br> 608 */ 609 public static final String K_CONTENT_TYPE = "CONTENT_TYPE"; 610 611 /** 612 * 内置播放器的焦点类型<br> 613 * <p> 614 * 取值:AudioManager.AUDIOFOCUS_GAIN_*<br> 615 * 是否必需:否<br> 616 * 默认值:AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE<br> 617 */ 618 public static final String K_AUDIO_FOCUS_GAIN = "AUDIO_FOCUS_GAIN"; 619 620 /** 621 * 是否翻转内置录音机通道<br> 622 * <p> 623 * 取值:true or false<br> 624 * 是否必需:否<br> 625 * 默认值:false<br> 626 */ 627 public static final String K_IS_REVERSE_AUDIO_CHANNEL = "IS_REVERSE_AUDIO_CHANNEL"; 628 629 /** 630 * 设置硬件麦克风采集模组的类型<br> 631 * 默认使用 DUI 控制台上产品的对应配置项。若客户端通过SDK配置此项后,则以客户端配置为准。 632 * <p> 633 * 取值:<br> 634 * 0:默认单麦(1路音频)<br> 635 * 1:单麦回消(1路音频+1路参考音)<br> 636 * 2:线性四麦(4路音频)<br> 637 * 3:环形六麦(6路音频)<br> 638 * 4:车载双麦(废弃)<br> 639 * 5:家居双麦(2路音频)<br> 640 * 6:环麦4麦(4路音频)<br> 641 * 7:车载双麦(2路音频)<br> 642 * 8:线性六麦(6路音频)<br> 643 * 644 * 10:线性八麦(8路音频)<br> 645 * 是否必需:否<br> 646 * 默认值:0 647 */ 648 public static final String K_MIC_TYPE = "MIC_TYPE"; 649 650 /** 651 * 设置送到dmasp引擎中的音频通道数量,不设置默认dmasp送的是四通道音频 652 */ 653 public static final String K_CHANNEL_TYPE = "CHANNEL_TYPE"; 654 655 /** 656 * 车载双麦和4麦可以使用 dmasp 算法 657 */ 658 public static final String K_USE_DMASP = "USE_DMASP"; 659 660 /** 661 * 是否使用大音量检测 <br> 662 * 默认值: false 663 */ 664 public static final String K_HIGH_VOLUME_CHECK = "HIGH_VOLUME_CHECK"; 665 666 /** 667 * 内核资源存放的目录<br> 668 * <p> 669 * 取值:绝对路径字符串<br> 670 * 是否必需:否<br> 671 * 默认值:/data/data/包名/files/dds/duicore/ 672 */ 673 public static final String K_DUICORE_HOME = "DUICORE_HOME"; 674 675 /** 676 * 产品资源存放的目录<br> 677 * <p> 678 * 取值:绝对路径字符串<br> 679 * 是否必需:否<br> 680 * 默认值:/data/data/com.xxx/files/dds/custom/ 681 */ 682 public static final String K_CUSTOM_HOME = "CUSTOM_HOME"; 683 684 /** 685 * 使用内置内核资源包<br> 686 * <p> 687 * 取值:assets目录下为压缩包名称,其他目录为绝对路径字符串<br> 688 * 是否必需:否<br> 689 * 默认值:无 690 */ 691 public static final String K_DUICORE_ZIP = "DUICORE_ZIP"; 692 693 694 /** 695 * 使用自定义授权文件(比如试用授权文件)<br> 696 * <p> 697 * 取值:assets目录下为自定义授权文件名<br> 698 * 是否必需:否<br> 699 * 默认值:无 700 */ 701 static final String K_PROFILE = "PROFILE"; 702 703 /** 704 * 使用内置产品资源包, 从官网下载的产品资源包一般叫 product.zip<br> 705 * <p> 706 * 取值:assets目录下为压缩包名称,其他目录为绝对路径字符串<br> 707 * 是否必需:否<br> 708 * 默认值:无 709 */ 710 public static final String K_CUSTOM_ZIP = "CUSTOM_ZIP"; 711 712 /** 713 * 内核资源包保存路径<br> 714 * <p> 715 * 取值:绝对路径字符串<br> 716 * 是否必需:否<br> 717 * 默认值:无 718 */ 719 public static final String K_DUICORE_BACKUP_ZIP_USER_DEFINED = "DUICORE_BACKUP_ZIP_USER_DEFINED"; 720 721 /** 722 * 产品资源包保存路径<br> 723 * <p> 724 * 取值:绝对路径字符串<br> 725 * 是否必需:否<br> 726 * 默认值:无 727 */ 728 public static final String K_CUSTOM_BACKUP_ZIP_USER_DEFINED = "CUSTOM_BACKUP_ZIP_USER_DEFINED"; 729 730 /** 731 * 全双工模式下,在对话中过程中关闭唤醒<br> 732 * <p> 733 * 取值:true/false<br> 734 * 是否必需:否<br> 735 * 默认值:false 736 */ 737 public static final String K_DISABLE_WAKEUP_IN_DIALOG = "DISABLE_WAKEUP_IN_DIALOG"; 738 739 /** 740 * 使用exoPlayer播报speakUrl<br> 741 * <p> 742 * 取值:true/false<br> 743 * 是否必需:否<br> 744 * 默认值:false 745 */ 746 public static final String K_USE_EXO_PLAY_SPEAKURL = "USE_EXO_PLAY_SPEAKURL"; 747 748 /** 749 * 保留字段,上传、升级时使用 750 */ 751 public static final String K_ACCESS_TOKEN = "ACCESS_TOKEN"; 752 753 /** 754 * 授权方式<br> 755 * <p> 756 * 取值:AuthType.AISPEECH_ID or AuthType.PROFILE<br> 757 * 是否必需:是<br> 758 * 默认值:无 759 */ 760 static final String K_AUTH_TYPE = "AUTH_TYPE"; 761 762 /** 763 * 产品API keys<br> 764 * 限制:一个API Key只被指定的客户端使用。来源:DUI控制台-产品接入-授权管理 765 * <p> 766 * 取值:API keys字符串<br> 767 * 是否必需:是<br> 768 * 默认值:无 769 */ 770 public static final String K_API_KEY = "API_KEY"; 771 772 /** 773 * 产品Product Key<br> 774 * <p> 775 * 取值:DUI控制台-产品接入-授权管理-Product Key<br> 776 * 是否必需:是<br> 777 * 默认值:无 778 */ 779 public static final String K_PRODUCT_KEY = "PRODUCT_KEY"; 780 781 /** 782 * 噪声检测配置,开启后可过滤噪声识别结果<br> 783 * <p> 784 * 取值:true or false<br> 785 * 是否必需:否<br> 786 * 默认值:false 787 */ 788 public static final String K_ENABLE_AUDIO_DETECTION = "ENABLE_AUDIO_DETECTION"; 789 790 /** 791 * 产品Product Secret<br> 792 * <p> 793 * 取值:DUI控制台-产品接入-授权管理-Product Secret<br> 794 * 是否必需:是<br> 795 * 默认值:无 796 */ 797 public static final String K_PRODUCT_SECRET = "PRODUCT_SECRET"; 798 799 /** 800 * 产品licenseID<br> 801 * <p> 802 * 预分配licence模式下的参数<br> 803 * 是否必需:否<br> 804 * 默认值:无 805 */ 806 public static final String K_PRODUCT_LICENSE_ID = "PRODUCT_LICENSE_ID"; 807 808 /** 809 * 缓存文件保存目录<br> 810 * <p> 811 * 取值:绝对路径字符串<br> 812 * 是否必需:否<br> 813 * 默认值:/sdcard/Android/data/包名/cache 814 */ 815 public static final String K_CACHE_PATH = "CACHE_PATH"; 816 817 /** 818 * 对话模式<br> 819 * <p> 820 * 取值:HALF_DUPLEX/FULL_DUPLEX <br> 821 * 是否必需:否<br> 822 * 默认值:HALF_DUPLEX 823 */ 824 public static final String K_DUPLEX_MODE = "DUPLEX_MODE"; 825 826 /** 827 * 全双工模式下是否使用vad<br> 828 * <p> 829 * 取值:true or false<br> 830 * 是否必需:否<br> 831 * 默认值:true 832 */ 833 public static final String K_USE_VAD_IN_FULLDUPLEX = "USE_VAD_IN_FULLDUPLEX"; 834 835 /** 836 * 全双工模式下是否可以唤醒<br> 837 * <p> 838 * 取值:true or false<br> 839 * 是否必需:否<br> 840 * 默认值:true 841 */ 842 public static final String K_ENABLE_WAKEUP_IN_FULLDUPLEX = "ENABLE_WAKEUP_IN_FULLDUPLEX"; 843 844 /** 845 * 离线全双工是否开启vad<br> 846 * <p> 847 * 取值:true or false<br> 848 * 是否必需:否<br> 849 * 默认值:false 850 */ 851 public static final String K_ENABLE_QSG_IN_LDM = "ENABLE_QSG_IN_LDM"; 852 853 /** 854 * 开启识别预测功能<br> 855 * <p> 856 * 取值:true or false<br> 857 * 是否必需:否<br> 858 * 默认值:false 859 */ 860 public static final String K_ENABLE_PREDICT = "ENABLE_PREDICT"; 861 862 /** 863 * 缓存文件大小限制<br> 864 * <p> 865 * 取值:int型数值<br> 866 * 是否必需:自定义缓存目录时必需<br> 867 * 默认值:无 868 */ 869 public static final String K_CACHE_SIZE = "CACHE_SIZE"; 870 871 /** 872 * 热词场景模式配置 873 */ 874 public static final String K_WAKEUP_HOT_WORD_SCENE = "WAKEUP_HOT_WORD_SCENE"; 875 876 /** 877 * 是否使用本地自定义deviceName<br> 878 * <p> 879 * 取值:true or false<br> 880 * 是否必需:否<br> 881 * 默认值:无 882 */ 883 @Deprecated 884 static final String KEY_USE_LOCAL_DEVICE_NAME = "USE_LOCAL_DEVICE_NAME"; 885 886 /** 887 * 设置TTS播放缓存buffer大小<br> 888 * <p> 889 * 取值:int型数值<br> 890 * 是否必需:否<br> 891 * 默认值:无 892 */ 893 public static final String K_AUDIOTRACK_BUFFERSIZE = "AUDIOTRACK_BUFFERSIZE"; 894 895 /** 896 * 指定对话错误码的TTS播报<br> 897 * <p> 898 * 取值:JSON字符串,如:<br> 899 * { 900 * "71304":"这是识别结果为空的自定义播报", 901 * "71305":"这是语义结果为空的自定义播报", 902 * "71308":"这是进入闲聊技能的自定义播报", 903 * "713**":"*****" 904 * }<br> 905 * 是否必需:否<br> 906 * 默认值:产品配置 907 */ 908 public static final String K_CUSTOM_TIPS = "CUSTOM_TIPS"; 909 910 /** 911 * 用预置音频来代替指定的TTS播报<br> 912 * <p> 913 * 取值:JSONArray字符串,如:<br> 914 * [{ 915 * "name":"我在", 916 * "type":"wav", 917 * "path":"/sdcard/x.pcm" 918 * }, 919 * { 920 * "name":"好的,再见", 921 * "type":"mp3", 922 * "path":"/sdcard/y.mp3" 923 * }]<br> 924 * 是否必需:是<br> 925 * 默认值:无 926 */ 927 public static final String K_CUSTOM_AUDIO = "CUSTOM_AUDIO"; 928 929 /** 930 * 云端识别是否开启音频压缩<br> 931 * <p> 932 * 取值:opus/ogg<br> 933 * 是否必需:否<br> 934 * 默认值:ogg 935 */ 936 static final String K_AUDIO_COMPRESS = "AUDIO_COMPRESS"; 937 938 static final String K_OPUS_COMPLEXITY = "OPUS_COMPLEXITY"; 939 940 static final String K_ENABLE_CONFIDENCE = "ENABLE_CONFIDENCE"; 941 942 /** 943 * 添加dcheck参数,唤醒矫正 944 */ 945 static final String K_D_CHECK = "D_CHECK"; 946 947 948 /** 949 * 添加major参数,区分主副唤醒词 950 */ 951 static final String K_MAJOR = "MAJOR"; 952 953 /** 954 * AEC(回声消除)模式<br> 955 * <p> 956 * 取值:internal or external<br> 957 * internal:由SDK内部根据采集模组做对应AEC处理<br> 958 * external:外部已经处理过AEC,SDK不再处理,并认为设备支持AEC<br> 959 * 是否必需:否<br> 960 * 默认值:internal 961 */ 962 public static final String K_AEC_MODE = "AEC_MODE"; 963 964 /** 965 * 麦克风阵列 sspe 资源的磁盘绝对路径<br> 966 * <p> 967 * 取值:绝对路径字符串<br> 968 * 是否必需:否<br> 969 * 默认值:内置资源 970 */ 971 public static final String K_MIC_ARRAY_SSPE_BIN = "MIC_ARRAY_SSPE_BIN"; 972 973 /** 974 * 麦克风阵列AEC资源的磁盘绝对路径<br> 975 * <p> 976 * 取值:绝对路径字符串<br> 977 * 是否必需:否<br> 978 * 默认值:内置资源 979 */ 980 @Deprecated 981 public static final String K_MIC_ARRAY_AEC_CFG = "MIC_ARRAY_AEC_CFG"; 982 983 /** 984 * 麦克风阵列beamforming资源的磁盘绝对路径<br> 985 * <p> 986 * 取值:绝对路径字符串<br> 987 * 是否必需:否<br> 988 * 默认值:内置资源 989 */ 990 @Deprecated 991 public static final String K_MIC_ARRAY_BEAMFORMING_CFG = "MIC_ARRAY_BEAMFORMING_CFG"; 992 993 /** 994 * @deprecated 不再需要此配置 995 */ 996 @Deprecated() 997 public static final String K_MIC_ARRAY_WAKEUP_CFG = "MIC_ARRAY_WAKEUP_CFG"; 998 999 /** 1000 * 是否保存进入VAD的音频(调试项)<br> 1001 * 已被废弃,代替: {@linkplain DDS#setAudioDebug} 1002 * 1003 * @see DDS#setAudioDebug(boolean) 1004 */ 1005 @Deprecated 1006 public static final String K_VAD_DEBUG = "VAD_DEBUG"; 1007 1008 /** 1009 * 是否禁用VAD单字打断功能<br> 1010 * <p> 1011 * 取值:true or false<br> 1012 * 是否必需:否<br> 1013 * 默认值:false 1014 */ 1015 public static final String K_VAD_DISABLE_SIGNAL = "VAD_DISABLE_SIGNAL"; 1016 1017 /** 1018 * 是否保存TTS的音频(调试项)<br> 1019 * 已被废弃,代替: {@linkplain DDS#setAudioDebug} 1020 * 1021 * @see DDS#setAudioDebug(boolean) 1022 */ 1023 @Deprecated 1024 public static final String K_TTS_DEBUG = "TTS_DEBUG"; 1025 1026 /** 1027 * 是否保存ASR的音频(调试项)<br> 1028 * 已被废弃,代替: {@linkplain DDS#setAudioDebug} 1029 * 1030 * @see DDS#setAudioDebug(boolean) 1031 */ 1032 @Deprecated 1033 public static final String K_ASR_DEBUG = "ASR_DEBUG"; 1034 1035 /** 1036 * 服务端实现识别模拟oneshot<br> 1037 * <p> 1038 * 取值:true or false<br> 1039 * 是否必需:否<br> 1040 * 默认值:false 1041 */ 1042 public static final String K_ASR_SIMULATE_ONESHOT = "ASR_SIMULATE_ONESHOT"; 1043 1044 /** 1045 * 是否保存WAKEUP的音频(调试项)<br> 1046 * 已被废弃,代替: {@linkplain DDS#setAudioDebug} 1047 * 1048 * @see DDS#setAudioDebug(boolean) 1049 */ 1050 @Deprecated 1051 public static final String K_WAKEUP_DEBUG = "WAKEUP_DEBUG"; 1052 1053 /** 1054 * 是否使用就近唤醒<br> 1055 * <p> 1056 * 取值:true or false<br> 1057 * 是否必需:否<br> 1058 * 默认值:false 1059 */ 1060 public static final String K_USE_NEAR_WAKEUP = "USE_NEAR_WAKEUP"; 1061 1062 /** 1063 * 是否使用双头唤醒<br> 1064 * <p> 1065 * 取值:true or false<br> 1066 * 是否必需:否<br> 1067 * 默认值:false 1068 */ 1069 public static final String K_USE_DUAL_WAKEUP = "USE_DUAL_WAKEUP"; 1070 /** 1071 * 双头唤醒初始化的env配置<br> 1072 * <p> 1073 * { 1074 * "xiao_mei_xiao_mei":{ 1075 * "customNet":1, 1076 * "enableNet":1, 1077 * "greeting":[ 1078 * "叫我干啥" 1079 * ], 1080 * "major":0, 1081 * "name":"小美小美", 1082 * "pinyin":"xiao_mei_xiao_mei", 1083 * "threshHigh":"0.9", 1084 * "threshLow":"0.01", 1085 * "threshold":0.75, 1086 * "type":"major" 1087 * }, 1088 * "xiao mei xiu mei":{ 1089 * "customNet":0, 1090 * "enableNet":1, 1091 * "greeting":[ 1092 * "我是小美秀美" 1093 * ], 1094 * "major":0, 1095 * "name":"小美小美", 1096 * "pinyin":"xiao mei xiu mei", 1097 * "threshHigh":"10", 1098 * "threshLow":"0.01", 1099 * "threshold":0.54, 1100 * "type":"major" 1101 * } 1102 * } 1103 */ 1104 public static final String K_DUAL_WAKEUP_INIT_ENV = "DUAL_WAKEUP_INIT_ENV"; 1105 1106 /** 1107 * voip_aec资源的路径<br> 1108 * <p> 1109 * 取值:<br> 1110 * 是否必需:否<br> 1111 * 默认值: 1112 */ 1113 public static final String K_VOIP_AEC_BIN = "VOIP_AEC_BIN"; 1114 1115 /** 1116 * voip_agc资源的路径<br> 1117 * <p> 1118 * 取值:<br> 1119 * 是否必需:否<br> 1120 * 默认值: 1121 */ 1122 public static final String K_VOIP_AGC_BIN = "VOIP_AGC_BIN"; 1123 1124 /** 1125 * 使用voip功能<br> 1126 * <p> 1127 * 取值:line_4<br> 1128 * 是否必需:否<br> 1129 * 默认值:无 1130 */ 1131 public static final String K_VOIP_TYPE = "VOIP_TYPE"; 1132 1133 /** 1134 * 识别时不要过滤唤醒词<br> 1135 * <p> 1136 * 取值:true or false<br> 1137 * 是否必需:否<br> 1138 * 默认值:false 1139 */ 1140 public static final String K_ASR_NOT_DROP_WAKEUP = "ASR_NOT_DROP_WAKEUP"; 1141 1142 /** 1143 * 是否保存ASRPP的音频(调试项)<br> 1144 * 已被废弃,代替: {@linkplain DDS#setAudioDebug} 1145 * 1146 * @see DDS#setAudioDebug(boolean) 1147 */ 1148 @Deprecated 1149 public static final String K_ASRPP_DEBUG = "ASRPP_DEBUG"; 1150 1151 /** 1152 * 性别识别资源的绝对路径<br> 1153 * <p> 1154 * 取值:绝对路径字符串<br> 1155 * 是否必需:否<br> 1156 * 默认值:内置资源 1157 */ 1158 public static final String K_ASRPP_GENDER_BIN = "GENDER_BIN"; 1159 1160 /** 1161 * 年龄识别资源的绝对路径<br> 1162 * <p> 1163 * 取值:绝对路径字符串<br> 1164 * 是否必需:否<br> 1165 * 默认值:内置资源 1166 */ 1167 public static final String K_ASRPP_AGE_BIN = "AGE_BIN"; 1168 1169 /** 1170 * 保存ASRPP的音频的单字音频的长度(调试项)<br> 1171 * <p> 1172 * 取值:280ms<br> 1173 * 是否必需:否<br> 1174 * 默认值:280 1175 */ 1176 static final String K_ASRPP_CACHE_PCM_LENGTH = "ASRPP_CACHE_PCM_LENGTH"; 1177 1178 /** 1179 * 已被废弃, 不再支持单麦降噪功能 1180 */ 1181 @Deprecated 1182 public static final String K_NR_ENABLE = "NR_ENABLE"; 1183 1184 /** 1185 * 是否开启 socket 节点功能 <br> 1186 * <p> 1187 * 取值:true or false<br> 1188 * 是否必需:否<br> 1189 * 默认值:true 1190 */ 1191 public static final String K_SOCKET_NODE_ENABLE = "SOCKET_NODE_ENABLE"; 1192 1193 /** 1194 * 是否开启唤醒节点功能 <br> 1195 * 默认 true 1196 */ 1197 public static final String K_WAKEUP_NODE_ENABLE = "WAKEUP_NODE_ENABLE"; 1198 1199 /** 1200 * 是否开启 VAD 节点功能 <br> 1201 * 默认 true 1202 */ 1203 public static final String K_VAD_NODE_ENABLE = "VAD_NODE_ENABLE"; 1204 1205 /** 1206 * 是否开启H5节点功能 <br> 1207 * <p> 1208 * 取值:true or false<br> 1209 * 是否必需:否<br> 1210 * 默认值:false 1211 */ 1212 public static final String K_H5_NODE_ENABLE = "H5_NODE_ENABLE"; 1213 1214 public static final String K_TTS_NODE_ENABLE = "TTS_NODE_ENABLE"; 1215 public static final String K_VOIP_NODE_ENABLE = "VOIP_NODE_ENABLE"; 1216 public static final String K_ASRPP_NODE_ENABLE = "ASRPP_NODE_ENABLE"; 1217 public static final String K_DMS_NODE_ENABLE = "DMS_NODE_ENABLE"; 1218 public static final String K_ASR_NODE_ENABLE = "ASR_NODE_ENABLE"; 1219 public static final String K_UPLOAD_NODE_ENABLE = "UPLOAD_NODE_ENABLE"; 1220 public static final String K_PROCESSOR_NODE_ENABLE = "PROCESSOR_NODE_ENABLE"; 1221 public static final String K_PLAYER_NODE_ENABLE = "PLAYER_NODE_ENABLE"; 1222 public static final String K_RECORDER_NODE_ENABLE = "RECORDER_NODE_ENABLE"; 1223 public static final String K_NLU_NODE_ENABLE = "NLU_NODE_ENABLE"; 1224 1225 /** 1226 * 主唤醒是否重置 webSocket 连接 <br> 1227 * 默认 false 1228 */ 1229 public static final String K_ENABLE_RESET_WEBSOCKETS_IN_MAIN_WAKEUP = "ENABLE_RESET_WEBSOCKETS_IN_MAIN_WAKEUP"; 1230 1231 /** 1232 * 是否开启全局免唤醒节点功能 <br> 1233 * <p> 1234 * 取值:true or false<br> 1235 * 是否必需:否<br> 1236 * 默认值:false 1237 */ 1238 public static final String K_GLOBAL_ASR_WAKEUP_NODE_ENABLE = "GLOBAL_ASR_WAKEUP_NODE_ENABLE"; 1239 1240 /** 1241 * 配置全局免唤醒节点功能可以通过的技能id,默认为 null 表示所有的技能id都可通过 <br> 1242 * <p> 1243 * 取值:JSONArray 字符串,例如 ["34223","1515"]<br> 1244 * 是否必需:否<br> 1245 * 默认值:null 1246 */ 1247 public static final String K_GLOBAL_ASR_WAKEUP_SKILL_ID = "GLOBAL_ASR_WAKEUP_SKILL_ID"; 1248 1249 /** 1250 * 是否开启声纹功能 <br> 1251 * <p> 1252 * 取值:true or false<br> 1253 * 是否必需:否<br> 1254 * 默认值:false 1255 */ 1256 public static final String K_VPRINT_ENABLE = "VPRINT_ENABLE"; 1257 1258 /** 1259 * 是否在唤醒中使用声纹判断 <br> 1260 * 需开启 K_VPRINT_ENABLE 1261 * <p> 1262 * 取值:true or false<br> 1263 * 是否必需:否<br> 1264 * 默认值:false 1265 */ 1266 public static final String K_USE_VPRINT_IN_WAKEUP = "USE_VPRINT_IN_WAKEUP"; 1267 1268 /** 1269 * 声纹资源绝对路径 <br> 1270 * <p> 1271 * 取值:绝对路径字符串<br> 1272 * 是否必需:否<br> 1273 * 默认值:内置资源 1274 */ 1275 public static final String K_VPRINT_BIN = "VPRINT_BIN"; 1276 1277 /** 1278 * 降噪资源的绝对路径<br> 1279 * <p> 1280 * 取值:绝对路径字符串<br> 1281 * 是否必需:否<br> 1282 * 默认值:内置资源 1283 */ 1284 @Deprecated 1285 public static final String K_NR_BIN = "NR_BIN"; 1286 1287 /** 1288 * 唤醒资源的绝对路径<br> 1289 * <p> 1290 * 取值:绝对路径字符串<br> 1291 * 是否必需:否<br> 1292 * 默认值:内置资源 1293 */ 1294 public static final String K_WAKEUP_BIN = "WAKEUP_BIN"; 1295 1296 /** 1297 * 增强唤醒的asr资源的绝对路径<br> 1298 * <p> 1299 * 取值:绝对路径字符串<br> 1300 * 是否必需:否<br> 1301 * 默认值:内置资源 1302 */ 1303 public static final String K_INCREMENT_WAKEUP_BIN = "INCREMENT_WAKEUP_BIN"; 1304 1305 /** 1306 * 增强唤醒的asr的是否使用 Filler 1307 */ 1308 public static final String K_INCREMENT_WAKEUP_FILLER_ENABLE = "INCREMENT_WAKEUP_FILLER_ENABLE"; 1309 1310 /** 1311 * 增强唤醒的asr的 Filler 的 惩罚分数 1312 */ 1313 public static final String K_INCREMENT_WAKEUP_FILLER_PENALTY_SCORE = "INCREMENT_WAKEUP_FILLER_PENALTY_SCORE"; 1314 /** 1315 * 设置vad的pauseTime 1316 */ 1317 public static final String K_INCREMENT_WAKEUP_VAD_PAUSETIME = "INCREMENT_WAKEUP_VAD_PAUSETIME"; 1318 /** 1319 * 就近唤醒mds资源的绝对路径<br> 1320 * <p> 1321 * 取值:绝对路径字符串<br> 1322 * 是否必需:否<br> 1323 * 默认值:内置资源 1324 */ 1325 public static final String K_NEAR_WAKEUP_MDS_BIN = "NEAR_WAKEUP_MDS_BIN"; 1326 1327 /** 1328 * 就近唤醒决策窗口期 <br> 1329 * 修改之后会影响决策速度,取值越小,唤醒结果抛出越早,但是误唤醒概率越大 <br> 1330 * 默认是350 <br> 1331 * 单位:ms <br> 1332 */ 1333 public static final String K_NEAR_WAKEUP_WKP_WND = "NEAR_WAKEUP_WKP_WND"; 1334 1335 /** 1336 * 就近唤醒防抖窗口期 <br> 1337 * 用来解决在K_NEAR_WAKEUP_WKP_WND窗口期之外误唤醒,取值越大,误唤醒概率越小,但是会导致唤醒延迟越大 <br> 1338 * 默认是450 <br> 1339 * 单位:ms <br> 1340 */ 1341 public static final String K_NEAR_WAKEUP_DEBOUNCE_WND = "NEAR_WAKEUP_DEBOUNCE_WND"; 1342 1343 /** 1344 * 是否保存唤醒成功的音频<br> 1345 * <p> 1346 * 取值:true or false<br> 1347 * 是否必需:否<br> 1348 * 默认值:false 1349 */ 1350 @Deprecated 1351 public static final String K_WAKEUP_PCM = "WAKEUP_PCM"; 1352 1353 /** 1354 * OneShot配置<br> 1355 * <p> 1356 * 取值:毫秒<br> 1357 * 若MIDTIME为0 and ENDTIME为0,唤醒后进入识别;若VAD检测超时,则直接退出对话<br> 1358 * 若MIDTIME为0 and ENDTIME不为0,唤醒后进入识别;若ENDTIME超时,则直接退出对话<br> 1359 * 若MIDTIME不为0 and ENDTIME为0,唤醒后进入识别;若MIDTIME超时,则播放欢迎语,继续识别(默认)<br> 1360 * 若MIDTIME不为0 and ENDTIME不为0,唤醒后进入识别;若MIDTIME超时,则播放欢迎语,继续识别,若ENDTIME超时,则直接退出对话<br> 1361 * 是否必需:否<br> 1362 * 默认值:MIDTIME=500ms,ENDTIME=0ms 1363 */ 1364 public static final String K_ONESHOT_MIDTIME = "ONESHOT_MIDTIME"; 1365 public static final String K_ONESHOT_ENDTIME = "ONESHOT_ENDTIME"; 1366 /** 1367 * 云端oneshot方案配置文件 1368 * { 1369 * "enableOneshot":true, 1370 * keepListening: 非oneshot情况下直接进入监听状态,此模式下会将vad.end之后缓存的音频送vad, 这种模式下不会丢音频 1371 * useGreeting: 非oneshot情况下播报唤醒欢迎语,此模式下不会送vad之后的缓存音频到vad, 这种模式下会丢vad.end之后的有效音频 1372 * "oneshotType":"keepListening", 1373 * "cacheWakeupTime":1500 1374 * } 1375 */ 1376 public static final String K_CLOUD_ONESHOT_CONFIG = "CLOUD_ONESHOT_CONFIG"; 1377 1378 /** 1379 * 连接指定产品版本的对话服务<br> 1380 * <p> 1381 * 取值:版本号字符串<br> 1382 * 是否必需:否<br> 1383 * 默认值:本地最新版本 1384 */ 1385 public static final String K_PRODUCT_VERSION = "PRODUCT_VERSION"; 1386 1387 /** 1388 * 预置本地识别资源,可参见net.bin<br> 1389 * <p> 1390 * 取值:资源全路径<br> 1391 * 是否必需:否<br> 1392 * 默认值:nil 1393 */ 1394 public static final String K_CUSTOM_ASR_NETBIN = "CUSTOM_ASR_NETBIN"; 1395 1396 /** 1397 * 预置本地识别资源,可参见duicore ngram.bin<br> 1398 * <p> 1399 * 取值:资源全路径<br> 1400 * 是否必需:否<br> 1401 * 默认值:nil 1402 */ 1403 public static final String K_CUSTOM_ASR_BIN = "CUSTOM_ASR_BIN"; 1404 1405 /** 1406 * 更新成功后是否重新load lasa文件<br> 1407 * <p> 1408 * 取值:true/false<br> 1409 * 是否必需:否<br> 1410 * 默认值:false 1411 */ 1412 static final String K_ENABLE_RELOAD_LASA_SO = "ENABLE_RELOAD_LASA_SO"; 1413 1414 /** 1415 * 优化gram编译速度,需要保证 dui 控制台每个技能语义槽的必须选项勾选,符合 net.bin 扩展要求<br> 1416 * <p> 1417 * 取值:true false<br> 1418 * 是否必需:否<br> 1419 * 默认值:nil 1420 */ 1421 public static final String K_USE_GRAM_BUILD_OPT = "USE_GRAM_BUILD_OPT"; 1422 1423 /** 1424 * 此配置外部调用作废,如需要动态修改端口号可配置: K_ENABLE_DYNAMIC_PORT, 并在初始化成功的回调中通过 DDS.BUS_SERVER_ADDR 获取当前使用的端口号 1425 * <p> 1426 * SDK 通信地址<br> 1427 * <p> 1428 * 取值:ip:port<br> 1429 * SDK初始化过程中出现持续的错误日志"connection confused"时,可尝试更改通信地址解决<br> 1430 * 是否必需:否<br> 1431 * 默认值:127.0.0.1:50001 1432 */ 1433 static final String K_LBRIDGE_ADDR = "LBRIDGE_ADDR"; 1434 1435 /** 1436 * 弱网环境配置,如使用的是弱网环境,则配置为true 1437 * <br> 1438 * <p> 1439 * 取值:true或者false<br> 1440 * 是否必需:否<br> 1441 * 默认值:false 1442 */ 1443 static final String K_USE_WEAK_NETWORK = "USE_WEAK_NETWORK"; 1444 1445 /** 1446 * 是否使用性别识别<br> 1447 * <p> 1448 * 取值:true或者false<br> 1449 * 是否必需:否<br> 1450 * 默认值:false 1451 */ 1452 public static final String K_USE_GENDER = "USE_GENDER"; 1453 1454 /** 1455 * 是否使用年龄识别<br> 1456 * <p> 1457 * 取值:true或者false<br> 1458 * 是否必需:否<br> 1459 * 默认值:false 1460 */ 1461 public static final String K_USE_AGE = "USE_AGE"; 1462 1463 /** 1464 * 是否使用情绪识别<br> 1465 * <p> 1466 * 取值:true或者false<br> 1467 * 是否必需:否<br> 1468 * 默认值:false 1469 */ 1470 public static final String K_USE_EMOTION = "USE_EMOTION"; 1471 1472 /** 1473 * 识别完成是否播报提示音<br> 1474 * <p> 1475 * 取值:true或者false<br> 1476 * 是否必需:否<br> 1477 * 默认值:false 1478 */ 1479 public static final String K_ASR_TIPS = "ASR_TIPS"; 1480 1481 /** 1482 * VAD资源的磁盘绝对路径,比如/sdcard/vad.bin <br> 1483 * 商务定制版VAD资源的路径。如果开发者对VAD有更高的要求,请联系商务申请定制VAD资源。 1484 * <p> 1485 * 取值:绝对路径的字符串<br> 1486 * 是否必需:否<br> 1487 * 默认值:内置通用VAD资源 1488 */ 1489 public static final String K_VAD_BIN = "VAD_BIN"; 1490 1491 /** 1492 * 识别过程中是否响应唤醒<br> 1493 * <p> 1494 * 取值:true或者false<br> 1495 * 是否必需:否<br> 1496 * 默认值:false(识别过程中会响应唤醒) 1497 */ 1498 public static final String K_NOWAKEUP_WHEN_ASR = "NOWAKEUP_WHEN_ASR"; 1499 1500 /** 1501 * nativeApi超时时间<br> 1502 * <p> 1503 * 取值:毫秒时间<br> 1504 * 是否必需:否<br> 1505 * 默认值:10000<br> 1506 */ 1507 public static final String K_NATIVEAPI_TIMEOUT = "TIMEOUT_NATIVEAPI"; 1508 1509 /** 1510 * 服务器下发 nativeApi 后,如果没有注册 nativeApi 回调, 1511 * 会直接回报错误给服务器,之后服务器再下发这个错误,对话可以加上播报,如果不配置则不播报 1512 * <p> 1513 * 取值:播报提示<br> 1514 * 默认值:空,即不播报 1515 * </p> 1516 */ 1517 public static final String K_NATIVEAPI_NO_SUBSCRIBER_TIP = "NATIVEAPI_NO_SUBSCRIBER_TIP"; 1518 1519 /** 1520 * 对话响应超时时间<br> 1521 * <p> 1522 * 取值:毫秒时间<br> 1523 * 是否必需:否<br> 1524 * 默认值:10000<br> 1525 * @see DDSConfig#K_ENABLE_QSG_DM_TIMEOUT 全双工需要该配置开启 1526 */ 1527 public static final String K_DM_TIMEOUT = "TIMEOUT_DM"; 1528 1529 /** 1530 * 开启全双工对话响应超时时间<br> 1531 * <p> 1532 * 取值:毫秒时间<br> 1533 * 是否必需:否<br> 1534 * 默认值:false<br> 1535 */ 1536 public static final String K_ENABLE_QSG_DM_TIMEOUT = "ENABLE_QSG_DM_TIMEOUT"; 1537 1538 /** 1539 * 离线语义超时时间<br> 1540 * <p> 1541 * 取值:毫秒时间<br> 1542 * 是否必需:否<br> 1543 * 默认值:1000<br> 1544 */ 1545 public static final String K_NLU_TIMEOUT = "NLU_TIMEOUT"; 1546 1547 /** 1548 * 云端建连超时时间<br> 1549 * <p> 1550 * 取值:true or false<br> 1551 * 是否必需:否<br> 1552 * 默认值:false 1553 */ 1554 public static final String K_WEBSOCKET_TIMEOUT = "PING_TIMEOUT"; 1555 1556 /** 1557 * 音频焦点处理模式<br> 1558 * <p> 1559 * 取值:internal or external<br> 1560 * internal:由SDK内部处理音频焦点的获取与释放<br> 1561 * external:由外部根据对话状态及TTS播报状态处理对话及TTS等的焦点问题,SDK不再获取或者释放焦点<br> 1562 * 是否必需:否<br> 1563 * 默认值:internal 1564 */ 1565 public static final String K_AUDIO_FOCUS_MODE = "AUDIO_FOCUS_MODE"; 1566 1567 /** 1568 * SDK初始化超时时间,单位秒<br> 1569 * <p> 1570 * 是否必需:否<br> 1571 * 默认值:60<br> 1572 */ 1573 public static final String K_INIT_TIMEOUT = "INIT_TIMEOUT"; 1574 1575 /** 1576 * 是否支持本地识别增量更新 1577 * 支持: true 1578 * 不支持:false 1579 * 默认值:false 1580 */ 1581 public static final String K_SUPPORT_INCREMENT_WAKEUP = "SUPPORT_INCREMENT_WAKEUP"; 1582 1583 static final String K_CLOSE_TIPS = "CLOSE_TIPS"; 1584 1585 public static final String K_CUSTOM_NATIVEPATH = "CUSTOM_NATIVEPATH"; 1586 1587 /** 1588 * 全双工中关闭过滤消息的提示音<br> 1589 * <p> 1590 * 取值:true or false<br> 1591 * 是否必需:否<br> 1592 * 默认值:false<br> 1593 */ 1594 public static final String K_FULLDUPLEX_CLOSE_DISCARD_TIPS = "FULLDUPLEX_CLOSE_DISCARD_TIPS"; 1595 1596 /** 1597 * 云端asr++参数,设置为true后云端识别返回性别/年龄/情绪等字段<br> 1598 * <p> 1599 * 取值:true or false<br> 1600 * 是否必需:否<br> 1601 * 默认值:false<br> 1602 */ 1603 public static final String K_ENABLE_CLOUD_ASRPP = "ENABLE_CLOUD_ASRPP"; 1604 1605 /** 1606 * 离线ASR支持指定自定义技能优先级 1607 * <p> 1608 * 取值:string skillID:2021031600000058 1609 * 是否必须 :否 <br> 1610 * 默认值: "" 1611 */ 1612 public static final String K_BUILTIN_SEMANTIC_SKILLID = "BUILTIN_SEMANTIC_SKILLID"; 1613 1614 /** 1615 * 非对话过程中不feed可见即可说引擎,优化可见即可说引擎cpu占用 1616 * <p> 1617 * 取值:true/false 1618 * 是否必须 :否 <br> 1619 * 默认值: false 1620 */ 1621 public static final String K_DISABLE_HOTWORD_FEED_PCM = "DISABLE_HOTWORD_FEED_PCM"; 1622 1623 /*** 1624 * <p> 1625 * 取值:true or false<br> 1626 * 是否必需:否<br> 1627 * 默认值:false<br> 1628 */ 1629 public static final String K_ENABLE_POSITIONING_MODE_UNDER_DELAY_LISTNING = "K_ENABLE_POSITIONING_MODE_UNDER_DELAY_LISTNING"; 1630 1631 /** 1632 * 使用本地音频服务通道,开通后部分音频不再走bus通道<br> 1633 * <p> 1634 * 取值:true or false<br> 1635 * 是否必需:否<br> 1636 * 默认值:false<br> 1637 */ 1638 public static final String K_USE_LOCAL_PCM_SERVER = "USE_LOCAL_PCM_SERVER"; 1639 1640 public static final String K_WAKEUP_ROLL_BACK = "WAKEUP_ROLL_BACK"; 1641 1642 /** 1643 * 对话接口里是否返回 tts 的 speakUrl <br> 1644 * 默认 true 1645 * <ul> 1646 * <li>true 对话接口返回 speakUrl</li> 1647 * <li>false 对话接口不返回 speakUrl,由sdk主动使用云端tts合成</li> 1648 * </ul> 1649 */ 1650 public static final String K_ENABLE_STREAM_URL = "ENABLE_STREAM_URL"; 1651 1652 /** 1653 * 是否开启首字上屏的优化,使用本地识别做首字上屏操作,提高反馈时间 1654 */ 1655 public static final String K_ENABLE_FIRST_WORD_OPTIMIZATION = "ENABLE_FIRST_WORD_OPTIMIZATION"; 1656 1657 /** 1658 * 首字上屏时间优化资源,支持用户自定义 1659 */ 1660 public static final String K_FIRST_WORD_BIN = "FIRST_WORD_BIN"; 1661 1662 /** 1663 * 设置首字缓存音频长度,单位ms,类型int 1664 */ 1665 public static final String K_FIRST_WORD_CACHE_LENGTH = "MAX_FIRST_WORD_CACHE_LENGTH"; 1666 1667 /** 1668 * 设置执行nativeCommand或者NativeApi等阻塞操作时,丢弃对话的音频数据,防止识别结果累积上屏 1669 * 默认值:false 1670 */ 1671 public static final String K_DROP_AUDIO_WHEN_NATIVE = "DROP_AUDIO_WHEN_NATIVE"; 1672 1673 /** 1674 * 是否使用本地对话 <br> 1675 * 默认值:false 1676 */ 1677 public static final String K_ENABLE_LOCAL_DDS = "ENABLE_LOCAL_DDS"; 1678 1679 static final String K_TIPS_PATH = "TIPS_PATH"; 1680 1681 /** 1682 * tts播报前添加空音频,用于规避部分机型出现爆破音 <br> 1683 * <p> 1684 * 取值:ms <br> 1685 * 是否必需:否 <br> 1686 * 默认值:0 1687 */ 1688 static final String K_TTS_HEAD_NULL_WAV = "TTS_HEAD_NULL_WAV"; 1689 1690 /** 1691 * tts播报尾部添加空音频,用于规避部分机型出现爆破音 <br> 1692 * <p> 1693 * 取值:ms <br> 1694 * 是否必需:否 <br> 1695 * 默认值:0 1696 */ 1697 public static final String K_TTS_TAIL_NULL_WAV = "TTS_TAIL_NULL_WAV"; 1698 1699 static final String K_UPDATE_DUICORE_CONFIG = "UPDATE_DUICORE_CONFIG"; 1700 static final String K_UPDATE_CUSTOM_CONFIG = "UPDATE_CUSTOM_CONFIG"; 1701 public static final String K_DATA_HOME = "DATA_HOME"; 1702 static final String K_DDS_PROTOCOL_VERSION_CODE = "DDS_PROTOCOL_VERSION_CODE"; 1703 static final String K_DDS_SDK_VERSION = "DDS_SDK_VERSION"; 1704 /** 1705 * 是否开启数据更新功能 <br> 1706 * 默认 true 1707 */ 1708 public static final String K_USE_UPDATE = "USE_UPDATE"; 1709 /** 1710 * 是否开启大数据上传功能 <br> 1711 * 默认 true 1712 */ 1713 public static final String K_USE_UPLOAD = "USE_UPLOAD"; 1714 /** 1715 * 是否开启推送功能 <br> 1716 * 默认 true 1717 */ 1718 public static final String K_USE_PUSH = "USE_PUSH"; 1719 1720 static final String K_AUTH_PLATFORM = "AUTH_PLATFORM"; 1721 static final String K_AUTH_PACKAGE_NAME = "AUTH_PACKAGE_NAME"; 1722 static final String K_AUTH_SDK_NAME = "AUTH_SDK_NAME"; 1723 static final String K_AUTH_SIGNATURE = "AUTH_SIGNATURE"; 1724 static final String K_DEVICE_INFO = "DEVICE_INFO"; 1725 static final String K_SECURITY_CODE = "S_CODE"; 1726 1727 static final String K_MINIMUM_STORAGE = "MINIMUM_STORAGE"; 1728 1729 /** 1730 * 是否使用系统提供的 dns 解析 <br> 1731 * 默认 false 使用思必驰提供的dns解析 1732 */ 1733 public static final String K_USE_SYSTEM_DNS = "USE_SYSTEM_DNS"; 1734 1735 static final String K_DNS_SERVER = "DNS_SERVER"; 1736 static final String K_ENABLE_CLOUD_VAD = "ENABLE_CLOUD_VAD";//云端vad 1737 static final String K_TTS_PLAY_BEFORE_TIME = "TTS_PLAY_BEFORE_TIME";//TTS播放前延迟时间 1738 static final String K_TTS_PLAY_AFTER_TIME = "TTS_PLAY_AFTER_TIME";//TTS结束后延迟时间 1739 1740 static final String K_LOGID_WAKEUP = "LOGID_WAKEUP";//唤醒数据上报log id 1741 1742 static final String K_USE_LDM_GRAM = "USE_LDM_GRAM"; 1743 1744 static final String K_OPT_ONESHOT_DROP_WORD = "OPT_ONESHOT_DROP_WORD";// 开启oneshot 模式下云端识别唤醒词的优化,你好小驰,好小驰,小驰, 默认关闭 1745 1746 static final String K_ENABLE_DM_STREAM_DISPLAY = "ENABLE_DM_STEAM_DISPLAY"; 1747 1748 public static final String K_FREE_DIALECT_PARAM = "FREE_DIALECT_PARAM"; 1749 1750 /** 1751 * 英文转大写 1752 * <p> 1753 * 取值:true或者false<br> 1754 * 是否必需:否<br> 1755 * 默认值:false 1756 */ 1757 public static final String K_ENABLE_REC_UPPERCASE = "ENABLE_REC_UPPERCASE"; 1758 1759 public Map<String, String> map = new HashMap<>(); 1760 private ConfigCheck mConfigCheck = new ConfigCheck(); 1761 1762 /** 1763 * DDSConfig构造方法 1764 */ 1765 public DDSConfig() { 1766 addConfig(K_DDS_PROTOCOL_VERSION_CODE, Version.DDS_PROTOCOL_VERSION_CODE); 1767 addConfig(K_DDS_SDK_VERSION, Version.DDS_SDK_VERSION_NAME); 1768 addConfig(K_DNS_SERVER, DDS.DNS_SERVER); 1769 addConfig(K_AUTH_TYPE, AuthType.PROFILE); 1770 addConfig(K_USE_LDM_GRAM, "true"); 1771 addConfig(K_ENABLE_STREAM_URL, "true"); 1772 addConfig(K_SUPPORT_INCREMENT_WAKEUP, "false"); 1773 addConfig(K_OPT_ONESHOT_DROP_WORD, "true"); 1774 1775 addConfig(K_USE_PUSH, "false"); 1776 addConfig(K_USE_UPDATE, "false"); 1777 addConfig(K_USE_UPLOAD, "true"); 1778 addConfig(K_USER_ID, "USER2021ID"); 1779 addConfig(K_USE_VAD_IN_FULLDUPLEX, "true"); 1780 addConfig(K_ENABLE_QSG_IN_LDM,"true"); 1781 addConfig(K_TTS_CACHE, "true"); 1782 addConfig(K_MESSAGE_QUEUE_MAX_SIZE, 500); 1783 1784 addConfig(K_WAKEUP_NODE_ENABLE, "true"); //开启唤醒节点 1785 addConfig(K_VAD_NODE_ENABLE, "true"); 1786 addConfig(K_TTS_NODE_ENABLE, "true"); 1787 addConfig(K_VOIP_NODE_ENABLE, "true"); 1788 addConfig(K_ASRPP_NODE_ENABLE, "true"); 1789 addConfig(K_DMS_NODE_ENABLE, "true"); 1790 addConfig(K_ASR_NODE_ENABLE, "true"); 1791 addConfig(K_UPLOAD_NODE_ENABLE, "true"); 1792 addConfig(K_PROCESSOR_NODE_ENABLE, "true"); 1793 addConfig(K_PLAYER_NODE_ENABLE, "true"); 1794 addConfig(K_RECORDER_NODE_ENABLE, "true"); 1795 addConfig(K_NLU_NODE_ENABLE, "true"); 1796 1797 addConfig(K_SOCKET_NODE_ENABLE, "false"); //默认关闭socket节点 1798 addConfig(K_H5_NODE_ENABLE, "false"); //关闭H5节点 1799 1800 addConfig(K_USE_SYSTEM_DNS, "true"); 1801 } 1802 1803 /** 1804 * 设置config 1805 * 1806 * @param key key 1807 * @param value value 1808 * @return DDSConfig DDSConfig 1809 */ 1810 public DDSConfig addConfig(final String key, final String value) { 1811 map.put(key, value); 1812 return this; 1813 } 1814 1815 /** 1816 * 设置config 1817 * 1818 * @param key key 1819 * @param value value 1820 * @return DDSConfig DDSConfig 1821 */ 1822 public DDSConfig addConfig(final String key, final int value) { 1823 map.put(key, String.valueOf(value)); 1824 return this; 1825 } 1826 1827 /** 1828 * 设置config 1829 * 1830 * @param key key 1831 * @param value value 1832 * @return DDSConfig DDSConfig 1833 */ 1834 public DDSConfig addConfig(final String key, final long value) { 1835 map.put(key, String.valueOf(value)); 1836 return this; 1837 } 1838 1839 /** 1840 * 设置config 1841 * 1842 * @param key key 1843 * @param value value 1844 * @return DDSConfig DDSConfig 1845 */ 1846 public DDSConfig addConfig(final String key, final float value) { 1847 map.put(key, String.valueOf(value)); 1848 return this; 1849 } 1850 1851 /** 1852 * 获取config中key对应的value 1853 * 1854 * @param key key 1855 * @return String key对应的值 1856 */ 1857 public String getConfig(final String key) { 1858 return map.get(key); 1859 } 1860 1861 /** 1862 * 获取config中是否包含key 1863 * 1864 * @param key key 1865 * @return boolean true:包含 false:不包含 1866 */ 1867 public boolean containsConfig(String key) { 1868 return map.containsKey(key); 1869 } 1870 1871 /** 1872 * toString 1873 * 1874 * @return String String 1875 */ 1876 @Override 1877 public String toString() { 1878 StringBuilder sb = new StringBuilder("{\n"); 1879 Iterator it = map.entrySet().iterator(); 1880 while (it.hasNext()) { 1881 Map.Entry pair = (Map.Entry) it.next(); 1882 sb.append(pair.getKey()); 1883 sb.append("='"); 1884 sb.append(pair.getValue()); 1885 sb.append("';\n"); 1886 } 1887 sb.append("}"); 1888 return sb.toString(); 1889 } 1890 1891 /** 1892 * 获取config中key对应的value 1893 * 1894 * @param key key 1895 * @return String key对应的值 1896 */ 1897 public int getIntConfig(String key, int defaultValue) { 1898 String v = map.get(key); 1899 if (!TextUtils.isEmpty(v)) { 1900 try { 1901 return Integer.parseInt(v); 1902 } catch (Exception e) { 1903 } 1904 } 1905 return defaultValue; 1906 } 1907 1908 /** 1909 * 获取config中key对应的value 1910 * 1911 * @param key key 1912 * @return String key对应的值 1913 */ 1914 public boolean getBooleanConfig(final String key) { 1915 return getBooleanConfig(key, false); 1916 } 1917 1918 /** 1919 * 获取config中key对应的value 1920 * 1921 * @param key key 1922 * @return String key对应的值 1923 */ 1924 public boolean getBooleanConfig(String key, boolean defaultValue) { 1925 String v = map.get(key); 1926 if (!TextUtils.isEmpty(v)) { 1927 return Boolean.parseBoolean(v); 1928 } 1929 return defaultValue; 1930 } 1931 1932 /** 1933 * 检查必须的配置有没有设置 1934 * 1935 * @throws IllegalArgumentException 如果没有设置,会抛出IllegalArgumentException 1936 */ 1937 public void checkConfigs() throws IllegalArgumentException { 1938 AILog.i(TAG, "checkConfigs"); 1939 mConfigCheck.check(); 1940 String mapStr = AIGsonUtil.getInstance().toJson(map); 1941 AILog.d(TAG, "ddsConfigJson->\n" + mapStr); 1942 String[] neededKeys = new String[]{ 1943 K_DATA_HOME, 1944 K_PRODUCT_ID, 1945 K_DDS_PROTOCOL_VERSION_CODE, 1946 K_ALIAS_KEY, 1947 K_AUTH_TYPE, 1948 K_API_KEY, 1949 //K_PRODUCT_KEY, 1950 //K_PRODUCT_SECRET 1951 }; 1952 for (String neededKey : neededKeys) { 1953 if (!map.containsKey(neededKey)) { 1954 AILog.i(TAG, toString()); 1955 throw new IllegalArgumentException("DDS config is invalid, lost needed param:" + neededKey); 1956 } 1957 } 1958 1959 if (map.containsKey(K_CACHE_PATH) && !map.containsKey(K_CACHE_SIZE)) { 1960 AILog.i(TAG, toString()); 1961 throw new IllegalArgumentException("DDS config is invalid, lost CACHE_SIZE"); 1962 } 1963 1964 if (map.containsKey(K_PRODUCT_KEY) && !map.containsKey(K_PRODUCT_SECRET)) { 1965 AILog.i(TAG, toString()); 1966 throw new IllegalArgumentException("DDS config is invalid, lost PRODUCT_SECRET"); 1967 } 1968 1969// if (map.containsKey(KEY_USE_LOCAL_DEVICE_NAME) && Boolean.parseBoolean(map.get(KEY_USE_LOCAL_DEVICE_NAME)) && !map.containsKey(K_DEVICE_NAME)) { 1970// AILog.i(TAG, toString()); 1971// throw new IllegalArgumentException("DDS config is invalid, lost DEVICE_NAME"); 1972// } 1973 1974 if (map.containsKey(K_USER_ID)) { 1975 String userId = map.get(K_USER_ID); 1976 AILog.i(TAG, "USER_ID : " + userId); 1977 String encodedUserId = URLEncoder.encode(userId); 1978 map.put(K_USER_ID, encodedUserId); 1979 AILog.i(TAG, "encode USER_ID : " + encodedUserId); 1980 } 1981 } 1982 1983 public DDSConfig copyDeep() { 1984 final DDSConfig newConfig = new DDSConfig(); 1985 newConfig.map = new HashMap<>(this.map); 1986 return newConfig; 1987 } 1988 1989 private class ConfigCheck { 1990 private String errTag = "DDSConfig error: "; 1991 1992 private void check() { 1993 try { 1994 checkRelation(); 1995 } catch (Exception e) { 1996 com.aispeech.dui.manager.AIJavaException.printException(e); 1997 } 1998 } 1999 2000 // 检查配置之间的关联 2001 private void checkRelation() { 2002 // 声纹检查 2003 String vprintEnable = map.get(K_VPRINT_ENABLE); 2004 String useVprintInWakeup = map.get(K_USE_VPRINT_IN_WAKEUP); 2005 String vprintBin = map.get(K_VPRINT_BIN); 2006 if (!TextUtils.equals(vprintEnable, "true") && TextUtils.equals(useVprintInWakeup, "true")) { 2007 Log.e(TAG, errTag + "you must set K_VPRINT_ENABLE = true, before set K_USE_VPRINT_IN_WAKEUP!"); 2008 } 2009 if (!TextUtils.equals(vprintEnable, "true") && !TextUtils.isEmpty(vprintBin)) { 2010 Log.e(TAG, errTag + "you must set K_VPRINT_ENABLE = true, before set K_VPRINT_BIN!"); 2011 } 2012 2013 // 唤醒资源设置检查 2014 if (!TextUtils.isEmpty(map.get(K_MIC_ARRAY_WAKEUP_CFG))) { 2015 Log.e(TAG, errTag + "K_MIC_ARRAY_WAKEUP_CFG is Deprecated, Replaced by K_WAKEUP_BIN!"); 2016 } 2017 2018 // 唤醒保存音频配置检查 2019 if (!TextUtils.isEmpty(map.get(K_WAKEUP_PCM))) { 2020 Log.e(TAG, errTag + "K_WAKEUP_PCM is Deprecated, Replaced by K_WAKEUP_DEBUG!"); 2021 } 2022 } 2023 } 2024 2025}