微信同声传译
微信同声传译插件是微信自研的语音输入,文本翻译等功能的插件封装,用于提供给第三方小程序调用。
微信面对面翻译小程序完全使用此小程序插件实现。开源地址:https://github.com/Tencent/Face2FaceTranslator
在使用前,需要登录官网 设置 → 第三方服务 → 添加插件
搜索 【微信同声传译】并添加
在需要使用插件的小程序 app.json 中指明需要使用的插件版本等信息
// app.json{ "plugins": { "WechatSI": { "version": "0.3.1", "provider": "wx069ba97219f66d99" }}
接下来,在index.js引入插件,获取全局唯一的语音识别管理器recordRecoManager
// index.jsconst plugin = requirePlugin("WechatSI")const manager = plugin.getRecordRecognitionManager()
希望做到的效果是按住某个按钮,开始识别语音,松开按钮就结束识别
<view catchtouchstart="streamRecord" catchtouchend="endStreamRecord">中文view>
// index.jsPage({ data: {}, streamRecord: function() { manager.start({ lang: 'zh_CN', }) }, streamRecordEnd: function() { manager.stop() }})
绑定录音回调事件
<view>语音识别内容:{{currentText}}view>
// page.jsPage({ data: { currentText: '', }, initRecord: function() { //有新的识别内容返回,则会调用此事件 manager.onRecognize = (res) => { let text = res.result this.setData({ currentText: text, }) } // 识别结束事件 manager.onStop = (res) => { let text = res.result if(text == '') { // 用户没有说话,可以做一下提示处理... return } this.setData({ currentText: text, }) // 得到完整识别内容就可以去翻译了 this.translateTextAction() } }, translateTextAction: function() {}, onLoad: function() { this.initRecord() }})
文本翻译
<view>翻译结果:{{translateText}}view>
// page.jsPage({ data: { currentText: '', translateText: '', }, translateTextAction: function() { let lfrom = 'zh_CN' let lto = 'en_US' plugin.translate({ lfrom: lfrom, lto: lto, content: this.data.currentText, tts: true, // 需要合成语音 success: (resTrans)=>{ // 翻译可以得到 翻译文本,翻译文本的合成语音,合成语音的过期时间 let text = resTrans.result this.setData({ translateText: text, }) // 得到合成语音让它自动播放出来 wx.playBackgroundAudio({ dataUrl: resTrans.filename, title: '', }) }, }) },})
success返回码说明:
翻译成功,合成失败时调用success回调
状态码 | 说明 |
0 | 翻译合成成功 |
-10006 | 翻译成功,合成内部错误 |
-10007 | 翻译成功,传入了不支持的语音合成语言 |
-10008 | 翻译成功,语音合成达到频率限制 |
fail错误码说明:
错误码 | 说明 |
-10001 | 语言检查错误 |
-10002 | 输入的待翻译内容格式不正确 |
-10003 | 传入过长的待翻译文本内容 |
-10004 | 翻译内部逻辑错误 |
-10005 | 请求发送失败,请检查网络 |
-40001 | 接口调用频率达到限制,请联系插件开发者 |
语音合成
plugin.translate得到的语音文件是有过期时间,可以download到本地使用
如果像面对面翻译一样需要存比较多历史记录的话,也可以选择过期之后调用
plugin.textToSpeech
接口再去重新合成一次
plugin.textToSpeech({ lang: 'zh_CN', content: '我想重新进行语音合成', success: resTrans => { // 可以重新得到语音合成文件和过期时间 },})
success返回码说明:
状态码 | 说明 |
0 | 语音合成成功 |
fail错误码说明:
错误码 | 说明 |
-20001 | 语音合成语言格式出错 |
-20002 | 输入的待合成格式不正确 |
-20003 | 语音合成内部错误 |
-20005 | 网络错误 |
-40001 | 接口调用频率达到限制,请联系插件开发者 |
官方文档:
https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx069ba97219f66d99&token=61191740&lang=zh_CN