Bläddra i källkod

添加入口注释

chendeben 1 år sedan
förälder
incheckning
84c32381ec
3 ändrade filer med 109 tillägg och 26 borttagningar
  1. 67 12
      README.md
  2. 29 1
      entry/src/main/ets/entryability/EntryAbility.ets
  3. 13 13
      oh_modules/.ohpm/lock.json5

+ 67 - 12
README.md

@@ -1,16 +1,71 @@
-# TTMusic 鸿蒙音乐播放器
+# 天天静听音乐播放器
 
-TTMusic 是基于 OpenHarmony(鸿蒙)平台开发的本地音乐播放器,支持本地音频文件的管理、播放、歌单、收藏、歌词显示、封面管理、批量操作等丰富功能。
+TTMusic 是基于 OpenHarmony(鸿蒙)平台开发的高性能音乐播放器,支持本地和网络音频播放,集成了强大的音视频处理能力和VIP服务系统。
+
+## 核心功能
+
+### 播放能力
+- 音频格式:MP3、AAC、FLAC、APE、WAV等
+- 视频格式:H.264、MPEG4、VP8/VP9等
+- 流媒体协议:HLS、RTMP、HTTP/HTTPS等
+- 特色功能:变速不变调、高清音质、多音轨切换
+
+### 媒体管理
+- 智能歌单管理(收藏夹、最近播放等)
+- 批量文件操作(导入/导出、重命名、删除)
+- 艺术家、专辑分类浏览
+- 歌词同步显示与自定义导入
+
+### 增值服务
+- VIP会员系统
+- 高品质音源下载
+- 无广告播放体验
+
+## 技术架构
+```mermaid
+graph TD
+    A[UI界面] --> B[业务逻辑]
+    B --> C[ijkplayer核心]
+    C --> D[FFmpeg解码]
+    C --> E[SoundTouch处理]
+    B --> F[网络模块]
+    B --> G[用户系统]
+    B --> H[广告SDK]
+```
+## 主要API简要
+播放器核心接口基于 IjkMediaPlayer,支持如下常用方法:
+- `setDataSource(url: string)` 设置音频源
+- `prepareAsync()` 异步准备播放
+- `start()` 开始播放
+- `pause()` 暂停播放
+- `stop()` 停止播放
+- `seekTo(msec: number)` 跳转到指定位置
+- `setSpeed(speed: string)` 设置播放速度
+- `setLoopCount(looping: boolean)` 设置循环播放
+- `setVolume(left: string, right: string)` 设置音量
+- `setOnCompletionListener(listener)` 播放完成回调
+- `setOnErrorListener(listener)` 错误回调
+- 详见 `entry/src/main/ets/view/LocalMusic.ets` 及相关 ViewModel
+
+## 目录结构
+```text
+|-- entry
+|   |-- src/main/ets
+|   |   |-- view/           # 主要UI与音乐播放逻辑
+|   |   |-- viewmodel/      # 数据模型与业务逻辑
+|   |   |-- common/         # 常量、工具类
+|   |   |-- controller/     # 控制器
+|   |   |-- resources/      # 资源文件
+|   |-- oh_modules/         # 三方依赖
+|-- ijkplayer/              # 播放器内核及native模块
+|-- lib/                    # 公共库
+|-- doc/                    # 相关文档
+|-- README.md
+|-- README_zh.md
+```
 
-## 主要功能
-- 支持多种音频格式的本地播放
-- 歌单管理、收藏夹、最近播放
-- 歌词同步显示与导入
-- 音乐封面自动提取与自定义
-- 批量导入、剪切、复制、删除、重命名
-- 艺术家、专辑、媒体库分组浏览
-- 支持倍速播放、音频焦点、循环播放等
-- 适配多种鸿蒙设备,支持平板、折叠屏等
 
 ## 开源协议
-本项目基于 [Apache 2.0 License](LICENSE) 开源,欢迎自由使用和参与贡献。
+本项目基于 [Apache 2.0 License](LICENSE) 开源,欢迎自由使用和参与贡献。
+
+> 注:本项目集成了部分第三方SDK,商业使用时请遵守相关协议

+ 29 - 1
entry/src/main/ets/entryability/EntryAbility.ets

@@ -1,5 +1,13 @@
 
 
+/**
+ * 应用主Ability入口文件
+ * 功能:
+ * 1. 管理应用生命周期
+ * 2. 处理窗口创建和尺寸变化
+ * 3. 响应外部调用请求
+ * 4. 全局状态管理
+ */
 import UIAbility from '@ohos.app.ability.UIAbility';
 import hilog from '@ohos.hilog';
 import window from '@ohos.window';
@@ -11,15 +19,35 @@ import { DemoConstants } from './DemoConstants';
 import { Utility } from '../common/util/Utility';
 import { SpiderMan } from '@simplepeng/spider-man';
 
+/**
+ * 主Ability类,继承自UIAbility
+ * 负责:
+ * - 应用初始化
+ * - 窗口管理
+ * - 事件分发
+ */
 export default class EntryAbility extends UIAbility {
-    //一多断点开发
+    // UI上下文对象,用于获取窗口信息
     private uiContext?: UIContext;
+
+    /**
+     * 窗口尺寸变化回调函数
+     * @param windowSize 新的窗口尺寸对象
+     * 功能:
+     * 1. 获取最新的窗口断点尺寸
+     * 2. 更新AppStorage中的尺寸状态
+     * 3. 记录尺寸变化日志
+     */
     private onWindowSizeChange: (windowSize: window.Size) => void = (windowSize: window.Size) => {
+        // 获取宽度断点并更新全局状态
         let widthBp: WidthBreakpoint = this.uiContext!.getWindowWidthBreakpoint();
         AppStorage.setOrCreate('currentWidthBreakpoint', widthBp);
+
+        // 获取高度断点并更新全局状态
         let heightBp: HeightBreakpoint = this.uiContext!.getWindowHeightBreakpoint();
         AppStorage.setOrCreate('currentHeightBreakpoint', heightBp);
 
+        // 记录尺寸变化日志
         LogUtil.info('pura onWindowSizeChange currentHeightBreakpoint= '+heightBp);
         LogUtil.info( 'pura onWindowSizeChange currentWidthBreakpoint= '+widthBp);
     };

+ 13 - 13
oh_modules/.ohpm/lock.json5

@@ -43,10 +43,6 @@
           "specifier": "file:lib",
           "version": "file:lib"
         },
-        "@changwei/chardet": {
-          "specifier": "^1.0.0",
-          "version": "1.0.0"
-        },
         "@cashier_alipay/cashiersdk": {
           "specifier": "^15.8.32",
           "version": "15.8.32"
@@ -62,6 +58,10 @@
         "@keke/color-picker": {
           "specifier": "^1.0.4",
           "version": "1.0.4"
+        },
+        "@changwei/chardet": {
+          "specifier": "^1.0.0",
+          "version": "1.0.0"
         }
       },
       "devDependencies": {
@@ -214,15 +214,6 @@
       "dynamic": false,
       "maskedByOverrideDependencyMap": false
     },
-    "@changwei/chardet@1.0.0": {
-      "integrity": "sha512-rLvLtFDQnYlgEaKL7PAKtaaYompnIQ1esK8c3wHpQYKKMdKqCIpwUwn9XmdACMQE7KoehJogpDzG/G4tBPykqA==",
-      "storePath": "oh_modules/.ohpm/@changwei+chardet@1.0.0",
-      "dependencies": {},
-      "dynamicDependencies": {},
-      "dev": false,
-      "dynamic": false,
-      "maskedByOverrideDependencyMap": false
-    },
     "@cashier_alipay/cashiersdk@15.8.32": {
       "integrity": "sha512-04tCRKK6XW4pcilD2z+hcHRsBArvY/71SPEnwmxpTcmiHKkW9ggPTbHFLKsKALlWXG8u8tOXJic2D2qzdKm74g==",
       "storePath": "oh_modules/.ohpm/@cashier_alipay+cashiersdk@15.8.32",
@@ -309,6 +300,15 @@
       "dynamic": false,
       "maskedByOverrideDependencyMap": false
     },
+    "@changwei/chardet@1.0.0": {
+      "integrity": "sha512-rLvLtFDQnYlgEaKL7PAKtaaYompnIQ1esK8c3wHpQYKKMdKqCIpwUwn9XmdACMQE7KoehJogpDzG/G4tBPykqA==",
+      "storePath": "oh_modules/.ohpm/@changwei+chardet@1.0.0",
+      "dependencies": {},
+      "dynamicDependencies": {},
+      "dev": false,
+      "dynamic": false,
+      "maskedByOverrideDependencyMap": false
+    },
     "@ohos/hypium@1.0.19": {
       "integrity": "sha512-cEjDgLFCm3cWZDeRXk7agBUkPqjWxUo6AQeiu0gEkb3J8ESqlduQLSIXeo3cCsm8U/asL7iKjF85ZyOuufAGSQ==",
       "storePath": "oh_modules/.ohpm/@ohos+hypium@1.0.19",