uni-app语音转文字功能demo(小程序同声翻译开箱即用)

简介: uni-app语音转文字功能demo(小程序同声翻译开箱即用)



一、同声翻译插件的申请











点击小程序管理后台后,再次点击设置,选中第三方服务



搜索同声传译,将插件添加至自己的小程序服务中

点击详情可看到官方文档及AppId(后续使用中会用到)


二、uni-app中的引用


 

新建项目后,选中manifest.json文件,切换至源码视图(右侧菜单栏最下方!)


在mp--weixin的appid(千万别看错了,上方还有一个AppID)同级下写插件的相关信息

"mp-weixin": {
    /* 小程序特有相关 */
    "appid": "你自己的小程序id",
    "plugins": {
      "WechatSI": {
        "version": "0.3.3",
        "provider": "wx069ba97219f66d99"
      }
    },
    "setting": {
      "urlCheck": false
    },
    "usingComponents": true
  },

特别注意!!!!!!!!!!version版本最好是0.3.3,高于此版本可能会无法使用,并且provider应该都是这个,所以复制即用!

<template>
  <view>
    <!-- 语音识别区 -->
    <!-- 语音内容图片+转文字,没有语音时是隐藏状态 -->
    <view class="content" v-if="shows">
      <!-- 语音声纹图片 -->
      <view class="tet" style="position: relative;">
        <view style="position: absolute;width: 30px;height: 30px;background-color: #e9c2db;right: 0;border-radius: 50%;top: 10px;" :class="num == 1 ? '' : 'op'">
          <!-- 转文字按钮  fanyi为转译事件 -->
          <image style="width: 30px;height: 30px;" src="https://pic.imgdb.cn/item/64c85b431ddac507cc0e7284.png" @tap="fanyi"></image>
        </view>
      </view>
      <!-- 翻译内容点击fanyi后出现 -->
      <view class="voicepad" style="margin-top: 20px;width: 94%;margin-left: 3%;padding: 10px; font-size: 12px;">
        {{endOne}}
      </view>
    </view>
    <!-- 语音音阶动画 长按说话时的动画 -->
    <view class="prompt" v-if="animation">
      <section class="dots-container">
        <view class="dot"></view>
        <view class="dot"></view>
        <view class="dot"></view>
        <view class="dot"></view>
        <view class="dot"></view>
      </section>
      <text>录音中...</text>
    </view>
    <!-- 按钮功能区 -->
    <view class="action" v-show="!shows">
      <!-- 开始录音按钮  长按录音  松手上传 text为-----开始录音----上传录音文字 -->
      <button @longpress="startRecord" @touchend="endRecord" @tap="startRecord">{{text}}</button>
    </view>
    <view class="actioning" v-show="shows">
      <button @tap="playVoice" style="background-color: #d1f2d7;color: #18bc37;">播放录音</button>
      <button @tap="resetVoice" style="background-color: #fdedd9;color: #f3a73f;">重置录音</button>
    </view>
  </view>
</template>
<script>
  // 录音播放事件引入
  const innerAudioContext = uni.createInnerAudioContext();
  innerAudioContext.autoplay = true;
  // 翻译事件引入
  var plugin = requirePlugin("WechatSI")
  let manager = plugin.getRecordRecognitionManager()
  export default {
    data() {
      return {
        text: '开始录音',
        voicePath: '',
        // 音频展示
        shows: false,
        // 动画状态
        animation: false,
        voiceState: "点击录音进行翻译",
        endOne: '',
        num: 1
      }
    },
    onShow() {
    },
    onLoad() {
      // 初始化调用
      this.initRecord();
    },
    methods: {
      startRecord() {
        console.log('开始录音');
        manager.start({
          duration: 30000,
          lang: "zh_CN"
        })
        this.text = '松手上传';
        this.animation = true
      },
      endRecord() {
        console.log('录音结束');
        this.text = '开始录音';
        this.animation = false
        this.shows = true
        manager.stop();
      },
      playVoice() {
        console.log('播放录音');
        if (this.voicePath) {
          innerAudioContext.src = this.voicePath;
          innerAudioContext.play();
        }
      },
      resetVoice() {
        console.log('重置录音');
        innerAudioContext.stop();
        this.shows = false
        this.voicePath = '';
        this.endOne = ''
        this.voiceState = ''
        this.num = 1
      },
      fanyi() {
        if (this.num == 1) {
          console.log(this.voicePath);
          this.endOne = this.voiceState
          this.num = this.num + 1
          uni.showToast({
            title: '转换成功',
            icon: 'success',
            duration: 2000, //持续时间为 2秒
          })
        }else{
          uni.showToast({
            title: '文字已翻译,请勿重复点击',
            icon: 'error',
            duration: 2000, //持续时间为 2秒
          })
        }
      },
      /**
       * 初始化语音识别回调  
       * 绑定语音播放开始事件  
       */
      initRecord: function() {
        manager.onStart = function(res) {
          this.voiceState = "onStart:" + res.msg + "正在录音"
        };
        //有新的识别内容返回,则会调用此事件  
        manager.onRecognize = (res) => {
          this.voiceState = res.result;
        }
        // 识别结束事件  
        manager.onStop = (res) => {
          this.voicePath = res.tempFilePath;
          this.voiceState = res.result;
          if (this.voiceState == '') {
            console.log('没有说话')
            this.endOne = '周围太安静啦~再试试~';
          }
        }
        // 识别错误事件  
        manager.onError = (res) => {
          this.voiceState = '翻译员去吃饭啦,等下再试试';
          this.shows = false
          uni.showToast({
            title: '翻译员去吃饭啦,等下再试试',
            icon: 'error',
            duration: 2000, //持续时间为 2秒
          })
        }
      },
    }
  }
</script>
<style>
  .content {
    box-sizing: border-box;
    width: 98%;
    margin-left: 1%;
    min-height: 300px;
    padding-top: 20px;
    padding-left: 15px;
    padding-right: 15px;
    padding-bottom: 20px;
    display: flex;
    flex-direction: column;
    align-items: center;
  }
  .tet {
    width: 100%;
    height: 50px;
    margin-top: 25px;
    border-radius: 30px;
    background-repeat: no-repeat;
    background-size: 100% 100%;
    background-image: url('https://pic.imgdb.cn/item/64c85a901ddac507cc0d52a4.png');
    position: relative;
  }
  .action {
    position: fixed;
    bottom: 20px;
    width: 100%;
  }
  .action button {
    background-color: #d1f2d7;
    color: #18bc37;
    font-size: 14px;
    display: flex;
    height: 40px;
    width: 96%;
    margin-left: 2%;
    align-items: center;
    justify-content: center;
  }
  .actioning {
    position: fixed;
    bottom: 20px;
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
  }
  .actioning button {
    height: 40px;
    width: 45%;
    border: 0;
    font-size: 14px;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  .bbig {
    width: 94%;
  }
  .op{
    visibility: hidden;
  }
  /* 动画 */
  .prompt {
    width: 100%;
    height: 80px;
    position: fixed;
    bottom: 70px;
  }
  .prompt text {
    position: absolute;
    bottom: 2px;
    color: #f3a73f;
    left: calc(45%);
    animation: puls 1.5s infinite ease-in-out;
  }
  .dots-container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 80px;
    width: 45%;
    position: absolute;
    bottom: 0px;
    left: calc(27.5%);
    background-color: #fdedd9;
    border-radius: 20px;
  }
  .dot {
    height: 16px;
    width: 16px;
    margin-right: 10px;
    border-radius: 10px;
    background-color: #f3a73f;
    animation: pulse 1.5s infinite ease-in-out;
  }
  .dot:last-child {
    margin-right: 0;
  }
  .dot:nth-child(1) {
    animation-delay: -0.3s;
  }
  .dot:nth-child(2) {
    animation-delay: -0.1s;
  }
  .dot:nth-child(3) {
    animation-delay: 0.1s;
  }
  @keyframes pulse {
    0% {
      transform: scale(0.8);
      background-color: #f3a73f;
      box-shadow: 0 0 0 0 rgba(243, 167, 63, 0.7);
    }
    50% {
      transform: scale(1.2);
      background-color: #f9d39f;
      box-shadow: 0 0 0 10px rgba(178, 212, 252, 0);
    }
    100% {
      transform: scale(0.8);
      background-color: #f3a73f;
      box-shadow: 0 0 0 0 rgba(243, 167, 63, 0.7);
    }
  }
  @keyframes puls {
    0% {
      transform: translateY(0px)
    }
    50% {
      transform: translateY(-4px)
    }
    100% {
      transform: translateY(0px)
    }
  }
</style>

至此同声翻译就可以使用了,本文主要使用的是录音完毕后,提供播放录音及翻译录音两个选项,也可以改动后支持同声同步翻译。


demo复制即可使用,只需要修改图片,如果真机运行报错,建议切换真机1.0进行测试。

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
9天前
|
Web App开发 前端开发 安全
语音交友app系统源码功能及技术研发流程剖析
语音交友App核心功能包括语音聊天(一对一、群聊、语音消息)、语音房间(直播、主题房、管理)、社交互动(好友、关注、打赏)、内容发现、音效美化、通知提醒及安全隐私等。开发流程涵盖需求分析、技术选型(前端、后端、数据库、实时通信)、UI/UX设计、前后端开发、实时通信集成、音效处理、测试优化、部署上线及运营维护,确保稳定高效运行并持续优化用户体验。
|
2月前
|
安全 定位技术 API
婚恋交友系统匹配功能 婚恋相亲软件实现定位 语音社交app红娘系统集成高德地图SDK
在婚恋交友系统中集成高德地图,可实现用户定位、导航及基于地理位置的匹配推荐等功能。具体步骤如下: 1. **注册账号**:访问高德开放平台,注册并创建应用。 2. **获取API Key**:记录API Key以备开发使用。 3. **集成SDK**:根据开发平台下载并集成高德地图SDK。 4. **配置功能**:实现定位、导航及基于位置的匹配推荐。 5. **注意事项**:保护用户隐私,确保API Key安全,定期更新地图数据,添加错误处理机制。 6. **测试优化**:完成集成后进行全面测试,并根据反馈优化功能。 通过以上步骤,提升用户体验,提供更便捷的服务。
|
7天前
|
开发框架 缓存 搜索推荐
PiliPala:开源项目真香,B站用户狂喜!这个开源APP竟能自定义主题+去广告?PiliPala隐藏功能大揭秘
嗨,大家好,我是小华同学。PiliPala 是一个基于 Flutter 开发的 BiliBili 第三方客户端,提供流畅、个性化的使用体验。核心功能包括视频浏览与推荐、用户互动、丰富的播放设置、多维度搜索和个性化主题等。相比官方客户端,PiliPala 功能更丰富、性能更优、界面更美观。
57 14
|
4天前
|
人工智能 小程序 程序员
【视频测评 DEMO 参考】VSCode 神级 AI 插件通义灵码:完全免费+实战教程+微信贪吃蛇小程序
VSCode 神级 AI 插件通义灵码:完全免费+实战教程+微信贪吃蛇小程序
89 7
|
11天前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
115 12
|
25天前
|
小程序 前端开发 关系型数据库
基于Uniapp+php校园小程序,校园圈子论坛系统功能,校园跑腿二手交流功能设计
校园圈子论坛及综合服务平台集成了校园跑腿、兼职信息、外卖团购、闲置交换、租赁服务、表白墙等多功能模块,提供一站式校园生活解决方案。系统采用uniapp前端和PHP后端开发,支持多城市、多学校切换,配备分站式后台管理,确保稳定性和安全性。通过融云IM SDK实现即时通讯功能,增强用户互动与粘性。适用于大学校园、城市及社区圈子,满足多样化需求,提升便捷体验。
|
28天前
|
JSON 小程序 UED
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
132 12
|
30天前
|
存储 监控 小程序
TP6+Uni-app框架下,圈子系统小程序的快速上线开发步骤
社交圈子系统多端运营级应用,融合了推荐匹配、语音聊天、IM即时通讯、动态发布、一键约聊、同城交友、附近的人、充值提现、邀请推广等功能,为平台运营提供更多的盈利变现方式。程序源码开源,支持二次开发,根据客户不同应用场景需求,定制个性化解决方案。
53 9
|
24天前
|
缓存 前端开发 IDE
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
25 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
30天前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
73 0

热门文章

最新文章