美文网首页
uni-app 长按录音优化组件

uni-app 长按录音优化组件

作者: littlesunn | 来源:发表于2019-07-06 12:25 被阅读0次
<template>
  <view class="record-container">
    <button @touchstart="startRecord" @touchend="endRecord">按住说话,松开结束</button>

    <button @tap="playVoice">播放录音</button>

    <view class="status">录音中{{intIntervalTime}}s>>></view>
  </view>
</template>

<script>
const recorderManager = uni.getRecorderManager();

const innerAudioContext = uni.createInnerAudioContext();

innerAudioContext.autoplay = true;

export default {
  data() {
    return {
      text: "uni-app",

      voicePath: "",

      isRecord: false, // 记录状态,录音中或者是未开始

      intervalTime: 0,

      timer: null
    };
  },

  onLoad() {
    let self = this;

    recorderManager.onStop(function(res) {
      console.log("录音停止了" + JSON.stringify(res)); //返回录音的临时保存地址, 可用于后面的播放

      self.voicePath = res.tempFilePath;
    });
  },

  computed: {
    intIntervalTime() {
      // 用于显示整数的秒数

      console.log(Math.round(this.intervalTime));

      return Math.round(this.intervalTime);
    }
  },

  methods: {
    startRecord() {
      this.timer = setInterval(() => {
        this.intervalTime += 0.5;

        if (this.intervalTime >= 0.5 && !this.isRecord) {
          //如果用户录制的时间太短,就不会去开启录音, 因为有个bug: recorderManager.stop()在短时间内开启在关闭的话,实际上他还在不停地录音,不知道你们有没有遇到过

          console.log("开始录音");

          this.isRecord = true;

          this.intervalTime = 0;

          recorderManager.start({
            format: "mp3"
          });
        }
      }, 500);
    },

    endRecord() {
      if (this.intervalTime <= 0.5) {
        console.log("录音太短了!!!");
      }

      clearInterval(this.timer);

      if (this.isRecord) {
        setTimeout(() => {
          recorderManager.stop();

          this.isRecord = false;

          console.log(this.isRecord);
        }, 500); //延迟小段时间停止录音, 更好的体验
      }
    },

    playVoice() {
      console.log("播放录音");

      if (this.voicePath) {
        innerAudioContext.src = this.voicePath;

        innerAudioContext.play();
      }
    }
  }
};
</script>

<style>
.record-container {
  padding-top: 100upx;
}

.status {
  text-align: center;
}
</style>

相关文章

网友评论

      本文标题:uni-app 长按录音优化组件

      本文链接:https://www.haomeiwen.com/subject/jalphctx.html