微信小程序案例2.2:图片与声音——InnerAudioContext音频播放与变速控制详解
一、案例概述本案例演示了微信小程序中image组件的使用方法、InnerAudioContext音频上下文的创建与控制、数据绑定和事件绑定、onLoad生命周期函数等功能。实现效果页面上显示一幅图片点击图片时播放音乐再次点击暂停播放依次交替。功能扩展增加了播放速度控制慢速/正常/快速并在每次播放和暂停时在控制台打印当前音频的播放位置和播放速率。二、项目结构miniprogram/ ├── app.js ├── app.json ├── app.wxss ├── sitemap.json ├── project.config.json └── pages/ └── index/ ├── index.js ├── index.json ├── index.wxml └── index.wxss图片文件yanan.webp和音频文件huiyanan.mp3存放在微信云开发的云存储中通过云存储下载链接https URL引用页面中不再需要本地的images和audios目录。二点五、云开发环境初始化使用云存储资源前需要在app.js中初始化云开发环境App({onLaunch(){wx.cloud.init({env:cloud1-d6gbuj3063c9c4451})}})代码解析onLaunch是小程序启动时触发的生命周期函数适合做云开发环境的初始化。wx.cloud.init()初始化云开发能力env参数指定云环境ID。初始化后小程序就可以访问该环境下的云存储、云数据库、云函数等资源。三、核心代码3.1 index.wxmlviewclasscontainerimagesrc{{imgSrc}}classmy-imagebind:tapsing/imageviewclassstatus{{isPlaying ? 播放中 : 已暂停}}/viewviewclassrate-boxtextclassrate-label播放速度/textbuttonclassrate-btn {{playbackRate 0.5 ? active : }}bind:tapsetSlow慢速/buttonbuttonclassrate-btn {{playbackRate 1 ? active : }}bind:tapsetNormal正常/buttonbuttonclassrate-btn {{playbackRate 2 ? active : }}bind:tapsetFast快速/button/view/view代码解析image组件的src属性通过数据绑定{{imgSrc}}指定图片路径。bind:tapsing实现了事件绑定点击图片后调用sing()函数。播放状态通过{{isPlaying ? 播放中 : 已暂停}}三元表达式显示。三个按钮分别绑定setSlow、setNormal、setFast函数控制播放速度通过class动态绑定高亮当前选中的速度。3.2 index.jsPage({data:{imgSrc:https://636c-cloud1-d6gbuj3063c9c4451-1508092649.tcb.qcloud.la/yanan.webp?sign9e0e80b8cb5c775acee21e0d2a551edct1792120820,isPlaying:false,playbackRate:1},onLoad(){this.audioCtxwx.createInnerAudioContext();this.audioCtx.srchttps://636c-cloud1-d6gbuj3063c9c4451-1508092649.tcb.qcloud.la/%E6%A1%88%E4%BE%8B2.2%E5%9B%BE%E7%89%87%E4%B8%8E%E5%A3%B0%E9%9F%B3/%E6%A1%88%E4%BE%8B2.2%20%E5%9B%BE%E7%89%87%E4%B8%8E%E5%A3%B0%E9%9F%B3/%E9%9F%B3%E9%A2%91%E8%B5%84%E6%BA%90/huiyanan.mp3?signe978d73e729c4e17d8ab218f042922a3t1792120798;this.audioCtx.playbackRate1;this.audioCtx.onPlay((){console.log(开始播放 - 当前位置this.audioCtx.currentTime播放速率this.audioCtx.playbackRate);});this.audioCtx.onPause((){console.log(暂停播放 - 当前位置this.audioCtx.currentTime播放速率this.audioCtx.playbackRate);});},sing(){if(this.data.isPlaying){this.audioCtx.pause();this.setData({isPlaying:false});}else{this.audioCtx.play();this.setData({isPlaying:true});}},setSlow(){this.audioCtx.playbackRate0.5;this.setData({playbackRate:0.5});},setNormal(){this.audioCtx.playbackRate1;this.setData({playbackRate:1});},setFast(){this.audioCtx.playbackRate2;this.setData({playbackRate:2});},onUnload(){if(this.audioCtx){this.audioCtx.destroy();}}});代码解析onLoad是页面生命周期函数页面加载时触发只调用一次。在此函数中通过wx.createInnerAudioContext()创建音频上下文实例。audioCtx.src设置音频文件的云存储下载链接支持网络https地址。audioCtx.playbackRate设置播放速率1为正常速度0.5为慢速2为快速。onPlay和onPause是音频事件的监听回调在播放和暂停时通过console.log打印当前播放位置currentTime和播放速率playbackRate。sing()函数通过判断isPlaying状态实现播放和暂停的交替。onUnload中调用destroy()销毁音频实例避免内存泄漏。3.3 index.wxss.container{display:flex;flex-direction:column;align-items:center;padding:40rpx;}.my-image{width:600rpx;height:400rpx;border-radius:20rpx;box-shadow:0 4rpx 20rpxrgba(0,0,0,0.15);}.status{margin-top:30rpx;font-size:30rpx;color:#333;}.rate-box{margin-top:40rpx;display:flex;flex-direction:row;align-items:center;}.rate-label{font-size:28rpx;color:#666;margin-right:10rpx;}.rate-btn{font-size:26rpx;padding:10rpx 30rpx;margin:0 10rpx;background-color:#f0f0f0;color:#333;border-radius:10rpx;line-height:1.5;}.rate-btn.active{background-color:#07c160;color:#fff;}四、功能扩展说明4.1 播放速度控制通过InnerAudioContext的playbackRate属性实现按钮playbackRate值效果慢速0.5半速播放正常1正常速度快速2两倍速播放点击不同按钮时设置audioCtx.playbackRate的值即可实时改变播放速度。4.2 控制台打印播放位置和速率在onPlay和onPause回调中读取this.audioCtx.currentTime当前播放位置单位秒和this.audioCtx.playbackRate播放速率通过console.log打印到控制台。控制台输出示例开始播放 - 当前位置0播放速率1 暂停播放 - 当前位置3.5播放速率1 开始播放 - 当前位置3.5播放速率2五、关键技术点总结image组件通过src属性指定图片路径支持数据绑定可以直接使用网络图片地址。事件绑定bind:tap绑定点击事件点击后调用对应的处理函数。云开发云存储静态资源图片、音频上传到云存储后通过下载链接引用无需打包进小程序本地目录节省小程序包体积。使用前需在app.js中调用wx.cloud.init()初始化云环境。InnerAudioContext微信小程序提供的音频上下文API用于创建和控制音频播放src支持本地路径和网络https地址。playbackRate属性控制音频播放速率支持0.5慢速、1正常、2快速等值。currentTime属性获取当前音频的播放位置秒。onLoad生命周期页面加载时触发适合做初始化工作。onPlay/onPause事件监听音频播放和暂停事件可以在回调中获取音频状态信息。

相关新闻

SSM+JSP酒店客房预定系统:从架构到并发控制的毕业设计实战

SSM+JSP酒店客房预定系统:从架构到并发控制的毕业设计实战

简介:这套Java毕业设计资源围绕酒店客房预定管理系统展开,基于SSM框架与JSP技术,适合计算机相关专业本科生或专科生完成毕业设计、课程设计时参考,也可作为Java Web开发入门者的练习项目。系统按管理员和用户两类角色划分&#xf…

2026/10/18 22:31:42 阅读更多 →
Python OPC UA客户端实战:asyncua协议栈搭建与工业现场避坑指南

Python OPC UA客户端实战:asyncua协议栈搭建与工业现场避坑指南

简介:本资源是基于C#实现的OPC UA客户端完整工程示例,面向工业自动化领域开发者、工控系统集成工程师及物联网协议学习者,解决OPC UA客户端开发入门难、安全连接配置复杂、服务调用逻辑不清晰等实际问题。压缩包共172个文件,含58个…

2026/10/18 22:31:42 阅读更多 →
Claude Code配置实战:从基础环境到MCP与工作流设计

Claude Code配置实战:从基础环境到MCP与工作流设计

1. 装好 Claude Code 之前,先把这几件基础配置搞清楚我大概是今年年初开始重度使用 Claude Code 的。在这之前,我经历了很长一段“AI 辅助编程焦虑期”——ChatGPT 写代码要自己复制粘贴、改一个小需求来回传好几轮,Cline 之类的插件在 IDE 里…

2026/10/18 22:31:42 阅读更多 →

最新新闻

PlantUML驱动的可执行架构图设计方法论

PlantUML驱动的可执行架构图设计方法论

1. 项目概述:这不是画图,是构建可执行的逻辑骨架“diagram-design”这个词组乍一看像美术课作业,但在我过去十年带过的几十个跨领域项目里,它从来不是PPT里的装饰性插图,而是系统落地前最关键的“可执行蓝图”。我见过…

2026/10/19 0:26:02 阅读更多 →
扩展有限元XFEM从原理到C++实现:裂缝模拟与渗透率联动实战

扩展有限元XFEM从原理到C++实现:裂缝模拟与渗透率联动实战

干数值模拟这行当,最让人头秃的往往不是力学推导本身,而是建模那一关。常规有限元里,裂缝面必须跟单元边界重合,网格拓扑得迁就裂缝几何。遇到一条弯弯曲曲的裂缝倒还好,顶多多切几刀;可真到了多裂缝交叉、…

2026/10/19 0:26:02 阅读更多 →
Agent Skills深度架构解析与实战:从MCP到TaoToken的智能体能力编排

Agent Skills深度架构解析与实战:从MCP到TaoToken的智能体能力编排

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:25:02 阅读更多 →
如何将 PostgreSQL MCP 服务器与 Cursor 或 Claude 结合使用:TaoToken 统一 Key 接入实战

如何将 PostgreSQL MCP 服务器与 Cursor 或 Claude 结合使用:TaoToken 统一 Key 接入实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:25:02 阅读更多 →
那张被审稿人点赞的图是怎么做出来的?科迅捷AI(官方网站:www.kexunjie.com)有答案

那张被审稿人点赞的图是怎么做出来的?科迅捷AI(官方网站:www.kexunjie.com)有答案

想象这样一个场景:你的博士论文投稿三个月,审稿意见回来了,其中一条写着这张图设计得尤其清晰、信息量大。这是审稿人少见的正面评价,在满是修改意见的意见单里格外显眼。那张被点赞的图,到底是怎么做出来的&#xff1…

2026/10/19 0:25:02 阅读更多 →
论文里的数据分析别硬编,科迅捷AI(官方网站:www.kexunjie.com)把方法讲明白

论文里的数据分析别硬编,科迅捷AI(官方网站:www.kexunjie.com)把方法讲明白

本科论文里最常见的硬伤之一,是数据分析部分。数据是编的、图表是凑的、结论是事先想好再回头找数的。每年答辩季,老师都能听到几个自相矛盾的回答,问题几乎都出在数据不是自己做的。这一段对比一下硬编数据和认真做分析两种路径的差别&#…

2026/10/19 0:25:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →