微信小程序实现音乐播放器(2)

2023-11-01

前情提要

BackgroundAudioManager

BackgroundAudioManager,是全局唯一的背景音频管理器。小程序切入后台,如果音频处于播放状态,可以继续播放。但是后台状态不能通过调用API操纵音频的播放状态。
从微信客户端6.7.2版本开始,如果需要小程序切后台后继续播放音频,需要在全局配置文件 app.json 中配置 requiredBackgroundModes 属性,如:"requiredBackgroundModes": ["audio"]

BackgroundAudioManager实例,可以通过 wx.getBackgroundAudioManager() 获取。BackgroundAudioManager实例具有如下属性和方法:

  1. title,音频标题,必填
  2. src,音频的数据源,默认值是空字符串,非必填。但是,只有设置了src时,音频才会自动播放
  3. play(),播放音乐。
  4. pause(),暂停音乐。
  5. onPlay(function callback),监听背景音频播放事件。
  6. onPause(function callback),监听背景音频暂停事件。
  7. onStop(function callback),监听背景音频停止事件。
  8. onEnded(function callback),监听背景音频自然播放结束事件。

API:wx.setNavigationBarTitle()

wx.setNavigationBarTitle(Object object),用来动态设置当前页面导航栏的标题。该API接收一个对象作为参数,该对象包含如下属性:

  • title,标题文本,必填。
  • success,接口调用成功后的回调
  • fail,接口调用失败后的回调。
  • complete,接口调用完成(不论成功or失败)后的回调。

搭建静态资源服务器

  1. 全局安装serve:npm install -g serve
  2. 在任何你想的地方新建文件夹:resources。resources下新建文件夹:images,用于存放静态图片资源;resources下新建文件夹:videos,用于存放视频文件;resources下新建文件夹:audios,用于存放音频文件。
  3. 启动服务器:serve resources

小程序项目

代码涉及的主要文件有:

  1. app.json
  2. app.wxss
  3. pages/music/music.json
  4. pages/music/music.wxml
  5. pages/music/music.wxss
  6. pages/music/music.js

在这里插入图片描述

app.json

{
  "pages": [
    "pages/music/music",
    "pages/index/index"
  ],
  "window": {
    "navigationBarBackgroundColor": "#0149af",
    "navigationBarTitleText": "首页",
    "navigationBarTextStyle": "white"
  },
  "requiredBackgroundModes": ["audio"],
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

app.wxss

page{
  height: 100%;
}

pages/music/music.json

{
  "usingComponents": {},
  "navigationBarBackgroundColor": "#2f434e",
  "navigationBarTitleText": "我的音乐"
}

pages/music/music.wxml

<view class="music-container">
  <view class="music-name">{{music.name}}</view>
  <view class="music-author">{{music.author}}</view>
  <image class="arm {{isPlay&&'arm-reset'}}" src="/static/images/arm.png"></image>
  <view class="disc-container {{isPlay&&'disc-animate'}}">
    <image class="disc" src="/static/images/disc.png"></image>
    <image class="music-image" src="{{music.picUrl}}"></image>
  </view>
  <view class="player">
    <view class="btns">
      <image class="loop-btn" src="/static/images/loop.png"></image>
      <image class="prev-btn" src="/static/images/prev.png"></image>
      <image class="play-btn" src="{{isPlay?'/static/images/stop.png':'/static/images/play.png'}}" bindtap="handlePlay"></image>
      <image class="next-btn" src="/static/images/next.png"></image>
      <image class="list-btn" src="/static/images/list.png"></image>
    </view>
  </view>
</view>

pages/music/music.wxss

.music-container{
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  background: #2f434e;
  position: relative;
}
.music-container .music-name{
  margin: 10rpx 0;
  color: #fff;
  font-size: 36rpx;
}
.music-container .music-author{
  color: #bbb;
  font-size: 28rpx;
  margin: 6rpx 0;
}
.music-container .arm{
  width:204rpx;
  height: 358rpx;
  position: relative;
  left: 72rpx;
  z-index: 99;
  transform: rotate(-15deg);
  transform-origin: 30rpx 30rpx;
  transition: transform .7s linear;
}
.disc-container{
  position: relative;
  top: -128rpx;
  width: 490rpx;
  height: 490rpx;
}
.disc-container .disc{
  width: 100%;
  height: 100%;
}
.disc-container .music-image{
  width: 270rpx;
  height: 270rpx;
  border-radius: 100%;
  position: absolute;
  left: 0;right: 0;top: 0;bottom: 0;
  margin: auto;
}
.music-container .arm-reset{
  transform: rotate(0deg);
}
.disc-animate{
  animation: rotate 2.5s 1s linear infinite;
}
@keyframes rotate{
  from{
    transform: rotate(0deg);
  }
  to{
    transform: rotate(360deg);
  }
}
.player{
  width: 100%;
  position: absolute;
  bottom: 60rpx;
}
.btns{
  display: flex;
  align-items: center;
  justify-content: space-evenly;
}
.btns image{
  width: 36rpx;
  height: 36rpx;
}
.btns .play-btn,.btns .stop-btn{
  width: 90rpx;
  height: 90rpx;
}

pages/music/music.js

Page({
  data:{
    isPlay:false,
    music:{}
  },
  onLoad(){
    this.getDataFromServer();
    this.bam = wx.getBackgroundAudioManager();
    this.bam.onPlay(() => {
      this.setData({isPlay:true})
    })
    this.bam.onPause(() => {
      this.setData({isPlay:false})
    })
    this.bam.onStop(() => {
      this.setData({isPlay:false})
    })
  },
  handlePlay(){
    const isPlay = !this.data.isPlay;
    this.setData({isPlay});
    this.musicControl();
  },
  getDataFromServer(){
    const result = {
      "name":"滂沱大雨里",
      "author":"李若溪",
      "picUrl":"https://p1.music.126.net/0fDn168ubsIt7tG54Twaxw==/18813743464883299.jpg",
      "url":"http://localhost:3000/audios/pangtuodayuli.mp3"
    }
    this.setData({music:result})
  },
  musicControl(){
    const {isPlay} = this.data;
    if(isPlay){
      this.bam.src = this.data.music.url;
      this.bam.title = this.data.music.name;
    }else{
      this.bam.pause();
    }
  }
})

相关链接

微信小程序实现音乐播放器(1)
BackgroundAudioManager实现背景音乐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序实现音乐播放器(2) 的相关文章

  • 基类(父类)private 定义的变量,子类可以使用吗

    基类 父类 private 定义的变量 子类是可以使用的 private变量是传给子类了的但是不可以直接使用 需要我们去用基类里面的函数去初始化或修改继承给子类的private变量 就这样就可以调用private变量了
  • 【camera】【ISP】Lens Shading Correction镜头阴影校正

    ISP LSC 镜头阴影校正 参考 https zhuanlan zhihu com p 389334269 https blog csdn net xiaoyouck article details 77206505 https www
  • MariaDB在Linux环境下的安装及使用

    本操作适合Debain ubuntu和deepin等 此处安装的环境为deepin V23 一 查看是否已安装MariaDB mysql V 二 安装命令 sudo apt get install mariadb server 三 修改配置
  • 第一课:LabView2015中文版安装教程

    1 下载解压缩 双击文件 2015LV WinChn exe 将 点击unzip解压 解压路径为默认为 C National Instruments Downloads LabVIEW Chinese 2015 2 软件成功解压后 自动弹出
  • 了解开发手机的各项参数之显示屏

    现在android手机越来越便宜了 所以开发的话用的最多的还是真机 作为一个程序员 如果拿着手机却在百度找手机的参数 这可不太好 所以 让我们从程序员的角度来了解一下手机显示屏的参数 public class MainActivity ex
  • 云服务器物理机配置,物理机服务器怎么配置

    物理机服务器怎么配置 内容精选 换一换 对于不同的硬件设备 通过在BIOS中设置一些高级选项 可以有效提升服务器性能 服务器上的SMMU一般用来完成设备的地址转换 并且可以实现设备隔离 在虚拟化中很实用 但是在物理机测试场景下 SMMU可能
  • 关于部署vue项目在Linux上的两种方式tomcat以及nignx(3)使用nignx进行部署

    阿丹有话说 前两篇文章主要讲解了将vue中tomcat部署研究了 解决了在后台代码中通过过滤器来解决跨域问题 后期会继续出在tomcat中的代理配置等 本篇文章来将vue项目部署在nignx上 并且通过反向代理来解决跨域请求以及请求转发 使
  • Qt自绘圆盘图控件

    本人使用QPainter自绘了一个圆盘图 下面这张图片为效果图 图片中的所有 圆 刻度线 字体 均为自绘 没有使用图片 使用方法 在Ui中拖拽一个widget控件 然后右键点击该widget控件 选择提升 话不多说 直接上代码 头文件qdi
  • 数字图像处理-基于Matlab水果识别系统(图片识别)

    文件大小 25M 代码行数 315行 主程序 开发环境 Matlab2016a 下载地址 该源码均通过亲自测试可正常运行 简要概述 图像识别主要是研究用计算机代替人去处理大量的物理信息 从而帮助人们建华劳动 机械分类耗时段的特点很符合水果的
  • 【译】用 Rust 实现 csv 解析-part1

    Rust and CSV parsing 译文 用 Rust 实现 csv 解析 part1 原文链接 https blog burntsushi net csv 原文作者 BurntSushi 译文来自 https github com
  • OSPF实验及配置---超详细

    什么是OSPF 开放式最短路径优先OSPF Open Shortest Path First 是IETF组织开发的一个基于链路状态的内部网关协议 Interior Gateway Protocol 目前针对IPv4协议使用的是OSPF Ve
  • 【改进算法】混合鲸鱼WOA和BAT算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文献 1 概述 文献来源 鲸鱼优化算法 whale op
  • 接口测试开发之:Python3,订单并发性能实战

    小屌丝 鱼哥 我想写一个接口订单并发性能 能不能给我讲一下 小鱼 接口订单并发 我前篇文章不是写过常见并发框架 然后你在追加一个创建订单和生成订单不就可以了 小屌丝 鱼哥 你说的可轻松 那你能不能来一个 小鱼 好吧 那我就以我某个项目为例
  • open cvBrisk特征检测与匹配

    什么是BRISK算法 BRISK算法是2011年ICCV上 BRISK Binary Robust Invariant Scalable Keypoints 文章中 提出来的一种特征提取算法 也是一种二进制的特征描述算子 它具有较好的旋转不
  • CentOS 7下安装pptp服务

    一 检查是否支持PPTP 1 在安装之前查看系统是否支持PPTP modprobe ppp compress 18 echo success 应该输出 success 2 是否开启TUN TAP cat dev net tun 应该输出 c
  • Js中读取、移除属性及隐藏组件方法研究

    添加 移除组件属性方法 class名 attr 属性名 属性值 设置指定属性 class名 attr 属性名 读取指定属性值 or document getElementById id值 getAttribute 属性名 class名 re
  • 迪杰斯特拉算法+链式前向星+堆优化

    目录 一 基础 二 使用链式前向星 每次遍历的第一次优化 前向星 链式前向星 1 结构 2 存储边 3 遍历 第一次优化代码 三 堆优化 主要思想 数据类型 四 完整代码 一 基础 直接用邻接矩阵 每次遍历查找来进行操作 void dijk

随机推荐

  • Exchange Online Kiosk产品详细介绍

    目录 前言 电子邮件功能 日历和会议功能 联系人和任务管理功能 移动设备支持
  • pythonz字符串去重并排序

    项目场景 python练习题 问题描述 输入一个非空字符串 去除重复的字符后 从小到大排序输出为一个新字符串 原因分析 去重可以运用python中set数据类型的特性 然后将去重的set转为列表 再调用sort 函数进行排序即可 解决方案
  • 二维已经 OUT 了?3DPose 实现三维人体姿态识别真香

    作者 李秋键 出品 AI科技大本营 ID rgznai100 引言 人体姿态估计是计算机视觉领域很多研究工作的基础 也是研究的热点问题 在行为识别 人机交互 姿态跟踪等领域有着广泛的应用前景 按照人体姿态维度的差异 可以将人体姿态估计任务分
  • Windows FFmpeg 多张图片合并视频

    执行指令 ffmpeg f image2 i images d jpg vcodec libx264 r 25 b 200k test mp4 图片资源截图 重点 图片资源名称的命名规则
  • JDK8 新特性-----对象::new

    public class demo public static void main String args 第一种方式 ICar iCar1 new ICar Override public Car getCar String name I
  • pycharm 安装第三方库方法

    pycharm 使用anaconda库并添加其他库 andconda 中可以添加多个虚拟环境 在安装路径下envs 文件下可以查看 安装的第三方库在D Anaconda3 Lib site packages 文件夹下 在运行程序时 在缺少安
  • 【C#学习笔记】读access2007

    using System using System Data OleDb namespace ConsoleApplication class Program static void Main string args string strC
  • A1103 Integer Factorization (30 分)(将N表示为K个整数的P次方的和)(DFS)(难)

    The K P factorization of a positive integer N is to write N as the sum of the P th power of K positive integers You are
  • STM32——DAC数模转换实验

    一 数模转换原理 STM32的DAC模块是十二位数字输入 电压输出型的DAC DAC可以配置为8位或12位模式 也可以与DMA控制器配合使用 DAC工作在12位模式时 数据可以设置成左对齐或者右对齐 DAC模块有2个输出通道 每个通道都有单
  • backgroundImage加载图片报403解决方法

    加载图片时报403错误 可能是链接防盗链导致 解决方法 在html中加入
  • join方法介绍

    首先给出结论 t join 方法只会使调用该方法的线程进入t对象的等待池 并等待t线程执行完毕后才会被唤醒 并不影响同一时刻处在运行状态的其他线程 一 使用方式 join是Thread类的一个方法 启动线程后直接调用 例如 Thread t
  • 数组的遍历方式(齐全)

    数组 遍历数组 Array 案例 arr1 1 2 3 arr2 3 4 5 arr3 arr1 arr2 log arr3 0 2 输出为 arr1 的 3 一 数组的概念 之前 变量只能存一个值 如果我们想存多个值呢 这就涉及到数组了
  • [翻译&摘抄] ES6 中的元编程:代理(Proxies)

    前面几篇博客已经写过了有关 Symbols 和 Reflect 相关的知识 首先来重复看一下 元编程是什么 元编程 笼统地说 是所有关于一门语言的底层机制 而不是数据建模或者业务逻辑那些高级抽象 如果程序可以被描述为 制作程序 元编程就能被
  • linux中r加载程序包_如何找出Linux中应用程序的确切软件包名称

    linux中r加载程序包 The Ubuntu Software Center allows you to easily add and remove programs in Ubuntu However each Linux distri
  • Linux服务器遭受黑客攻击时的日志分析排除

    0x00 前言 Linux系统拥有非常灵活和强大的日志功能 可以保存几乎所有的操作记录 并可以从中检索出我们需要的信息 本文简介一下Linux系统日志及日志分析技巧 0x01 日志简介 日志默认存放位置 var log 查看日志配置情况 m
  • Leedcode刷题技巧及方法总结(学习笔记,建议收藏,持续更新)

    1 int mid left right left 2 leedcode 278 有效防止mid溢出 2 想要更改链表链接顺序 可以考虑使用guard拆解链接 leecode 138 3 对于数组下标循环 右循环 cur size size
  • 强制Unity编译 Recompile

    I have a script that adds to ProjectFilesGenerator ProjectFileGeneration so it adds to the Assemblies every time they ar
  • conda 切换为国内源

    添加清华源 conda config add channels https mirrors tuna tsinghua edu cn anaconda pkgs free conda config add channels https mi
  • 延长OLED透明屏的使用寿命:关键因素与有效方法分享

    OLED透明屏作为一项创新的显示技术 具备透明度和高清晰度的特点 在各个领域得到了广泛应用 然而 为了确保OLED透明屏的持久性和稳定性 延长其使用寿命是至关重要的 根据最新的研究和数据报告 在这篇文章中 尼伽将深入探讨延长OLED透明屏使
  • 微信小程序实现音乐播放器(2)

    文章目录 前情提要 BackgroundAudioManager API wx setNavigationBarTitle 搭建静态资源服务器 小程序项目 app json app wxss pages music music json p