【Uni-app开发笔记】录音和会话列表的双向联动【效果展示+代码获取】

uniapp录音功能 其中,format表示录音格式,duration表示录音时长,sampleRate表示采样率,numberOfChannels表示声道数,encodeBitRate表示编码比特率,frameSize表示帧大小,audioSource表示音频获取源,可以选择auto、camcorder或voice_communication。在停止录音的事件处理函数中,调用uniRecorder的stop方法停止录音,并在stop方法返回的Promise对象中获取录音生成的临时文件路径。 阅读详情

博主简介

  • 前端开发、思维干货、个人成长、知识社群。
  • 前端开发(web/h5/小程序)、知识付费等合作请私信。
  • 福利:关注公众号(主页简介和底部信息卡片),回复:“学习礼包”,有我精心整理的100G+的IT学习资料~

前言 

近期接到一个业务需求,录音和文本的双向联动。

双向联动:

拖拽音频,对应播放且(查找)对应滚动到会话列表的句子;

点击句子,会话列表滚动和音频播放器从句子的开始时间播放。 


一、核心思路 

实现录音(音频)和文本双向联动的核心思路是建立音频播放进度与文本内容片段的映射关系,通过实时监听音频状态变化同步更新文本高亮,同时支持点击文本片段跳转到对应音频位置,形成双向交互。

二、核心逻辑和知识点

1. 数据结构设计:建立音频与文本的关联映射

  • 核心数据:为每个文本片段(句子 / 段落)绑定对应的音频时间区间(start开始时间、 结束时间),形成类似的数据结构如
  •  [{ content: "文本1", start: 0, end: 5 }, 
    { content: "文本2", start: 5, end: 10 }] 
  • 作用:通过时间区间可快速定位 “当前播放的音频对应哪段文本”,或 “点击的文本对应音频的哪个时间点”。

2. 音频驱动文本:播放时自动高亮对应文本

  • 监听音频进度:利用音频 API实时获取当前播放时间(currentTime)。
  • 动态匹配文本:根据当前播放时间,遍历文本片段的时间区间,找到 start ≤ currentTime ≤ end 的文本片段,标记为 “激活状态”(如高亮、边框变色)。
  • 自动滚动优化:当激活的文本片段不在可视区域时,通过滚动容器的 scrollIntoView 或类似方法,自动将其滚动到视野内。

3. 文本驱动音频:点击文本跳转到对应音频位置

  • 点击事件绑定:为每个文本片段绑定点击事件,触发时获取该片段的 startPosition。
  • 音频跳转与播放:调用音频 API 的 seek(time) 方法跳转到 startPosition,并根据当前音频状态决定是否播放(若暂停则触发播放,若正在播放则直接跳转后继续播放)。
  • 状态同步:跳转后需同步更新音频播放状态(如播放 / 暂停状态标记),避免 UI 与实际状态不一致。

4. 状态管理:确保双向操作的一致性

  • 单一数据源:音频的播放状态(播放 / 暂停)、当前时间,以及文本的激活状态,需基于同一套数据更新,避免状态冲突。
  • 事件通信:若音频和文本为独立组件,通过父子组件通信(如 Vue 的 $emit/props、React 的回调函数)或全局事件总线,同步时间和状态变化(例如:音频进度变化时通知文本更新激活状态,文本点击时通知音频跳转)。

5. 异常处理与体验优化

  • 时间精度问题:音频进度更新可能存在延迟(如每秒更新 4-5 次),需容忍一定时间误差(如 ±0.5 秒),避免文本频繁切换高亮。
  • 加载状态处理:音频未加载完成时,禁用文本点击跳转功能,避免 seek 方法失效。
  • 重复操作防抖:短时间内连续点击文本或频繁拖动进度条时,通过防抖处理减少 API 调用次数,提升性能。

三、案例示范 

1. 案例准备

1、我使用uni-app实现音频和文本的双向联动。

uni-app官网

2、基本的音频播放器,从插件市场下载(我当时就默认下载第一个了)。

PS:

1、这个插件实现基本的功能,播放-暂停-拖拽播放。如果需要实现其他的业务,需要自行动手实现。

2、本文不演示如何下载和如何详情使用插件,自行搜索。

DCloud 插件市场

 2. index.vue

页面主要是引入音频播放器,展示会话列表以及实现相关功能。

会话列表的数据结构上面有介绍

 重点关注开始时间和结束时间字段(用于双向联动的查找和匹配) 

3. free-audio.vue

在uni-app项目中引入音频播放器组件,案例的双向联动,需要实现相关逻辑。

4. 案例效果

(在未播放的情况下,点击句子,页面实现句子滚动,音频从句子的开始时间进行播放)

(拖拽进度条,实现会话列表的句子进行对应滚动)

四、小结

只要深刻理解双向联动的核心逻辑,实际上并不会很难实现本篇的案例。至少我们是清楚实现方向,至于代码层面,解放双手,让AI实现基本的逻辑,自己加以调试就好了。

代码仓库地址:

https://gitee.com/kaimana/uni-app_AudioAndText.git

PS:

本篇文章的案例效果的代码,基本上AI实现了95%的功能,我主要负责搭建/配置项目和调试代码。

所以就算是对相关的编程技术(如本篇的uni-app)或者相关API(比如录音的start/pause/seek等)不太熟悉也没事,了解基本使用+AI解释分析,可以很好地解决问题。

用其他编程技术/平台如(react、vue、pc、移动端、ios)实现案例效果也是大差不差的,核心思路和逻辑是一样的,不同就是对应的技术和知识点使用。 

uniapp实现H5页面麦克风权限获取与录音功能 在获取了麦克风权限后,我们可以利用navigator.mediaDevices.getUserMedia接口获取音频流,然后通过MediaRecorder接口进行录音。接下来,我们编写JavaScript代码,分别实现将音频流转换为Blob文件并上传、将音频流转换为Base64字符串上传,以及将音频文件下载到本地的功能。在uni-app开发H5页面时,需要在manifest.json文件中添加录音权限的配置。这段配置代码是用于向用户请求麦克风权限,确保应用在运行时可以访问设备的音频输入。 阅读详情

相关推荐

uniapp打包iOS应用上传图片失败?手把手教你解决Gallery模块缺失问题

本文详细解析了uniapp打包iOS应用时出现的Gallery模块缺失问题,提供了从模块配置到代码适配的完整解决方案。针对HBuilderX 3.6.11版本后的隐私合规调整,指导开发者如何正确配置manifest.json文件、添加iOS隐私描述,并给出代码层的最佳实践,确保图片上传功能正常运作。

i3j4k5的博客 236

uniapp录音方法的使用说明

uniapp录音方法的使用说明 设计思路: 1、中间按钮点击录音开始,可以进行暂停,继续操作 2、录音时可以进行取消,完成操作 3、录音完成可以点击听录好的音频 4、可以将录好的音频删除重新录音 需要注意的地方: 1、开始录音时需要检测是否是H5页面,H5页面没有录音功能,app端需要检测是否有录音权限 开始录音methodfile.js export async function startRecording() { return new Promise((resolve, reject) =&

weixin_48113283的博客 2808

从立项到上线三个月:面试鸭在线刷题工具的产品与技术复盘

在线刷题是程序员面试准备中的高频场景,力扣等平台虽提供海量题目,但缺乏针对面试的系统化路径。面试刷题工具的核心价值在于将算法练习、八股文背诵和场景题训练整合为一条清晰的学习曲线,并通过记忆曲线与错题回流机制提升复习效率。在工程实践上,需要兼顾题库质量、冷启动推荐和性能优化。以面试鸭为例,复盘其从产品定位、题库体系设计、核心功能实现到冷启动运营的完整过程,并整理上线踩坑经验,为工具型产品开发者和面试准备者提供参考。

weixin_34037515的博客 437

uniapp 录音组件

uniapp原生录音组件,微信小程序录音

qq_43513271的博客 1830

实战拆解打车小程序:从架构设计到性能优化全解析

小程序开发已成为连接线上与线下服务的重要技术载体,其核心在于构建高效、稳定的实时交互系统。从技术原理上看,这通常涉及WebSocket长连接实现双向通信、关系型与内存数据库的混合使用以支撑高并发读写,以及基于地理位置服务的智能调度算法。这些技术的工程价值在于能够为用户提供无缝的O2O体验,例如在出行、外卖等场景中实现订单的实时匹配与状态同步。本文以出行领域为例,深入探讨如何实现一个具备完整交易闭环的小程序应用。针对开发中常见的性能瓶颈,如“vendor.js调用栈溢出”和“Canvas卡顿”问题,本文将提供

weixin_34342992的博客 454

uni-app零工平台前端工程实践:跨端一致性与支付闭环

零工经济平台前端开发需兼顾微信小程序与H5双端一致性、实时状态同步及合规支付链路。uni-app凭借Vue语法低门槛、条件编译能力与统一API封装,成为高校课设与轻量创业团队的高性价比选型。其核心价值在于通过编译时适配解决跨平台真问题——如坐标系转换、分包加载、权限分级与幂等支付回调,而非简单代码复用。典型应用场景包括毕设落地、MVP快速验证及中小服务商数字化工具构建。本文聚焦uni-app在零工场景下的生产级实践,覆盖地图性能优化、WebSocket双端状态同步、京东/H5/小程序三重支付兜底及微信OAu

weixin_34166472的博客 288

uniapp实现录音

当我们录音完毕,需要调用这个初始化出来的对象的stop方法,将会返回给我们一个音频链接,我们将该获取到的链接赋值给audio组件的value值,待其初始化后即可进行播放暂停等操作。3. 当用户在录制息屏会主动触发该实例对象的stop哦,记得处理一下息屏时的时间,否则容易给用户造成一种看起来还在录制的错觉~如上图所示,主要功能就是录音,获取音频链接,使用音频组件进行播放,话不多说,我们开始实现功能吧。2. 我们视觉上的录音时间是通过计时器来计算的,但是这个组件有它的录音限制,最长只能录制十分钟。

在校前端菜菜大学僧 5324

微信原生框架开发教育类小程序:POYI英语学习实战复盘

跨端框架如uni-app和Taro通过一套代码覆盖多端,但教育类小程序在音频播放、语音录制、长期存储等底层能力上,往往需要回归微信原生API处理焦点冲突与真机兼容问题。原生开发以对包体积、组件行为和调试链路的强可控性,换来更稳定的体验交付与更短的排错路径。在单词记忆、听力训练、口语评测等高频交互场景中,优雅设计数据模型与页面生命周期,可有效规避音频抢占、分包超限和渲染白屏等典型陷阱。当学习类产品需要精细管理登录态、本地缓存与云同步,并兼顾审核合规时,基于微信原生框架的工程化方案能提供清晰、直接的落地路径。本

weixin_34401479的博客 382

uni-app优秀插件

组件库 ThorUI ColorUI UI界面和组件 轮播图系列 高级轮播图 精致的图片展示组件,自定义面板指示点,可配置性强 大小图轮播,类似手机相册 图片轮播,商品详情图 QSwiper组件 切换动画很强大 一款由自定义元素组成的有过渡动画及背景渐变的swiper、引导页,切分为元素解决了小程序占内存大问题 画廊(ynGallery)组件 类似轮播但不是 通用画廊(ynGallery)组件 流畅的滑动感 类似于猫眼影廊 体验感不错 带缩放的轮播 轮播不能用于H5 uni.createAnimat

Liuyilllin的博客 7731

智云物业小程序前端架构解析:多端兼容、支付集成与性能优化实践

跨端开发框架已成为现代移动应用开发的核心技术,它通过一套代码编译到多个平台,解决了多端适配的难题。其原理在于利用条件编译和平台API抽象层,抹平微信、支付宝等小程序平台的差异,实现业务逻辑的高度复用。这种技术方案在社区服务、本地生活等To C和To B场景中价值显著,能大幅降低开发与维护成本,提升迭代效率。以物业小程序为例,它需要集成支付、消息推送、蓝牙门禁等平台生态能力,同时处理复杂的用户认证、账单缴费、工单流转等业务逻辑。本文以智云物业小程序为案例,深入剖析其前端架构设计,涵盖多端兼容性实现、支付模块集

weixin_31419153的博客 324

大学生真实消费场景的SpringBoot+Vue记账系统

记账系统是典型的业务型Web应用,其核心在于消费行为建模、多源流水清洗与实时统计分析。基于SpringBoot构建高可靠后端服务,依托Vue实现响应式交互体验,通过RESTful API完成前后端解耦,显著提升操作即时性与多端复用能力。技术选型聚焦工程落地:MySQL分区表优化查询性能,JSON字段支撑扩展属性,JWT保障接口安全,OCR/语音/地图等能力增强用户感知。该架构不仅适用于校园消费管理,也为个人财务SaaS、小微商户对账等场景提供可复用的技术范式。

weixin_42466723的博客 296

家政小程序开发需求分析

2025年家政服务线上化率突破40%1,AI驱动的个性化服务、家政信用体系建设和员工制转型成为三大核心趋势。开发过程中需预留接口,支持后续接入智能家居设备联动服务(如空调维修后同步清洁滤网提醒)

shaonianrumeng的博客 494

LangChain与SkillLite集成:AI Agent安全沙箱实践

在AI与自动化技术领域,安全沙箱是实现可信计算的核心机制。其原理是通过资源隔离与权限控制,构建受限的执行环境。技术价值在于平衡功能开放性与系统安全性,尤其适用于处理用户提交的非受信代码或敏感数据。典型应用场景包括AI插件系统、在线代码评测平台等。本文以LangChain框架与SkillLite沙箱的深度集成为例,详解如何通过命名空间隔离、cgroups限制等机制,为AI Agent赋予安全执行动态技能的能力。其中涉及的关键技术点包括Python运行时隔离、动态资源配额管理,以及如何防范Shell注入等常见攻

weixin_34189116的博客 404

uniapp实现录音喊话功能

uniapp实现录音喊话功能---记录

a666666000的博客 4806

单细胞分析实战:当Seurat的SCTransform遇上Harmony,我的整合流程优化笔记

本文详细介绍了单细胞转录组数据分析中SCTransform与Harmony整合流程的优化策略。通过实战案例展示如何调整SCTransform参数、优化Harmony整合效果,并解决常见问题,帮助研究者获得更可靠的生物学发现。特别适合需要处理批次效应的单细胞数据分析人员。

weixin_42552716的博客 356

OGG工具实现MySQL同步到Oracle数据库

OGG工具实现MySQL同步数据到Oracle

Mrzhou的博客 1682

uniapp实现录音功能和播放功能

这个功能实现起来并不麻烦 参考官方文档的API 根据API调试一下就可以官方文档也有相应的示例获取的录音管理器 recorderManager。

qq_21861771的博客 1336

【Stata双重差分模型】双重差分DID的具体操作步骤

本案例将详细阐述如何使用双重差分法进行实证分析,并展示具体的STATA操作代码。

a519573917的博客 2万+

uniapp中实现H5录音和上传、实时语音识别(兼容App小程序)和波形可视化

在uniapp中使用Recorder-UniCore插件可以实现跨平台录音功能,uniapp自带的recorderManager接口不支持H5、录音格式和实时回调onFrameRecorded兼容性不好,用Recorder插件可避免这些问题。支持vue2、vue3、nvue,支持已有的大部分录音格式:mp3、wav、pcm、amr、ogg、g711a、g711u等

高坚果兄弟 1万+

Chapter2、HDR流水线

HDR内容的获取(不同曝光时间的图片合成) 相机响应函数 HDR视频

qq_55621259的博客 2597

从点击图标到Activity亮屏:AMS、Zygote、ActivityThread的Binder协作之旅

Launcher通过Context调用 startActivity(),最终会通过 Activity.startActivity() 传递到 ActivityManager.getService(),获取AMS的Binder代理对象(IActivityManager)。这里的 attach() 方法通过Binder调用AMS的 attachApplication(),将新进程的 IApplicationThread 代理对象传递给AMS。这一步的Binder通信,是整个启动流程的关键转折点,值得细细品味。

大模型大数据攻城狮的专栏 1069

uniapp 录音和播放功能

在onload中获取录音结束的返回值。

m0_72759446的博客 1525

python实现DoIP基本通信(收发报文)

python实现DoIP基本通信(收发报文)

天赐好车的博客 894

uni-app实现录音及播放功能

实现录音功能 这里就需要用到uni.getRecorderManager() 大部分是直接搬了官网的代码,但是还是需要记录一下修改的部分 export default { data: { recorderManager: {}, innerAudioContext: {}, }, onLoad(options) { this.recorderManager = uni.getRecorderManager(); this.innerAudioContext = uni.c.

DOM曼珠沙华的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 【Vue学习笔记】状态管理:Pinia 与 Vuex 的使用方法与对比【附有完整案例】
下一篇: 【Vant Weapp】下拉菜单+自定义卡片的封装+跳转详情页【演示+代码】
十八朵郁金香
十八朵郁金香 优质创作者: 前端开发技术领域 优质创作者: 前端开发技术领域
博客等级 码龄5年 6415粉丝 107原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八朵郁金香

感恩前行路上有你相伴

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值