# audioPlayer_音乐播放器鸿蒙
**Repository Path**: she-haotian/audioPlayer
## Basic Information
- **Project Name**: audioPlayer_音乐播放器鸿蒙
- **Description**: 简易鸿蒙音乐播放器
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-01-07
- **Last Updated**: 2025-01-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 音乐播放器(audio Player)
## 功能介绍
一款鸿蒙版简易的音频播放器,用户可以通过该播放器播放自己本地音乐
## 需求拆分
- 支持本地音乐的播放。
- 提供播放、暂停、上一首、下一首等基本播放控制
- 支持播放模式切换(单曲循环、列表循环、随机播放)。
- 支持进度条控制音乐进度
## 模块设计
- 启动模块: 初始化音频管理
-
- 音乐列表模块: 展示音乐列表,点击后可以播放
-
- 音乐播放模块: 对音频进行管理,上一首,下一首,播放,暂停,进度控制
-
## 运行逻辑
1. 用户启动音频播放器
2. 进入到启动页,初始化AVplayerManage类,并把实例传入AppStore, 能够全局获取到AVplayerManage实例
3.
4. 在播放页获取AVplayerManage实例通过UI控件控制AVplayerManage实例进行管理播放,暂停,上一首,下一首等等
## 工程文件结构

## 实现思路
1、准备好音频文件,以及封面

2、准备好音频类型,以及数据

3、进行音频管理类编写
属性

状态回调整体封装,更改播放源之后可以进行播放

在构造函数里面初始化

设置播放源函数

监听playId,每次playId被改变后触发更改播放源进行播放,并且编写一个监听方法传入一个回调方法,在playId后触发,主要是实现在类里面操作的时候能够影响外面的状态变量


实现上一首下一首播放,主要是对id进行操作,后续会考虑对音频数组的下标进行操作获取id,毕竟音频id不可能是连号的。开始没考虑这一点。实现播放暂停

实现进度条,进度监听,进度条最大值监听。进度条点击设置进度,进度条拖动设置进度,进度条返回的是毫秒数还需要格式化成xx:xx格式


播放模式设置




## 接口设计
AVPlayerManage类进行汇总说明
属性说明
| 属性 | 类型 | 释义 | 默认值 |
| :-----------: | :-------------------------------------: | :------------------------------------: | :--------------------: |
| avPlayer | media.AVPlayer \| undefined = undefined | AVPlayer音频播放实例 | - |
| playId | number | 音乐id,更改后会触发播放源进行播放 | 0 |
| musicPlayMode | MusicPlayMode | 播放模式:列表循环、随机播放、单曲循环 | MusicPlayMode.ListLoop |
| musicListData | MusicItem[] | 音乐列表,用于后续创建歌单 | - |
方法说明
| 方法名 | 参数 | 必填 | **说明** |
| :------------------------------------: | :----------------------------------: | :----------------------: | :--------------------------------------------------------: |
| initAVPlayer() | 无 | 否,创建实例时自动触发 | 初始化AVPlayerManage |
| setAVPlayerCallback() | avPlayer: media.AVPlayer | 否,创建实例时自动触发 | 设置avplayer各种状态回调,创建实例自动触发 |
| avPlayerFdSrcDemo() | playId: number | 否,设置playId后自动触发 | 用于设置播放源,后自动播放 |
| previousMusic() | 无 | 否 | 用于切换上一首音乐 |
| nextMusic() | 无 | 否 | 用于切换下一首音乐 |
| musicPlay() | 无 | 否 | 用于暂停后播放音乐 |
| musicPause() | 无 | 否 | 用于播放后暂停音乐 |
| sliderMax() | callback(duration: number): Function | 否 | 在设置播放源之后触发,回调里参数是进度条最大值,返回毫秒数 |
| sliderValue() | callback(time:number): Function | 否 | 播放后100毫米触发一次,用于更新进度条当前值,返回毫秒数 |
| offSliderValue() | 无 | 否 | 取消监听进度条当前值 |
| sliderSet() | sliderValue: number | 是 | 设置当前进度,传入毫秒数 |
| formatMillisecondsToMinutes(): string | milliseconds: number | 是 | 传入毫秒数返回分钟字符串xx:xx格式 |
| randomNumber(): number | 无 | 否 | 生成一个1-x并不包含y的整数,y在1-x之间 |