微信小程序简易录音机

首先先创建一个项目(想必大家都会啦那就直接开干)

首先上html结构

<view class="wx-container">
  <view id="title">录音机</view>
  <view id="time">{{hours}}:{{minute}}:{{second}}</view>
  <view class="btngroup">
    <view hover-class="change" catch:tap="play">播放</view>
    <view class="play" hover-class="change" catch:tap="start"></view>
    <view hover-class="change" catch:tap="stop">结束</view>
  </view>
</view>

css样式

/* pages/radio/index.wxss */
.wx-container {
  width: 100vw;
  height: 100vh;
  margin: 0 auto;
  text-align: center;
  box-sizing: border-box;
}

#title {
  margin: 100rpx auto;
  text-align: center;
  font-size: 50rpx;

}

#time {
  font-size: 150rpx;
}

.btngroup {
  height: 180rpx;
  margin: 100rpx auto;
  display: flex;
  align-items: center;
  justify-content: space-around;
}

.btngroup>view:not(.play) {
  width: 120rpx;
  height: 120rpx;
  border-radius: 50%;
  line-height: 120rpx;
  background-color: #eee;
}

.play {
  width: 150rpx;
  height: 150rpx;
  border: solid 50rpx red;
  box-sizing: border-box;
  border-radius: 50%;
  transition: .2s;
  background-color: transparent;
}

.change {
  transition: .2s;
  box-shadow: 0 0 8rpx 8rpx rgb(0, 0, 0);

}

样式的效果:
在这里插入图片描述
接下来js代码部分:
通过wx.createInnerAudioContext()方法获取到

// 获取录音管理器
var tape = wx.getRecorderManager()
// 创建全局音频
var audio = wx.createInnerAudioContext()
Page({
  data: {
    time: 0,
    cleartime: '',
    state: 0, // 0 为停止录音  1 为正在录音   2 为暂停录音
    timer: null,
    hours: '0' + 0, // 时
    minute: '0' + 0, // 分
    second: '0' + 0, // 秒
    tempFilePath: null
  },

计时开始

  start() {
    let _this = this;
    switch (this.data.state) {
      case 0:
        _this.setInterval();
        // 开始录音
        tape.start()
        console.log('开始录音');
        this.setData({
          state: 1 // 把state设置为1 (暂停录音状态)
        })
        // audio.destroy() // 释放音频资源
        break
      case 1:
        clearInterval(_this.data.timer);
        // 暂停录音
        tape.pause()
        console.log('暂停录音');
        this.setData({
          state: 2 // 把state设置为2 (继续录音状态)
        })
        break
      case 2:
        _this.setInterval();
        // 继续录音
        tape.resume()
        console.log('继续录音');
        this.setData({
          state: 1 // 把state设置为1 (暂停录音状态)
        })
        break
    }
    // 为了性能考虑 20 秒后自动结束录音  
    setTimeout(() => {
      clearInterval(_this.data.timer);
      tape.stop()
      // 监听结束录音事件
      tape.onStop((res) => {
        this.data.tempFilePath = res.tempFilePath
        console.log('自动保存录音');
        wx.showToast({
          title: '自动保存录音成功',
          mask: true,
          duration: 500,
        })
      })
    }, 20000)
  },

播放

play() {
    // 如果音频路径为空,弹出提示
    if (!this.data.tempFilePath) {
      wx.showModal({
        title: '没有录音',
        content: '请开始录音或保存录音'
      })
      return
    }
    audio.src = this.data.tempFilePath
    // 播放录音的音频
    audio.play()
    wx.showToast({
      title: '播放录音',
      mask: true,
      duration: 500
    })
  },

结束

 stop() {
    // 如果state处于0(未录音状态)弹出提示
    if (this.data.state == 0) {
      wx.showToast({
        title: '请先开始录音',
        mask: true,
        duration: 500,
        icon: 'error'
      })
      return
    }
    let _this = this;
    this.setData({
      hours: '0' + 0,
      minute: '0' + 0,
      second: '0' + 0,
      state: 0 // 点击结束按钮之后 把 state(状态)初始化为0(未录音状态)
    })
    clearInterval(_this.data.timer);
    // 结束录音 保存录音
    tape.stop()
    // 监听结束录音事件
    tape.onStop((res) => {
      this.data.tempFilePath = res.tempFilePath
      console.log('保存录音');
      wx.showToast({
        title: '保存录音成功',
        mask: true,
        duration: 500,
      })
    })
  },

最终效果:在主页视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/731603.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

锐捷统一上网行为管理与审计系统 static_convert.php 前台RCE漏洞复现

0x01 产品简介 锐捷统一上网行为管理与审计RG-UAC系列是星网锐捷网络有限公司自主研发的上网行为管理与审计产品,具备的上网行为日志审计功能,能够全面、准确、细致的审计并记录多种上网行为日志,包括网页、搜索、外发文件、邮件、论坛、IM等等,并对日志数据进行统计分析,…

React的服务器端渲染(SSR)和客户端渲染(CSR)有什么区别?

React的服务器端渲染&#xff08;SSR&#xff09;和客户端渲染&#xff08;CSR&#xff09;是两种不同的页面渲染方式&#xff0c;它们各自有不同的特点和适用场景&#xff1a; 服务器端渲染&#xff08;SSR&#xff09; 页面渲染: 页面在服务器上生成&#xff0c;然后将完整的…

USB2.0网卡安装驱动

有三种安装方式&#xff1a; 驱动精灵驱动总裁USB2.0网卡自带安装程序 前两种很简单&#xff0c;下载驱动精灵或者驱动总裁&#xff0c;然后检测本地硬件&#xff0c;安装相应驱动。 本文重点要介绍的是第三种&#xff0c;利用USB2.0网卡自带的安装程序。有的时候驱动精灵或…

数仓中数据分层的标准流向解读

在大数据开发中&#xff0c;数据分层是一个至关重要的概念。合理的数据分层可以有效地提升数据处理的效率和质量。本文将详细介绍数据分层的标准流向和相关注意事项&#xff0c;并结合实际应用进行说明。 数据分层的标准流向 根据行业标准&#xff0c;数据分层的标准流向如下…

js浅拷贝和深拷贝的区别

JavaScript中的浅拷贝和深拷贝的主要区别在于它们如何处理引用类型的数据。 浅拷贝仅复制对象的引用&#xff0c;而不复制对象本身。这意味着新旧对象共享同一块内存空间。因此&#xff0c;如果修改了原始对象&#xff0c;复制的对象也会相应地改变&#xff0c;因为它们实际上是…

Ant Design Vue Cascader 级联选择 错位问题

当Cascader 多个的时候 对应的下列会错位 如果滚动 他不会跟着元素 而是会跟着屏幕滚动&#xff0c;如下效果 解决方法 在Cascader 标题添加 getPopupContainer 属性监听对应的位置&#xff0c;返回对应的元素 <a-cascader class"smart-width-100 " v-model:…

民宿在线预订系统

摘要 随着国家的发展&#xff0c;人们也更加重视自己的业余时间。在特定的假期或休闲时间外出度假已逐渐成为这个时代的趋势。在我国&#xff0c;随着经济的发展和城市居民物质生活水平的提高&#xff0c;旅游业也呈现出越来越受欢迎的趋势。同时随着人口的快速流动&#xff0…

云计算之CDN

目录 一.什么是CDN&#xff1f; 二.使用CDN的好处&#xff1a; 三.主要特点&#xff1a; 四.关键功能&#xff1a; 一.什么是CDN&#xff1f; 1.CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和…

R语言——数据与运算

练习基本运算&#xff1a; v <- c(2,4,6,9)t <- c(1,4,7,9)print(v>t)print(v < t)print(v t)print(v!t)print(v>t)print(v<t) v <- c(3,1,TRUE,23i)t <- c(4,1,FALSE,23i)print(v&t)print(v|t)print(!v)v <- c(3,0,TRUE,22i)t <- c(1,3,T…

【NirCmd】一款强大的Windows命令行工具

简介 NirCmd 是一款由 Nir Sofer 开发的免费命令行工具&#xff0c;它允许用户通过简单的命令行选项执行各种任务&#xff0c;而无需打开任何图形用户界面。这款工具的功能覆盖了从系统设置调整到文件操作等多个方面&#xff0c;是系统管理员和高级用户自动化任务处理的得力助…

System.Runtime, Version=6.0.0.0,生成的dll使用出现错误问题

解决&#xff1a; 1.unity左上角file点击选中build settings 点击player settings &#xff0c;然后在player的window的other settings的configuration更改为 Framerwork 其实这个不换也可以的&#xff0c;我后面调试完&#xff0c;发现这个不是重点&#xff0c;下面第2点才是…

项目实践---Windows11中安装Zookeeper3.5.5/Hadoop2.7.2/Hive2.3.7

1.背景 项目第一版本使用大数据组件核心版本均为2.x&#xff0c;需要在个人电脑搭建相关大数据环境&#xff0c;这次提供Hadoop2.7.2 Hive2.3.7版本的环境搭建。 2.相关安装包下载 链接&#xff1a;https://pan.baidu.com/s/1tkYr1UpqMKKVJHY5cfvVSw?pwddcxd 提取码&…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(三)-shell语法

主要通过讲解shell中的一些基本语法&#xff0c;可以当作日常的笔记来进行查询和记忆。 文章目录 前言 一、shell 二、shell语法 1.运行方式 2.注释 3.变量 4.默认变量 5.数组 总结 前言 主要通过讲解shell中的一些基本语法&#xff0c;可以当作日常的笔记来进行查询和记忆。…

变电站智能巡检机器人解决方案

我国拥有庞大的电网体系&#xff0c;变电站数量众多&#xff0c;且近年来快速增长。然而目前我国变电站巡检方式仍以人工为主&#xff0c;存在效率低下、监控不全面等问题。变电站通常是一个封闭的系统空间&#xff0c;设备种类繁多、占地面积广阔&#xff0c;这对巡检人员实时…

芯片方案SIC88336血氧仪方案

血氧仪利用红外线光源照射患者手指末梢&#xff0c;在经过血液的时候&#xff0c;光线会被血液中的氧合血红蛋白和脱氧血红蛋白吸收。传感器感知到吸收的光强度变化&#xff0c;并将其转化为电信号发送给主机。主机通过处理这些信号&#xff0c;计算出血氧饱和度值&#xff0c;…

《沃趣 分手后霸道少爷宠爆我》盛大开机典礼

南京五聚文化传媒有限公司自豪地宣布&#xff0c;引人入胜的2024年度短剧巨作——《沃趣 分手后霸道少爷宠爆我》——今日正式开拍&#xff01;在星辰下的华丽舞台上&#xff0c;我们汇集了业界的精英力量&#xff0c;准备讲述一个关于爱、错位与重生的故事。 典礼精彩亮点 1.…

深入理解RunLoop

RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念&#xff0c;这篇文章将从 CFRunLoop 的源码入手&#xff0c;介绍 RunLoop 的概念以及底层实现原理。之后会介绍一下在 iOS 中&#xff0c;苹果是如何利用 RunLoop 实现自动释放池、延迟回调、触摸事件、屏幕刷新等功能的。 一…

Verilog:【8】基于FPGA实现SD NAND FLASH的SPI协议读写

在此介绍的是使用FPGA实现SD NAND FLASH的读写操作&#xff0c;以雷龙发展提供的CS创世SD NAND FLASH样品为例&#xff0c;分别讲解电路连接、读写时序与仿真和实验结果。 目录 1 视频讲解 2 SD NAND FLASH背景介绍 3 样品申请 4 电路结构与接口协议 4.1 SD NAND 4.2 SD NAND测…

如何在微信小程序使用vant 进行自定义底部tabbar组件

在微信小程序中使用 Vant 自定义底部 TabBar 需要进行以下步骤&#xff1a; 一、首先&#xff0c;你需要在 app.json 文件中配置自定义 TabBar。 在 "tabBar" 字段中&#xff0c;设置 "custom" 为 true&#xff0c;表示使用自定义 TabBar。 app.json示例…