作为一名长期深耕小程序开发的技术博主,今天想和大家分享一个在「小鲸写字」项目中实现的实用功能——语音播报。这个功能看似简单,但在教育类小程序中却有着举足轻重的作用。
「小鲸写字」是一款面向儿童汉字学习的微信小程序,核心功能是帮助孩子通过多种方式练习汉字书写。其中,听写功能是最受家长欢迎的模块之一。当家长忙于工作或其他事务时,语音播报功能就能自动朗读需要听写的字词,让孩子独立完成练习。
技术选型思考:市面上实现语音播报的方案很多,比如自建TTS服务、调用第三方API等。但考虑到开发成本、稳定性和微信生态适配性,最终选择了微信官方提供的同声传译插件。
微信同声传译插件是微信官方提供的一站式语音解决方案,主要包含三大核心功能:
对于我们的需求,最关键的是其语音合成(TTS)能力。这个插件有以下几个显著优势:
重要提示:添加插件需要小程序管理员权限,普通开发者账号无法完成此操作。
在小程序的app.json文件中添加以下配置:
json复制"plugins": {
"WechatSI": {
"version": "0.3.6",
"provider": "wx069ba97219f66d99"
}
}
这里需要注意:
version字段需要填写当前插件的最新版本号provider是微信同声传译插件的固定AppID,不可更改由于插件依赖一些npm包,需要在项目根目录执行:
bash复制npm install
然后通过微信开发者工具点击「工具」-「构建npm」,确保依赖正确安装。
在需要使用的页面或组件中,首先引入插件:
javascript复制const plugin = requirePlugin('WechatSI');
const manager = plugin.getRecordRecognitionManager();
然后实现基础的语音播报功能:
javascript复制function textToSpeech(content) {
return new Promise((resolve, reject) => {
plugin.textToSpeech({
lang: 'zh_CN',
tts: true,
content: content,
success: (res) => {
console.log('语音播放成功', res);
resolve(res);
},
fail: (err) => {
console.error('语音播放失败', err);
reject(err);
}
});
});
}
在实际使用中,我们经常需要连续播放多个词语。为了避免语音重叠,需要实现播放队列:
typescript复制class SpeechQueue {
private queue: string[] = [];
private isPlaying = false;
add(text: string) {
this.queue.push(text);
if (!this.isPlaying) {
this.playNext();
}
}
private playNext() {
if (this.queue.length === 0) {
this.isPlaying = false;
return;
}
this.isPlaying = true;
const text = this.queue.shift();
textToSpeech(text).finally(() => {
setTimeout(() => this.playNext(), 300); // 适当延迟
});
}
}
微信同声传译插件支持调节语速,可以通过以下方式实现:
javascript复制function textToSpeechWithSpeed(content, speed = 1) {
return new Promise((resolve, reject) => {
plugin.textToSpeech({
lang: 'zh_CN',
tts: true,
content: content,
speed: speed, // 0.5-2.0之间
success: resolve,
fail: reject
});
});
}
实测建议:对于儿童使用场景,语速设置在0.8-1.2之间最为合适,既不会太慢显得拖沓,也不会太快导致听不清。
问题现象:调用插件API时返回"plugin not found"错误。
解决方案:
app.json中的插件配置是否正确问题现象:控制台显示播放成功,但设备没有声音输出。
排查步骤:
在项目开发过程中,我们对比了几种常见的语音播报方案:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 微信同声传译 | 免费、稳定、接入简单 | 功能相对基础、定制性差 | 简单语音播报需求 |
| 第三方TTS服务 | 功能强大、支持多种声音 | 收费、有调用限制 | 对语音质量要求高的场景 |
| 自建TTS服务 | 完全可控、高度定制 | 开发成本高、维护复杂 | 有特殊需求的大型项目 |
对于「小鲸写字」这样的教育类小程序,微信同声传译插件在成本、稳定性和开发效率上都是最佳选择。
这个语音播报功能不仅适用于听写练习,还可以拓展到以下场景:
在实际开发中,我们还发现了一些有趣的用法。比如,通过结合小程序的背景音乐控制,可以实现语音播报时自动降低背景音乐音量,播报完再恢复,大大提升了用户体验。
这个功能上线后,用户反馈非常积极。很多家长表示,语音播报功能让孩子能够独立完成练习,不再完全依赖家长陪同,真正发挥了教育类小程序的辅助作用。