Skip to main content

f8-features-audio-workflow

Use when implementing or troubleshooting Audio feature workflows — BGM, voice, SFX, 3D audio, volume control, and AudioMixer in F8Framework.

Jump to install

Source facts

Repository
TippingGame/F8Framework
Last source activity
May 16, 2026 at 17:35
Detected SKILL.md language
English
Stars
884
Forks
141

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
f8-features-audio-workflow
description
Use when implementing or troubleshooting Audio feature workflows — BGM, voice, SFX, 3D audio, volume control, and AudioMixer in F8Framework.
# Audio Feature Workflow > **⚠️ IMPORTANT**: Before using this feature, you **MUST** formally initialize F8Framework in the launch sequence. Ensure `ModuleCenter.Initialize(this);` has run first, then create the required module, for example `FF8.Audio = ModuleCenter.CreateModule<AudioManager>();`. ## Use this skill when - The task is about sound playback, volume, or audio management. - The user asks about BGM, voice, SFX, or 3D audio effects. - The user needs global pause/resume or audio switch persistence. ## Path resolution 1. Prefer project source at Assets/F8Framework. 2. If F8Framework is installed as a package, use Packages/F8Framework. 3. For usage docs, read: Assets/F8Framework/Tests/Audio/README.md ## Sources of truth - Runtime module: Assets/F8Framework/Runtime/Audio - Test docs: Assets/F8Framework/Tests/Audio ## Key classes and interfaces | Class | Role | |-------|------| | `AudioManager` | Core module. Access via `FF8.Audio`. | | `AudioMusic` | Background music player. | | `AudioVoice` | Voice/dialogue player. | | `AudioEffect` | SFX and UI sound player. | ## API quick reference ### Background music ```csharp FF8.Audio.PlayMusic("assetName", callback, loop: true, priority: 1, fadeDuration: 3f); float progress = FF8.Audio.ProgressMusic; FF8.Audio.SetProgressMusic = 0.5f; FF8.Audio.VolumeMusic = 0.5f; // Auto-saves to PlayerPrefs FF8.Audio.SwitchMusic = false; // Auto-saves to PlayerPrefs FF8.Audio.SetMusicComplete(callback); ``` ### Voice ```csharp FF8.Audio.PlayVoice("assetName", callback, loop: true, priority: 1, fadeDuration: 3f); float progressVoice = FF8.Audio.ProgressVoice; FF8.Audio.SetProgressVoice = 0.5f; FF8.Audio.VolumeVoice = 0.5f; FF8.Audio.SwitchVoice = false; FF8.Audio.SetVoiceComplete(callback); ``` ### Sound effects ```csharp FF8.Audio.PlayUISound("assetName", callback, loop: true, priority: 1, fadeDuration: 3f); FF8.Audio.PlayBtnClick("assetName", callback); FF8.Audio.PlayAudioEffect("assetName", callback); FF8.Audio.VolumeAudioEffect = 0.5f; FF8.Audio.SwitchAudioEffect = false; FF8.Audio.SetUISoundComplete(callback); FF8.Audio.SetBtnClickComplete(callback); FF8.Audio.SetAudioEffectComplete(callback); ``` ### One-shot 2D audio effects ```csharp FF8.Audio.PlayAudioEffect2D("assetName", volume: 1f, maxNum: 5, callback); ``` ### 3D audio effects ```csharp FF8.Audio.PlayAudioEffect3D("assetName", isRandom: true, transform.position, volume: 1f, spatialBlend: 1f, maxNum: 5, callback); ``` ### Global control ```csharp FF8.Audio.PauseAll(); // Pause all, including one-shot AudioEffect instances FF8.Audio.ResumeAll(); // Resume all, including one-shot AudioEffect instances FF8.Audio.StopAll(); // Stop all, including one-shot AudioEffect instances FF8.Audio.UnloadAll(true); // Unload all audio (true = force including in-use) ``` ### Optional AudioMixer ```csharp FF8.Audio.SetAudioMixer(FF8.Asset.Load<AudioMixer>("F8AudioMixer")); ``` ### Individual channel control ```csharp FF8.Audio.AudioMusic.Pause(); FF8.Audio.AudioMusicVoice.Resume(); FF8.Audio.AudioMusicBtnClick.Stop(); FF8.Audio.AudioMusicUISound.UnloadAll(); ``` ## Workflow 1. Load audio clips via AssetManager (place in AssetBundles or Resources). 2. Choose category: Music (BGM), Voice, AudioEffect (SFX/UI), or one-shot 2D/3D AudioEffect. 3. Use priority parameter for Music/Voice to handle overlapping tracks. 4. Volume and switch settings auto-persist to PlayerPrefs. 5. Use fadeDuration for smooth transitions between tracks. 6. For 3D effects, set `spatialBlend: 1f` and provide world position. 7. Optionally set up F8AudioMixer for advanced mixing control. ## Common error handling | Error | Cause | Solution | |-------|-------|----------| | Audio clip not found | Asset not in loadable directory | Ensure clip is under AssetBundles or Resources, press F8 | | No sound on mobile | Volume or switch set to off | Check `SwitchMusic`/`SwitchAudioEffect` values | | Memory leak from audio | Not unloading unused clips | Call `UnloadAll()` when transitioning scenes | | One-shot SFX stops too early | Timer using scaled time or clip load failed | Use current `AudioEffect` implementation; it tracks one-shot instances with unscaled clip duration | ## Cross-module dependencies - **AssetManager**: All audio clips loaded via `FF8.Asset`. - **Storage**: Volume/switch settings internally stored via PlayerPrefs. ## Output checklist - Audio category selected (Music/Voice/AudioEffect/one-shot AudioEffect). - Volume persistence configured. - Files changed and why. - Validation status and remaining risks.
View on GitHub