模块 API
mod_tencent
mod_tencent 是一个ASR/TTS模块,它通过HTTPS与腾讯云端进行语音合成(TTS)交互,通过WebSocket与腾讯云端进行语音识别(ASR)交互。
ASR
mod_tencent 中包含 ASR 服务,提供 asr 引擎 tencent 和 tencent_asr ,tencent 使用 WebSocket 与腾讯语音识别接口交互,腾讯接口文档参见实时语音识别接口,tencent_asr 使用 HTTP REST 与腾讯语音一句话识别接口交互,腾讯接口文档参见一句话识别接口。
tencent 引擎参数说明
腾讯 tencent asr 引擎参数分为配置文件参数与临时参数。配置文件参数可在界面或xml文件内进行修改,重载模块生效。临时参数一般跟随命令出现,该参数只会在当前这句话中生效。临时参数与配置文件参数部分参数存在重叠,当两者同名参数同时出现时,临时参数优先级高于配置文件参数。
配置文件参数说明
<asr-ws> <param name="asr-url" value="wss://asr.cloud.tencent.com/asr/v2"/> <param name="app-id" value=""/> <param name="secret-id" value=""/> <param name="secret-key" value=""/> <param name="model-type" value="8k_zh_large"/> <param name="need-vad" value="1"/> <param name="filter-empty-result" value="0"/> <param name="threshold" value="400"/> <param name="vad-mode" value="-2"/> <param name="start-input-timers" value="true"/> <param name="no-input-timeout" value="5000"/> <param name="speech-timeout" value="5000"/> <param name="confidence-threshold" value="400"/> <param name="silence-ms" value="500"/> <!--<param name="voice-ms" value="500"/>--> <param name="segment-recording-prefix" value=""/> <param name="segment-recording-ext" value=""/> <param name="disable-engine-data" value=""/> <param name="speech-noise-threshold" value="0"/> <!-- [-1, 1] --> <param name="hotword-list" value=""/> <param name="hotword-id" value=""/> <param name="customization-id" value=""/> <param name="convert-num-mode" value=""/> <param name="filter-dirty" value="2"/> <param name="filter-modal" value="1"/> <param name="filter-punc" value="0"/> <param name="pcm-segment-recording-prefix" value=""/> <!-- <param name="buffer-keep-ms" value="500"/> --> </asr-ws>
asr-url: 腾讯asr语音识别的地址。app-id: 腾讯项目ID,获取方式参见API 密钥管理页面。secret-id: 秘钥ID,详情参见API 密钥管理页面。secret-key: 秘钥,详情参见API 密钥管理页面。model-type:语言引擎模型类型,详情参考实时语音识别接口中的engine_model_type。need-vad:是否开启腾讯asr vad功能,默认值为1,即开启vad功能。filter-empty-result:是否回调识别空结果,0:回调空结果,1:不回调空结果,默认值为0。threshold:vad检测的噪音阈值,默认值为400。vad-mode:vad模式,详见VAD。start-input-timers:开启收集语音计时,默认false。no-input-timeout:无输入(未检测到通话)超时时间,单位毫秒。默认值5000。speech-timeout:语音超时时间,单位毫秒。默认值为5000,最小值为2000。confidence-threshold:静音阈值,默认值400。silence-ms:语音断句检测阈值,单位毫秒。默认值1000。voice-ms:在指定时间内,如果连续检测到说话声音大于threshold。则认为说话人开始说话,单位毫秒,默认值为240。segment-recording-prefix:分段录音路径,若为空则不开启分段录音,默认值为空。segment-recording-ext:分段录音文件后缀,缺省为wav。disable-engine-data:是否在asr识别结果内添加engine_data param,默认为false。speech-noise-threshold: 噪音参数阈值,默认为0,取值范围:[-1,1]。hotword-list:临时热词表,默认不携带。详情参考实时语音识别接口中的hotword_list。hotword-id:热词表 id,默认不携带。详情参考实时语音识别接口中的hotword_id。customization-id:自学习模型 id,默认不携带。详情参考实时语音识别接口中的customization_id。convert-num-mode:是否进行阿拉伯数字智能转换,0:不转换,直接输出中文数字,1:根据场景智能转换为阿拉伯数字,3: 打开数学相关数字转换。默认值为1。filter-dirty:是否过滤脏词,0:不过滤脏词;1:过滤脏词;2:将脏词替换为*,默认为0。filter-modal:是否过滤语气词,0:不过滤语气词;1:部分过滤;2:严格过滤,默认为0。filter-punc:是否过滤句末的句号,0:不过滤句末的句号;1:过滤句末的句号,默认为0。pcm-segment-recording-prefix:分段PCM原始识别语音数据录音路径,若为空则不开启分段录音,默认值为空。buffer-keep-ms:tts非打断模式下,在tts播放结束前多少毫秒开始语音识别,防止用户在tts播放结束前抢先说一些字,没有被识别到,如果不使用buffer-keep-ms,可能会造成语音识别语义的误差,比如将不需要识别成需要。单位为毫秒,缺省值为 500,最大值为10000,也就是最小为500ms,最大为10s。
临时参数说明
例子:
play_and_detect_speech /root/10s.wav detect:tencent {start-input-timers=true,no-input-timeout=5000,speech-timeout=5000,asr-result-fire-session-event=true,param-done=true}default
这里的 start-input-timers、no-input-timeout、speech-timeout会覆盖配置文件中的参数,而asr-result-fire-session-event为临时参数所特有的。
所有支持的临时参数如下:
param-done:作为最后一个参数传入,表上所有参数传入完毕。no-input-timeout:无输入(未检测到通话)超时时间,单位毫秒。默认值5000。speech-timeout:语音超时时间,单位毫秒。默认值为5000,最小值为2000。start-input-timers:开启收集语音计时,默认false。confidence-threshold:静音阈值,默认值400。silence-ms:静音检测时间,单位毫秒。默认值500,最小值20。vad-mode:vad模式,详见VAD。add-punc:是否添加标点符号,默认值为false。auto-resume:语音识别完成后是否重置asr,默认值为false。asr-result-fire-switch-event:语音识别完成后是否发送DETECTED_SPEECH事件,默认值为false。asr-result-fire-session-event:是否将识别结果放入session event queue内,默认值为false。app-uuid:执行本次asr命令时的标识uuid,最终会放入DETECTED_SPEECH事件内,作为回调辨别依据。segment-recording-prefix:分段录音路径,若为空则不开启分段录音,默认值为空。segment-recording-ext:分段录音文件后缀,缺省为wav。disable-engine-data:是否在asr识别结果内添加engine_data param,默认为false。speech-noise-threshold: 噪音参数阈值,默认为0,取值范围:[-1,1]。model-type:语言引擎模型类型,详情参考实时语音识别接口中的engine_model_type。need-vad:是否开启腾讯asr vad功能,默认值为1,即开启vad功能。filter-empty-result:是否回调识别空结果,0:回调空结果,1:不回调空结果,默认值为0。filter-dirty:是否过滤脏词,0:不过滤脏词;1:过滤脏词;2:将脏词替换为*,默认为0。filter-modal:是否过滤语气词,0:不过滤语气词;1:部分过滤;2:严格过滤,默认为0。filter-punc:是否过滤句末的句号,0:不过滤句末的句号;1:过滤句末的句号,默认为0。hotword-list:临时热词表,默认不携带。详情参考实时语音识别接口中的hotword_list。customization-id:自学习模型 id,默认不携带。详情参考实时语音识别接口中的customization_id。convert-num-mode:是否进行阿拉伯数字智能转换,0:不转换,直接输出中文数字,1:根据场景智能转换为阿拉伯数字,3: 打开数学相关数字转换。默认值为1。pcm-segment-recording-prefix:分段PCM原始识别语音数据录音路径,若为空则不开启分段录音,默认值为空,文件名为引擎识别返回的message_id。buffer-keep-ms:tts非打断模式下,在tts播放结束前多少毫秒开始语音识别,防止用户在tts播放结束前抢先说一些字,没有被识别到,如果不使用buffer-keep-ms,可能会造成语音识别语义的误差,比如将不需要识别成需要。单位为毫秒,缺省值为 500,最大值为10000,也就是最小为500ms,最大为10s。asr-mode:识别模式,参数的值有short-stream、continue-stream、continue-all-stream和dictation-stream。short-stream为一句话识别模式,websocket的方式暂未实现,如果想使用一句话识别模式,可以使用基于HTTP协议的tencent_rest引擎。continue-stream和continue-all-stream均为连续识别模式,只不过前者在非打断模式下不会发送语音流到引擎,后者会发送所有的语音流到引擎。这样在非打断模式的场景中,continue-all-stream模式会收到多个识别结果,最后会将这些文本使用|连接起来,比如您好|请问是小樱桃吗。text-wait-timeout:该参数只有在asr-mode值为continue-all-stream的场景中才生效,其作用是在非打断模式下,等待放音结束后的识别结果的超时时间,如果text-wait-timeout时间内没有收到识别结果,则会发送放音期间缓存的所有文本,如果收到,则和会之前缓存的文本一块发送。参数缺省值为silence-ms的值。
调用示例
以一个系统路由为例,先执行 app answer,然后调用 play_and_detect_speech 执行 asr 引擎。
answer play_and_detect_speech /root/10s.wav detect:tencent {start-input-timers=true,no-input-timeout=5000,speech-timeout=5000}default
上述命令中的/root/10s.wav为容器内已存在的音频文件,请根据实际情况更改。
若您使用XCC进行语音合成,请参考XCC DETECT,同时将示例中的asr_engine更换为tencent。
tencent_asr 引擎参数说明
腾讯 tencent_asr 引擎参数分为配置文件参数与临时参数。配置文件参数可在界面或xml文件内进行修改,重载模块生效。临时参数一般跟随命令出现,该参数只会在当前这句话中生效。临时参数与配置文件参数部分参数存在重叠,当两者同名参数同时出现时,临时参数优先级高于配置文件参数。
配置文件参数说明
<asr-rest> <param name="asr-url" value="https://asr.tencentcloudapi.com"/> <param name="secret-id" value=""/> <param name="secret-key" value=""/> <param name="threshold" value="400"/> <param name="vad-mode" value="-2"/> <param name="start-input-timers" value="true"/> <param name="no-input-timeout" value="5000"/> <param name="speech-timeout" value="5000"/> <param name="confidence-threshold" value="400"/> <param name="silence-ms" value="500"/> <param name="eng-service-type" value="16k_zh_dialect"/> <param name="hotword-list" value=""/> <param name="hotword-id" value=""/> <param name="customization-id" value=""/> <param name="convert-num-mode" value=""/> <param name="filter-dirty" value="2"/> <param name="filter-modal" value="1"/> <param name="filter-punc" value="0"/> <param name="word-info" value="0"/> </asr-rest>
asr-url: 腾讯asr语音识别的地址。app-id: 腾讯项目ID,获取方式参见API 密钥管理页面。secret-id: 秘钥ID,详情参见API 密钥管理页面。secret-key: 秘钥,详情参见API 密钥管理页面。need-vad:是否开启腾讯asr vad功能,默认值为1,即开启vad功能。threshold:vad检测的噪音阈值,默认值为400。vad-mode:vad模式,详见VAD。start-input-timers:开启收集语音计时,默认false。no-input-timeout:无输入(未检测到通话)超时时间,单位毫秒。默认值5000。speech-timeout:语音超时时间,单位毫秒。默认值为5000,最小值为2000。confidence-threshold:静音阈值,默认值400。silence-ms:语音断句检测阈值,单位毫秒。默认值1000。speech-noise-threshold: 噪音参数阈值,默认为0,取值范围:[-1,1]。hotword-list:临时热词表,默认不携带。详情参考实时语音识别接口中的hotword_list。hotword-id:热词表 id,默认不携带。详情参考实时语音识别接口中的hotword_id。customization-id:自学习模型 id,默认不携带。详情参考实时语音识别接口中的customization_id。convert-num-mode:是否进行阿拉伯数字智能转换,0:不转换,直接输出中文数字,1:根据场景智能转换为阿拉伯数字。filter-dirty:是否过滤脏词,0:不过滤脏词;1:过滤脏词;2:将脏词替换为*,默认为0。filter-modal:是否过滤语气词,0:不过滤语气词;1:部分过滤;2:严格过滤,默认为0。filter-punc:是否过滤句末的句号,0:不过滤句末的句号;1:过滤句末的句号,默认为0。eng-service-type:引擎模型类型。8k_zh:中文电话通用; 8k_en:英文电话通用; 6k_zh_dialect:多方言。word-info:是否显示词级别时间戳。0:不显示;1:显示,不包含标点时间戳,2:显示,包含标点时间戳。默认值为 0。
例子:
play_and_detect_speech /root/10s.wav detect:tencent_asr {start-input-timers=true,no-input-timeout=5000,speech-timeout=5000}default
这里的 start-input-timers、no-input-timeout、speech-timeout会覆盖配置文件中的参数。
所有支持的临时参数如下:
no-input-timeout:无输入(未检测到通话)超时时间,单位毫秒。默认值5000。speech-timeout:语音超时时间,单位毫秒。默认值为5000,最小值为2000。start-input-timers:开启收集语音计时,默认false。confidence-threshold:静音阈值,默认值400。silence-ms:静音检测时间,单位毫秒。默认值500,最小值20。vad-mode:vad模式,详见VAD。filter-dirty:是否过滤脏词,0:不过滤脏词;1:过滤脏词;2:将脏词替换为*,默认为0。filter-modal:是否过滤语气词,0:不过滤语气词;1:部分过滤;2:严格过滤,默认为0。filter-punc:是否过滤句末的句号,0:不过滤句末的句号;1:过滤句末的句号,默认为0。hotword-list:临时热词表,默认不携带。详情参考实时语音识别接口中的hotword_list。customization-id:自学习模型 id,默认不携带。详情参考实时语音识别接口中的customization_id。convert-num-mode:是否进行阿拉伯数字智能转换,0:不转换,直接输出中文数字,1:根据场景智能转换为阿拉伯数字。eng-service-type:引擎模型类型。8k_zh:中文电话通用; 8k_en:英文电话通用; 6k_zh_dialect:多方言。word-info:是否显示词级别时间戳。0:不显示;1:显示,不包含标点时间戳,2:显示,包含标点时间戳。默认值为 0。
调用示例
以一个系统路由为例,先执行 app answer,然后调用 play_and_detect_speech 执行 asr 引擎。
answer play_and_detect_speech /root/10s.wav detect:tencent_asr {start-input-timers=true,no-input-timeout=5000,speech-timeout=5000,asr-result-fire-switch-event=true}default
TTS
mod_tencent 中包含 TTS 服务,提供 TTS 引擎 tencent和tencent_tts,即腾讯的语音合成。 tencent 使用 WebSocket 实现了实时语音合成,可以达到边合成边播放的效果。腾讯接口文档参见实时语音合成接口,tencent_tts 使用 HTTP REST 实现了语音合成,腾讯接口文档参见一句话识别接口。
tencent 引擎参数说明
腾讯 tts 参数分为配置文件参数与临时参数。配置文件参数可在界面或xml文件内进行修改,重载模块生效。临时参数一般跟随命令出现,该参数只会在当前这句话中生效。临时参数与配置文件参数部分参数存在重叠,当两者同名参数同时出现时,临时参数优先级高于配置文件参数。
配置文件参数说明
<tts-ws> <param name="tts-url" value="wss://tts.cloud.tencent.com/stream_ws"/> <param name="disable-cache" value="false"/> <param name="app-id" value="a"/> <param name="secret-id" value="i"/> <param name="secret-key" value="s"/> <param name="voice-type" value="1001"/> <param name="volume" value="1"/> <param name="speed" value="1"/> <param name="voice-type" value="0"/> <param name="enable-subtitle" value="false"/> <param name="segment-rate" value="0"/> <param name="emotion-category" value=""/> <param name="emotion-intensity" value="100"/> <param name="fast-voice-type" value=""/> </tts-ws>
tts-url:腾讯TTS接口地址。app-id:-app-id: 腾讯项目ID,获取方式参见API 密钥管理页面。secret-id: 秘钥ID,详情参见API 密钥管理页面。secret-key: 秘钥,详情参见API 密钥管理页面。volume:音量,默认值为1。speed:语速,默认值为0。范围:[-2,6],分别对应不同语速: -2: 代表0.6倍 -1: 代表0.8倍 0: 代表1.0倍(默认) 1: 代表1.2倍 2: 代表1.5倍 6: 代表2.5倍 如果需要更细化的语速,可以保留小数点后 2 位,例如0.5/1.25/2.81等。 参数值与实际语速转换,可参考 代码示例voice-type:音色 ID,默认值为0,详情参考语音合成接口中的VoiceType。enable-subtitle:是否开启时间戳功能,默认为false。segment-rate:断句敏感阈值,取值范围:[0,1,2],默认值:0 该值越大越不容易断句,模型会更倾向于仅按照标点符号断句。此参数建议不要随意调整,可能会影响合成效果。emotion-category:控制合成音频的情感,仅支持多情感音色使。取值: neutral(中性)、sad(悲伤)、happy(高兴)、angry(生气)、fear(恐惧)、news(新闻)、story(故事)、radio(广播)、poetry(诗歌)、call(客服)、sajiao(撒娇)、disgusted(厌恶)、amaze(震惊)、peaceful(平静)、exciting(兴奋)、aojiao(傲娇)、jieshuo(解说)emotion-intensity:控制合成音频情感程度,取值范围为 [50,200],默认为 100;只有参数emotion-category不为空时生效。
临时参数说明
例子:
session:set_tts_params("tencent", "default") session:answer() session:speak("{voice-type=1018,speed=1}欢迎使用小樱桃智能语音产品")
上面是个lua脚本,这里的 voice-type、speed会覆盖配置文件中的参数。 所有支持的临时参数如下:
volume音量。speed:语速。voice-type:音色id。enable-subtitle:是否开启时间戳功能。emotion-category:控制合成音频的情感。emotion-intensity:控制合成音频情感程度。
若使用XCC进行TTS放音,请参考XCC TTS,同时将示例中的tts_engine更换为tencent。
tencent_tts 引擎参数说明
腾讯 tts 参数分为配置文件参数与临时参数。配置文件参数可在界面或xml文件内进行修改,重载模块生效。临时参数一般跟随命令出现,该参数只会在当前这句话中生效。临时参数与配置文件参数部分参数存在重叠,当两者同名参数同时出现时,临时参数优先级高于配置文件参数。
配置文件参数说明
<tts-rest> <param name="tts-url" value="https://tts.tencentcloudapi.com"/> <param name="secret-id" value="i"/> <param name="secret-key" value="s"/> <param name="model-type" value="1"/> <param name="voice-type" value="1001"/> <param name="volume" value="0"/> <param name="speed" value="0"/> <param name="primary-language" value="1"/> <param name="enable-subtitle" value="false"/> <param name="segment-rate" value="0"/> <param name="emotion-category" value=""/> <param name="emotion-intensity" value="100"/> </tts-rest>
tts-url:腾讯TTS接口地址。secret-id: 秘钥ID,详情参见API 密钥管理页面。secret-key: 秘钥,详情参见API 密钥管理页面。model-type:模型类型,1为默认模型。volume:音量,默认值为0。speed:语速,默认值为0。范围:[-2,6],分别对应不同语速: -2: 代表0.6倍 -1: 代表0.8倍 0: 代表1.0倍(默认) 1: 代表1.2倍 2: 代表1.5倍 6: 代表2.5倍 如果需要更细化的语速,可以保留小数点后 2 位,例如0.5/1.25/2.81等。 参数值与实际语速转换,可参考 代码示例primary-language:主语言类型:1-中文(默认)、2-英文、3-日文。voice-type:音色 ID,默认值为0,详情参考语音合成接口中的VoiceType。enable-subtitle:是否开启时间戳功能,默认为false。segment-rate:断句敏感阈值,取值范围:[0,1,2],默认值:0 该值越大越不容易断句,模型会更倾向于仅按照标点符号断句。此参数建议不要随意调整,可能会影响合成效果。emotion-category:控制合成音频的情感,仅支持多情感音色使。取值: neutral(中性)、sad(悲伤)、happy(高兴)、angry(生气)、fear(恐惧)、news(新闻)、story(故事)、radio(广播)、poetry(诗歌)、call(客服)、sajiao(撒娇)、disgusted(厌恶)、amaze(震惊)、peaceful(平静)、exciting(兴奋)、aojiao(傲娇)、jieshuo(解说)emotion-intensity:控制合成音频情感程度,取值范围为 [50,200],默认为 100;只有参数emotion-category不为空时生效。
临时参数说明
例子:
session:set_tts_params("tencent_tts", "default") session:answer() session:speak("{voice-type=1018,speed=1,primary-language=1}欢迎使用小樱桃智能语音产品")
上面是个lua脚本,这里的 voice-type、speed、primary-language会覆盖配置文件中的参数。 所有支持的临时参数如下:
volume:音量。speed:语速。voice-type:音色id。model-type:模型类型。primary-language:主语言类型。enable-subtitle:是否开启时间戳功能。emotion-category:控制合成音频的情感。emotion-intensity:控制合成音频情感程度。