微信小程序将语音输入转化成文字

1,349 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

微信同声传译

微信同声传译插件是微信自研的语音输入,文本翻译等功能的插件封装,用于提供给第三方小程序调用。
官网地址:微信小程序同声转译

官方提示:

版本要求

基础库版本 >= 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>