uniapp 微信小程序 收款方提示音 文字转语音朗读 同声传译

1,232 阅读3分钟

uniapp 微信小程序 收款方提示音 文字转语音朗读 同声传译

此处为个人记录,文章底部有写参考的代码地址,如有侵权,请私信删除。

  1. 第一步,添加插件,目前「微信同声传译」插件暂不支持个人主体小程序添加,只能非个人主体(如企业、个体户等)小程序添加。

同声传译.jpg

  1. 第二步,获取插件的AppId之后,需要在你的uniapp里面的 manifest.json 做配置,打开源码视图,添加以下代码,如果插件未审核通过是会报错的。

同声传译.jpg

// provider 的值是你在微信公众平台 -- 选择左下角你的头像 -- (触发hover) 选择账号设置 -- 选择 第三方设置 -- 插件管理,点击查看详情,后获取的AppId

// version 是插件的版本号 点击插件查看详情,基本信息里面有

"plugins": {
  "WechatSI": {
  "version": "0.3.6",
  "provider": "wx069ba97219f66d99"
  }
}

这里就直接贴代码了,我这里写的是点击事件,或者你自己做轮询或者WebSocket

这里就简单写一个收款的,canIUseWxAudio事件是因为 uni.createInnerAudioContext(),在IOS有些型号手机在静音模式下,播放没有声音

var plugin = requirePlugin("WechatSI");
const manager = plugin.getRecordRecognitionManager();

const paymentChange = () => {
  const parameter = '20';
  if (!canIUseWxAudio()) return; // 检查是否支持音频播放

  plugin.textToSpeech({
    lang: "zh_CN",
    tts: true,
    content: `支付宝到账${parameter}元`,
    success: (res) => {
      console.log("成功生成语音文件:", res.filename);
      playAudio(res.filename);
    },
    fail: (res) => {
      console.error("文本转语音失败:", res);
    }
  });
};

const canIUseWxAudio = () => {
  const version = uni.getSystemInfoSync().SDKVersion;
  if (compareVersion(version, '2.3.0') < 0) {
    uni.showModal({
      title: '提示',
      content: '当前微信版本过低,手机开启静音模式下可能会导致播放音频失败。',
      showCancel: false
    });
    return false; // 不支持音频播放
  }

  uni.setInnerAudioOption({
    obeyMuteSwitch: false // 允许音频播放即使设备静音
  });
  return true; // 支持音频播放
};

const playAudio = (filename) => {
  const music = uni.createInnerAudioContext(); // 创建播放器对象
  music.src = filename;
  music.play(); // 开始播放
  music.onEnded(() => {
    music.destroy(); // 播放结束后销毁播放器对象
  });
};

/**
 * 比较微信 SDKVersion
 * @param {String} v1 版本字符串
 * @param {String} v2 版本字符串
 * @returns {Number} v1>v2,返回1;v1<v2,返回-1;v1==v2,返回0
 */
const compareVersion = (v1, v2) => {
  const v1Parts = v1.split('.').map(Number);
  const v2Parts = v2.split('.').map(Number);
  const len = Math.max(v1Parts.length, v2Parts.length);

  while (v1Parts.length < len) v1Parts.push(0);
  while (v2Parts.length < len) v2Parts.push(0);

  for (let i = 0; i < len; i++) {
    if (v1Parts[i] > v2Parts[i]) return 1;
    if (v1Parts[i] < v2Parts[i]) return -1;
  }
  return 0;
};

代码解释

  1. paymentChange 函数:

    • 这是主函数,用于生成语音并播放。首先定义了参数 parameter,表示到账金额。
    • 调用 canIUseWxAudio 函数检查当前环境是否支持音频播放。如果不支持,则直接返回。
    • 使用 plugin.textToSpeech 生成语音,成功时调用 playAudio 播放生成的音频文件,失败时输出错误信息。
  2. canIUseWxAudio 函数:

    • 此函数检查当前微信的 SDK 版本,以确定是否支持音频播放。
    • 如果版本低于 2.3.0,则显示提示框并返回 false,表示不支持音频播放。
    • 如果支持,则设置音频选项 obeyMuteSwitch: false,允许在静音模式下播放音频,并返回 true
  3. playAudio 函数:

    • 创建一个内音频上下文 music,并将其源设置为生成的音频文件。
    • 调用 play() 方法开始播放音频。
    • 在音频播放结束时,通过 music.destroy() 销毁播放器对象,释放资源。
  4. compareVersion 函数:

    • 用于比较两个版本字符串的大小。
    • 将版本字符串分割为数组并转换为数字,确保比较时不受字符串格式的影响。
    • 通过逐位比较返回相应的结果:1 表示第一个版本较大,-1 表示第二个版本较大,0 表示相等。

这个代码我是参考了其他开发者才写出来的,下面写一下我参考的链接地址

uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)uniapp小程序使用文字转语音播报类似支付宝收款播报小程序语音识别和朗读)

blog.csdn.net/weixin_4361…

解决微信小程序 uni.createInnerAudioContext() 语音播放没有声音

blog.csdn.net/xiamoziqian…