CLAUDE.md 2.5 KB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

模块概述

sound 模块是 WenextAndroid 框架中的音效与提示音管理模块,提供统一的音频播放管理功能。

核心架构

三层播放器架构

模块采用适配器模式,内部集成三种播放器实现:

  1. MediaSdkPlayer (mediasdk/) - 媒体 SDK 播放器,支持高质量音频播放
  2. SoundPoolPlayer (soundpool/) - Android SoundPool 播放器,适合短音效
  3. SystemMediaPlayer (systemmedia/) - Android MediaPlayer 播放器,适合长音乐

核心组件关系

ISoundPlayer (接口)
    ↓
SoundPlayer (主实现类)
    ├── MediaSdkPlayer
    ├── SoundPoolPlayer  
    └── SystemMediaPlayer

播放器选择策略

  • SOUND 类型: 优先使用 SoundPool,适合短音效
  • MUSIC 类型: 优先使用 SystemMedia,适合长音乐
  • MediaSdk 模式: 当 config.isUseMediaSdk() 为 true 时,统一使用 MediaSdk

关键数据结构

音频类型定义

  • SoundType: SOUND (短音效) / MUSIC (长音效)
  • PlayerType: MEDIA_SDK / SOUND_POOL / SYSTEM_MEDIA
  • SoundPriority: LOW / NORMAL / HIGH
  • PlayStatus: STOP / PAUSE / RESUME / PLAY

核心配置接口

ISoundPlayerConfig 提供:

  • mediaSdkSoundEffect: MediaSDK 音效接口
  • audioZipFileName: 音频压缩包文件名
  • audioPath: 音频文件路径
  • isUseMediaSdk(): 是否使用 MediaSDK
  • isInForeGround(): 前台状态检查

文件加载机制

音频文件支持两种加载方式:

  1. Assets 资源加载: load(fileName, soundType) - 从 assets 目录加载
  2. 文件路径加载: loadPath(filePath, soundType) - 从指定文件路径加载

音频文件会通过 copyVersionZipFromAssetsToFile 从 assets 中的压缩包解压到本地存储。

背景播放支持

提供前台/后台播放控制:

  • play() 系列方法: 仅在前台播放
  • playCanInBg() 系列方法: 支持后台播放

模块依赖

该模块依赖以下 frame 模块:

  • frame:log - 日志记录
  • frame:util - 工具类
  • frame:storage - 存储管理
  • frame:coroutine - 协程支持

使用模式

遵循框架标准的接口-工厂-初始化模式:

// 1. 创建配置实现
class MyConfig : ISoundPlayerConfig { ... }

// 2. 创建播放器实例  
val soundPlayer = createSoundPlayer(config)

// 3. 准备和播放
soundPlayer.prepare()
soundPlayer.play("sound.mp3", SoundType.SOUND)