uniapp+uView 【详解】录音,自制音频播放器
效果预览

代码实现
<template><view class="btnListBox"><view class="audioBox" v-if="audioLength"><u-row><u-col span="2"><u--text align='center' :text="currentTime"></u--text></u-col><u-col span="8"><u-slider @change='currentTime_change' v-model="currentTime" :max='audioLength'></u-slider></u-col><u-col span="2"><u--text align='center' :text="audioLength+' 秒'"></u--text></u-col></u-row></view><view v-if="record_status === '准备录音'" @click="startRecord"><u-icon :color='iconColor' name="mic" size='100px'></u-icon><u--text align='center' text="点我开始录音"></u--text></view><view v-if="record_status === '录音中'" @click="endRecord"><Breathing><u-icon :color='iconColor' name="mic" size='100px'></u-icon></Breathing><u--text align='center' text="录音中"></u--text></view><view v-if="record_status === '已录音'" class="row"><view @click="reset"><u-icon :color='iconColor' name="reload" size='100px'></u-icon><u--text align='center' text="重新录制"></u--text></view><view v-if="play_status== '待播放' || play_status== '暂停中'" @click="play"><u-icon :color='iconColor' name="play-circle-fill" size='100px'></u-icon><u--text align='center' text="播放试听"></u--text></view><view v-if="play_status== '播放中'" @click="pause"><u-icon :color='iconColor' name="pause-circle-fill" size='100px'></u-icon><u--text align='center' text="暂停播放"></u--text></view></view></view>
</template>
<script>// 创建对象--录音机const recorderManager = uni.getRecorderManager();// 创建对象--录音const audio = uni.createInnerAudioContext()import Breathing from "../components/breathing.vue";export default {components: {Breathing,},data() {return {iconColor: '#3c9cff',// 录音当前播放位置currentTime: 0,audioLength: 0,record_status: '准备录音',play_status: '待播放',voicePath: '',}},onLoad() {let self = this;recorderManager.onStart(res => {});recorderManager.onStop(res => {self.voicePath = res.tempFilePath;audio.src = res.tempFilePath});audio.onCanplay(res => {if (audio.duration) {self.audioLength = audio.duration.toFixed(0)}})audio.onTimeUpdate(res => {self.audioLength = audio.duration.toFixed(0)self.currentTime = audio.currentTime.toFixed(0);});audio.onEnded(res => {self.currentTime = 0self.play_status = '待播放'});},methods: {currentTime_change(new_currentTime) {audio.seek(new_currentTime)},reset() {this.record_status = '准备录音'this.voicePath = ''this.audioLength = 0this.currentTime = 0},startRecord() {recorderManager.start();this.record_status = '录音中'},endRecord() {recorderManager.stop();this.record_status = '已录音'},play() {if (this.voicePath) {audio.play();this.play_status = '播放中'}},pause() {audio.pause();this.play_status = '暂停中'}}}
</script>
<style scoped>.audioBox {width: 100%;}.btnListBox {flex-direction: column;display: flex;justify-content: center;align-items: center;height: 100vh;}.row {width: 100%;display: flex;justify-content: space-evenly;}
</style>
组件 Breathing.vue 见 vue 组件封装 – 【呼吸】动画效果二
官方文档
- uni.getRecorderManager() | uni-app官网
- uni.createInnerAudioContext() | uni-app官网
注意事项
电脑上录音的事件响应并不灵敏,建议在手机上预览最终效果。
相关文章:
uniapp+uView 【详解】录音,自制音频播放器
效果预览 代码实现 <template><view class"btnListBox"><view class"audioBox" v-if"audioLength"><u-row><u-col span"2"><u--text aligncenter :text"currentTime"></u--text>…...
机器学习---概率图模型(隐马尔可夫模型、马尔可夫随机场、条件随机场)
1. 隐马尔可夫模型 机器学习最重要的任务是根据已观察到的证据(例如训练样本)对感兴趣的未知变量(例如类别标 记)进行估计和推测。概率模型(probabilistic model)提供了一种描述框架,将描述任…...
cool 框架 node 后端封装三方Api post请求函数
1.需求 现在一些数据源 ,需要从三方地址拿到一些数据 比如说电影列表 信息了 影院列表信息了 等一些展示的数据,但是人家这种东西 害需要使用 appkey appserect 这种验签 这种需求 你前端调用接口是直接调用不了的 因为需要用到验签 需要后端接口转接一…...
awd总结
总结: 由于是第一次参加AWD比赛,各方面经验都不足,在参赛的前几天也是疯狂搜集各种脚本、框架、工具等,同时也参考b站的视频进行学习,我发现就是还是实操才能更快的学习 我觉得就是我前期的准备工作不足,…...
【react】react+es6+antd5.13.2+ts,antd表格的操作如何在父组件写?
reactes6antd5.13.2ts,antd表格的操作如何在父组件写? 我的子组件columns.tsx,只加表头,操作放在父组件。 columns.tsx的代码: export const dataColumns [{title: 项目成员,dataIndex: name,key: name,},{title: 可选账号,alig…...
virtio笔记
最近在看虚拟化相关的东西,以virtio-console为例,记录下。 此文只是学习笔记,文中肯定有不少错误,不要参考 devicemd侧: virtio_console.c中,初始化会对port->cb赋值为 viritio_console_control_tx&am…...
初始web服务器(并基于idea来实现无需下载的tomcat)
前言 前面学习了对应的http协议,我们知道了他是在网络层进行数据传输的协议,负责相应数据以及接收数据的规则,但是在人员开发后端的时候不仅仅需要你写io流进行数据传输,还需要你进行对应的tcp协议来进行数据打包发送http协议-CSD…...
软件文档测试
1 文档测试的范围 软件产品由可运行的程序、数据和文档组成。文档是软件的一个重要组成部分。 在软件的整人生命周期中,会用到许多文档,在各个阶段中以文档作为前阶段工作成果的体现和后阶段工作的依据。 软件文档的分类结构图如下图所示: …...
从零开始手写mmo游戏从框架到爆炸(七)— 消息封装
导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 上一篇,我们初步把消息handler 注册到了服务中,在进行后续工作之前我们需要再做一些准备工作。 第一:把之前自己管理的bean放到spring中…...
从Unity到Three.js(画线组件line)
JavaScript 0基础,只是照着官方文档临摹了下,之后有时间再进行细节学习和功能封装。 import * as THREE from three; //引入threejsconst renderer new THREE.WebGLRenderer();//创建渲染器 //设置渲染范围,当前撑满全屏,屏幕左上角是&…...
LCP 30. 魔塔游戏 - 力扣(LeetCode)
题目描述 小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造成伤害值,即血量减…...
数据结构——单向链表和双向链表的实现(C语言版)
目录 前言 1. 链表 1.1 链表的概念及结构 1.2 链表的分类 2. 单链表接口实现 2.1 数据结构设计与接口函数声明 2.2 创建结点,打印,查找 2.3 尾插,头插,尾删,头删 2.4 插入或删除 2.4.1在指定位置后 2.4.2在…...
TCP和UDP相关问题(重点)(4)——4.使用TCP的协议有哪些?使用UDP的协议有哪些?
4.使用TCP的协议有哪些?使用UDP的协议有哪些? 使用TCP的协议有:HTTP3.0之前的HTTP协议、HTTPS、FTP、SMTP、SSH... 使用UDP的协议有:HTTP3.0、DNS、DHCP......
Python进阶--爬取美女图片壁纸(基于回车桌面网的爬虫程序)
目录 一、前言 二、爬取下载美女图片 1、抓包分析 a、分析页面 b、明确需求 c、抓包搜寻 d、总结特点 2、编写爬虫代码 a、获取图片页网页源代码 b、提取所有图片的链接和标题 c、下载并保存这组图片 d、 爬取目录页的各种类型美女图片的链接 e、实现翻页 三、各…...
[office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法
excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 在日常工作中经常会到用excel,有时需要计算毛重和皮重的时间间隔,具体的计算方式是什么,一起来了解一下吧 在日常工作中经常会到用excel,在整理编辑过磅数据…...
Pandas 对带有 Multi-column(多列名称) 的数据排序并写入 Excel 中
Pandas 从Excel 中读取带有 Multi-column的数据 正文 正文 我们使用如下方式写入数据: import pandas as pd import numpy as npdf pd.DataFrame(np.array([[10, 2, 0], [6, 1, 3], [8, 10, 7], [1, 3, 7]]), columns[[Number, Name, Name, ], [col 1, col 2, co…...
如何为Kafka加上账号密码(一)
Kafka认证基本概念 一直以来,我们公司内网的Kafka集群都是在裸奔,只要知道端口号,任何人都能连上集群操作一番。直到有个主题莫名消失,才引起我们的警觉,是时候该考虑为它添加一套认证策略了。 认证和授权就是一对孪生…...
Elasticsearch的Index Lifecycle Management(ILM)
Elasticsearch的Index Lifecycle Management(ILM)功能提供了一种自动化管理索引生命周期的方式。ILM使得用户可以基于特定的条件(如索引的年龄、大小等)来自动执行如回滚、删除等操作,进而优化存储和提高查询性能。ILM…...
2、学习 Nacos 注册中心
学习 Nacos 注册中心 一、使用Nacos作为注册中心1、父pom.xml文件配置SpringCloudAlibaba的dependency-management依赖2、在微服务中添加Nacos客户端依赖3、配置Nacos服务地址 二、服务的分级存储模型1、配置实例的集群属性2、权重配置 三、命名空间 一、使用Nacos作为注册中心…...
Java 如何操作 nginx 服务器上的文件?
随着Java技术的不断发展,越来越多的开发人员开始使用Java来操作服务器上的文件。其中,如何操作nginx服务器上的文件也是许多Java开发人员所关注的重点之一。本文将介绍Java操作nginx服务器上文件的基本方法。 一、使用Java的File类 Java的File类可以用…...
别再只会复制代码了!STM32F103 HAL库驱动RC522 RFID模块的底层SPI通信原理解析
深入解析STM32F103 HAL库驱动RC522的SPI通信机制 当开发者第一次接触RFID模块时,往往会被各种现成的驱动库所吸引——复制粘贴几行代码,模块就能工作,这确实很诱人。但当你遇到通信不稳定、数据错误或者需要优化性能时,仅靠"…...
Windows安卓子系统终极指南:5步打造完美移动应用体验
Windows安卓子系统终极指南:5步打造完美移动应用体验 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA 想在Windows电脑上流畅运行手机应用吗&…...
Linux驱动开发:模块参数传递机制详解与工程实践
1. 项目概述:驱动安装与参数传递的“暗语”艺术在Linux驱动开发的世界里,把驱动模块加载进内核,就像给一个正在高速运转的精密机器安装一个新的零件。而“安装驱动参数传递”,就是这个安装过程中,我们与内核、与新零件…...
深入解析RISC-V CLINT:多核中断与定时器编程实战
1. 项目概述:深入理解SiFive U54内核的CLINT如果你正在基于SiFive的Freedom U540 SoC或者类似的RISC-V多核平台进行嵌入式开发,特别是涉及到操作系统移植、多核启动或者中断管理,那么“CLINT”(Core-Local Interruptor,…...
别再只用MSE了!PyTorch中SmoothL1Loss的保姆级使用指南(附代码对比)
深度学习回归任务中SmoothL1Loss的实战应用与MSE对比解析 在目标检测、房价预测等回归任务中,选择合适的损失函数往往决定了模型的收敛速度和最终性能。许多初学者会习惯性选择最熟悉的均方误差(MSE)损失函数,但当数据中存在离群点时,MSE的二…...
【Java杂项】为什么 b += 1 可以,但 b = b + 1 会报错?类型提升与复合赋值详解
【Java杂项】为什么 b 1 可以,但 b b 1 会报错?复合赋值与类型提升讲清楚前言一、先给结论:它不是简单的文本替换二、先看认知冲突2.1 普通赋值为什么报错2.2 复合赋值为什么能通过三、类型提升到底是什么3.1 常见类型提升结果3.2 为什么小…...
《CVPR2025-DEIM创新改进项目实战:从原理到部署的深度学习优化全攻略》005、DEIM模型架构总览——编码器-解码器与动态门控设计
CVPR2025-DEIM创新改进项目实战:DEIM模型架构总览——编码器-解码器与动态门控设计 从一次诡异的梯度爆炸说起 去年冬天调DEIM的早期原型,模型在训练到第47个epoch时突然loss飙到NaN。检查了三天,最后发现是门控模块的sigmoid输出在极端情况下饱和,导致梯度回传时门控信号…...
深入解析Arm Cortex-A53 Cache架构:从原理到多核一致性与性能优化实践
1. 项目概述:为什么我们需要深入理解A53的Cache?在嵌入式系统和移动计算领域,Arm Cortex-A53处理器是一个绕不开的名字。作为Armv8-A架构下的“小核”常青树,它以其出色的能效比,广泛存在于从智能手表到智能电视&#…...
不同版本Python安装常见问题与解决方案
1. 如何在特定的版本下安装package (1) 在命令提示符中,打开相应版本python的安装目录; (2) 执行语句python.exe -m pip install XX (3) 更新库 2. 如何在Spyder中设定特定的python解释器 Spyder—Tools—Python Interpreter...
Vivado FPGA设计:基于IP核的系统级集成与高效开发实践
1. 引言:从“造轮子”到“搭积木”的设计范式转变如果你在数字电路设计领域摸爬滚打超过五年,大概率经历过从ISE到Vivado的迁移阵痛。2012年,当Xilinx推出Vivado时,很多习惯了ISE“代码驱动”工作流的老工程师都感到不适应——这个…...
