在钉钉小程序中实现录音和播放功能实例

最新更新时间:2020年06月27日11:35:07
《猛戳-查看我的博客地图-总有你意想不到的惊喜》

本文内容:钉钉小程序开发,录音,播放单段录音,连续播放多段录音

项目背景

入职公司以来用了一年的时间从0-1完成了一个微信小程序项目的开发,取得了巨大的成功,对自己的技术沉淀有着非常重大的意义,同时也开启了自己的管理道路的职业生涯。近期为了提升公司内部的管理水平,已经启动开发一款钉钉小程序产品,面向于内部全体员工使用,包括培训、考核、学习等功能。

DOM
<view>
  <view class="play-record" onTap="playAllAudio">播放全部录音</view>
  <view a:for="{{recordAudioArr}}" a:for-index="idx" a:for-item="item">
    <view class="play-record-single" onTap="playSingleAudio" data-idx="{{idx}}">播放第{{idx+1}}个录音</view>
  </view>
  <view class="record-btn {{hasStart ? 'record-btn-active' : '' }}" onTouchStart="recordStart" onTouchEnd="recordEnd" onTouchCancel="recordCancel">录音</view>
</view>
CSS
.play-record{
  width: 200px;
  line-height: 30px;
  margin: 0 auto;
  background: #DDA0DD;
  text-align: center;
  border-radius: 5px;
  color: #FFFFFF;
}
.play-record-single{
  width: 100px;
  line-height: 30px;
  margin: 20px auto 0;
  background: #F5DEB3;
  text-align: center;
  border-radius: 5px;
  color: #FFFFFF;
}
.record-btn{
  position: fixed;
  bottom: 100px;
  left: 50%;
  transform: translateX(-50%);
  width: 60px;
  line-height: 60px;
  border-radius: 50%;
  background: #6495ED;
  text-align: center;
  color: #FFFFFF;
}
.record-btn-active{
  background: #4169E1;
}
JS
let rm = null;//录音管理器

Page({

  data: {
    hasStart: false,
    recordAudioArr: []
  },

  canUseRecord: true,//是否可以使用录音功能

  onLoad() {
    
    if (dd.canIUse('getRecorderManager')) {
      rm = dd.getRecorderManager();//录音管理器
      rm.onstart = () => {
        console.log('开始录音');
      }
      rm.onstop = (res) => {
        console.log('结束录音');//res.tempFilePath
        this.data.recordAudioArr.push(res.tempFilePath);
        this.setData({
          recordAudioArr: this.data.recordAudioArr
        });
        console.log(this.data.recordAudioArr);
      }
      rm.onerror = (err) => {
        dd.showToast({content: JSON.stringify(err)});
      }
    } else {
      this.canUseRecord = false;
      dd.showToast({content: '请升级钉钉版本至4.5.18以支持录音功能'});
    }
  },

  /**
   * 触摸动作开始
   */
  recordStart(){
    if(!this.canUseRecord)
      return
    this.setData({
      hasStart: true
    });
    rm.start({ duration: 60 });//不写duration,在Android上会报错,errorCode-2-参数错误;暂未发现录音时长上线
  },

  /**
   * 触摸动作结束
   */
  recordEnd(){
    if(!this.canUseRecord)
      return
    this.setData({
      hasStart: false
    });
    rm.stop();
  },

  /**
   * 触摸动作被打断,如来电提醒,弹窗
   */
  recordCancel(){
    if(!this.canUseRecord)
      return
    console.log('recordCancel')
    this.setData({
      hasStart: false
    });
  },

  /**
   * 播放全部录音
   */
  playAllAudio(){
    let length = this.data.recordAudioArr.length;//录音的总数
    let index = 0;//录音的索引
    let bam = dd.getBackgroundAudioManager();
    //监听背景音频结束事件
    bam.onEnded = (e) => {
      index++;
      if(index >= length)
        return
      bam.src = this.data.recordAudioArr[index];
      bam.title = '';//不实例化此属性,ios调用多次play(),playbackRate会累加
      bam.play();
    }
    //监听背景音频错误事件, 错误类型(10001-系统错误 10002-网络错误 10003-文件错误 10004-格式错误)
    bam.onError = (err) => {
      dd.showToast({content: JSON.stringify(err)});
    }
    bam.src = this.data.recordAudioArr[index];
    bam.title = '';//不实例化此属性,ios调用多次play(),playbackRate会累加
    bam.play();
  },

  /**
   * 播放单段录音
   */
  playSingleAudio(e){
    let bam = dd.getBackgroundAudioManager();//背景音频管理器
    //监听背景音频错误事件, 错误类型(10001-系统错误 10002-网络错误 10003-文件错误 10004-格式错误)
    bam.onError = (err) => {
      dd.showToast({content: JSON.stringify(err)});
    }
    let idx = e.currentTarget.dataset.idx;//录音的索引
    bam.src = this.data.recordAudioArr[idx];
    bam.title = '';//不实例化此属性,ios调用多次play(),playbackRate会累加
    bam.play();
  }

});
参考资料

感谢阅读,欢迎评论^-^

打赏我吧^-^
### 钉钉云课堂中的视频倍速播放功能设置方法 在钉钉云课堂中,虽然官方并未直接提供内置的视频倍速播放功能[^3],但可以通过一些外部工具或自定义脚本的方式实现这一需求。以下是具体的技术方案: #### 使用 JavaScript 实现视频倍速播放 如果能够访问 HTML 页面并运行自定义脚本,则可以利用 `HTML5 video` 的 `playbackRate` 属性来调整视频播放速度。以下是一个简单的代码示例,用于动态修改视频播放速率: ```javascript // 获取页面上的所有视频元素 const videos = document.querySelectorAll('video'); videos.forEach(video => { // 设置播放速度为2.3倍 video.playbackRate = 2.3; }); ``` 上述代码会将当前网页上所有的 `<video>` 元素的播放速度设置为 2.3 倍[^4]。 #### 自动化操作与扩展应用 对于无法直接编辑源码的情况,可以借助浏览器开发者工具(如 Chrome DevTools)手动执行以上脚本。或者更进一步,开发一个基于 Tampermonkey 或 Greasemonkey 的用户脚本来自动化此过程。例如: ```javascript // ==UserScript== // @name 钉钉云课堂视频倍速播放增强 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 提供钉钉云课堂视频倍速播放功能 // @author You // @match *://classroom.dingtalk.com/* // @grant none // ==/UserScript== (function() { 'use strict'; const desiredPlaybackRate = 2.3; // 设定目标倍速 function setVideoPlaybackRate(rate) { const videos = document.querySelectorAll('video'); videos.forEach(video => (video.playbackRate = rate)); } // 定期检测新加载的视频 setInterval(() => setVideoPlaybackRate(desiredPlaybackRate), 1000); })(); ``` 这段脚本会在匹配到钉钉云课堂网址时自动将视频播放速度设定为目标值(此处设为 2.3 倍),并且每隔一秒重新检查是否有新的视频被加载。 #### 注意事项 - 如果视频本身存在 DRM 加密保护或其他限制条件,可能会影响脚本的效果。 - 用户需自行测试不同倍率下的实际收听效果,通常推荐范围为 2 至 2.5 倍之间[^2]。 - 对于某些特殊场景下(比如讲师使用方言讲解),应适当降低倍数以确保理解质量。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值