This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
frame/audio 是音频框架模块,提供音频播放、录制和系统音频捕获功能。该模块基于 Android MediaPlayer 和 MediaRecorder,并支持 Android Q+ 的系统音频捕获。
InnerMediaPlayer.kt: 基于状态机的音频播放器封装AbstractInnerRecorder.kt: 录音器抽象接口InnerMediaRecorder.kt: MediaRecorder 实现,支持 AAC 编码SystemAudioCaptureHelper.kt: 系统音频捕获主控制器mediaprojection/: MediaProjection 权限管理和服务// 透明 Activity 方式请求权限
MediaProjectionRequireActivity.kt
// 前台服务保持 MediaProjection
MediaProjectionRequireService.kt
// 权限管理核心逻辑
MediaProjectionHelper.kt
所有音频组件都基于严格的状态机:
compileOnly project(":frame:log") // 日志框架
compileOnly project(":frame:coroutine") // 协程支持
compileOnly project(":frame:util") // 工具类
RECORD_AUDIO: 音频录制FOREGROUND_SERVICE: MediaProjection 服务MEDIA_PROJECTION: 系统音频捕获 (仅 Android Q+)val player = InnerMediaPlayer().apply {
setAudioFilePath("/path/to/audio.mp3")
onPlaybackStarted = { /* 播放开始 */ }
onPlaybackCompleted = { /* 播放完成 */ }
}
player.startPlayback()
val recorder = InnerMediaRecorder().apply {
setOutputFilePath("/path/to/output.aac")
setMaxDuration(60000) // 60秒
onRecordingStarted = { /* 开始录制 */ }
}
recorder.startRecording()
SystemAudioCaptureHelper
.setSampleRate(44100)
.setSystemAudioListener(object : SystemAudioListener {
override fun feedBufferAudioFrame(frame: ByteArray, timeStamp: Long) {
// 处理音频数据帧
}
})
.updateCaptureState(true) // 开始捕获
releasePlayer() 或 releaseRecorder()当前版本:6.0.0 (com.wenext.android:frame-audio)