# Audio Playback Feature - E2E Documentation ## Overview The Tour Builder Platform implements a comprehensive audio playback system supporting background audio on pages, element-triggered audio effects (hover/click sounds), and media player elements. Key features: - **User Interaction Unlock**: All audio waits for first user click/tap before playing (consistent across all browsers) - **Sound Effects Layering**: Hover/click effects play over background audio (no interruption) - **Media Player Ducking**: AudioPlayer and VideoPlayer elements pause background audio when playing - **Constructor Modes**: Edit mode silences audio; Interact mode enables full audio playback --- ## Architecture ``` ┌─────────────────────────────────────────────────────────────────┐ │ Audio Types │ │ Background Audio │ Element Audio Effects │ │ (page-level) │ (hover/click sounds) │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ Playback Hooks │ │ useBackgroundAudioPlayback │ useAudioEffects │ useAudioEventMgr│ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ Controller Layer │ │ backgroundAudioController (singleton for audio ducking) │ └─────────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────────┐ │ Rendering │ │ CanvasBackground │ UiElements (hover/click audio) │ └─────────────────────────────────────────────────────────────────┘ ``` --- ## Audio Types ### 1. Background Audio Page-level ambient audio that plays behind all content with configurable playback settings. ```tsx // Using useBackgroundAudioPlayback hook for controlled playback const { audioRef } = useBackgroundAudioPlayback({ audioUrl: page.background_audio_url, autoplay: page.background_audio_autoplay ?? true, loop: page.background_audio_loop ?? true, startTime: page.background_audio_start_time ?? null, endTime: page.background_audio_end_time ?? null, });