本文已参与「新人创作礼」活动,一起开启掘金创作之路。
微信同声传译
微信同声传译插件是微信自研的语音输入,文本翻译等功能的插件封装,用于提供给第三方小程序调用。
官网地址:微信小程序同声转译
官方提示:
版本要求
基础库版本 >= 1.9.94
- 使用插件,需要基础库版本 >=
1.9.6
- 插件内调用
wx.getRecorderManager
接口,需要基础库版本 >=1.9.94
配额说明
由于资源限制,当前各个接口调用存在配额限制,如业务有特殊更多需求,请邮箱联系roytianzou@tencent.com申请,邮件配额模版如下。 语音输入配额:每个小程序250条/分钟,3w条/天。 文本翻译配额:每个小程序500次/分钟,10w次/天。 语音合成配额:每个小程序100次/分钟,2w次/天。
配额申请模版
公司简介:(个人则填写个人)
小程序简介:
小程序appid:
申请接口名:
当前用户量:(当前未上线可填无)
当前调用量:(当前未上线可填无)
申请配额: xx 次/分钟, xx次/天。
合理的配额推导(请提供使用场景,预期用户量,用户使用频率,高峰时段,平均时长/字数):
1.先在 app.json 里面进行配置
在与 pages tabbar 同一级的目录下进行配置:
"WechatSI": {
"version": "0.3.4",
"provider": "wx069ba97219f66d99"
}
}
2.查看用户是否授权录音
async handleRecord(){
let scoped = await getSetting("scope.record");
let scopedRecord = await scoped.authSetting('scpoe.record');
if(scopedRecord === undefined){
await authorize("scpoe.record")
}
if(scopedRecord === false){
await openSetting();
}
if(scopedRecord === true){
// 跳转到录音转换界面
wx:navigateTo({
url: "/pages/record/index"
})
}
}
3.录音
// 同声传译
var plugin = requirePlugin("WechatSI");
let manager = plugin.getRecordRecognitionManager();
data: {
recordText: "",
isTouch: false,
isLoading: false
},
// 标志位
lock: false;
// 初始化 这个插件
initTran(){
let that = this;
// 有新的识别内容返回,则会调用此事件
manager.onRecognize = function(res) {
console.log(res.result);
// 标志位
that.lock = false;
let text = res.result;
that.setData({
recordText: text,
isLoading: false
})
}
// 识别结束事件
manager.onStop = function(res) {
console.log(res.result)
// 标志位
that.lock = false;
wx.vibrateShort({
success: () => {},
fail: () => {},
complete: () => {},
})
let text = res.result;
that.setData({
recordText: text,
isLoading: false
})
// 如果用户没有说话就提示一下
if (res.result === "") {
wx.showToast({
title: '您没有说话',
icon: 'none'
});
return;
}
}
},
// 按钮的长按事件
async streamRecord(){
// 标志位
this.lock = true;
if(this.lock){
// 开始识别
manager.start({ lang: ""zh_CN });
// 微信震动
wx.vibrateShort({
success(){},
fail(){},
})
let isTouch = true;
this.setData({
isTouch
})
}
},
// 松开了
endStreamRecord() {
if (this.lock) {
// 关闭语音
manager.stop();
let isTouch = false;
this.setData({
isTouch,
isLoading: true
})
}
},
// 页面加载的生命周期函数
onLoad(){
this.initTran();
}
下面是 .wxml 文件
<view class="text" wx:else>{{isTouch === true ? "我正在听..." : recordText}}</view>
<view class="touch" bindlongpress="streamRecord" catchtouchend="endStreamRecord">
<view class="touchText">请按住后说话</view>
</view>