always response 中文
本文件为 Claude Code (claude.ai/code) 在此代码库中工作提供指导。
TTMusic 是基于 OpenHarmony ArkTS 开发的功能丰富的音乐播放器应用,支持本地和网络音频播放,集成了 ijkplayer 进行媒体处理。
# 安装依赖
ohpm install
# 更新特定依赖
ohpm update @ohos/ijkplayer
当前项目没有正式的单元测试。测试通过手动设备测试和 DevEco Studio 的内置调试工具进行。
TTMusic/
├── entry/ # 主应用模块
│ ├── src/main/ets/
│ │ ├── pages/ # 应用页面 (SplashIndex, MainIndex 等)
│ │ ├── view/ # 可复用UI组件 (LocalMusic, TitleBar 等)
│ │ ├── viewmodel/ # 数据模型和业务逻辑
│ │ ├── common/ # 工具类、常量和共享代码
│ │ ├── controller/ # 控制层 (AvSessionController, KnockController)
│ │ └── dialog/ # 对话框组件
├── ijkplayer/ # 基于 FFmpeg 的媒体播放器原生模块
├── lib/ # 共享库 (歌词解析等)
└── hvigor/ # 构建配置
核心播放器架构:
LocalMusic.ets - 主音乐播放器界面和播放控制IjkMediaPlayer - 使用 FFmpeg 的原生媒体播放器后端AvSessionController.ets - 用于系统集成的音频会话管理PlayerModel.ets - 可观察的播放器状态模型导航和UI:
MainIndex.ets - 主标签导航 (当前已禁用标签,简化版)SplashIndex.ets - 应用初始化和加载页面PlaylistDetailPage.ets - 播放列表管理和详情视图数据管理:
MediaTable.ets & PlaylistTable.ets - 媒体和播放列表的数据库操作ConfigManager.ets - 基于API的远程配置系统GlobalContext.ets - 应用级状态管理使用关系数据库 (RDB) 用于:
通过 ConfigManager.ets 进行远程配置管理:
https://pay.ss5.xyz/switches/lists 获取设置for (const [key, value] of Object.entries(obj))obj[key] = value 而不是 {[key]: value}catch (e: Error) 而不是 catch (e).then()/.catch() 而不是 async/await@State 用于组件本地状态@StorageProp/@StorageLink 用于 AppStorage 集成@Observed 类用于复杂数据模型GlobalContext 单例进行全局状态管理// 标准播放器初始化模式
const player = IjkMediaPlayer.getInstance();
player.setDataSource(audioUrl);
player.prepareAsync();
player.setOnCompletionListener(this.handleCompletion.bind(this));
多个内置主题 (默认、暮色、森林、珊瑚、极夜) 支持:
$r('app.color.brand'))pages/ 目录中的页面使用 @Entry 装饰器view/ 目录中的可复用组件viewmodel/ 中的业务逻辑,使用适当的模型类common/util/ 中按功能组织的工具类MediaTable)queryByParentPath)DB_COLUMNS.FILE_PATH)_camelCase 前缀CommonConstants.REAL_MUSIC_FORMAT 数组AppTheme.ets 中添加颜色定义onCreate 回调中添加版本升级逻辑dialog/ 目录中创建,遵循现有模式@pura/harmony-dialog 保持样式一致性@ohos/ijkplayer - 媒体播放引擎 (基于FFmpeg)@pura/harmony-utils - 工具函数和助手@pura/harmony-dialog - 对话框管理系统@seagazer/cclyric - 歌词解析和显示@chinalike/popup - 弹窗和模态框组件Logger.info()、Logger.error() 记录日志audioPlayback 后台模式启用后台音频播放