# AudioPlaybackKit A Swift package for audio playback functionality, specifically designed for white noise and ambient sound applications. ## Features - **Audio Playback**: High-quality audio playback with background support - **Sound Management**: Load and manage audio files from bundles - **Wake Lock**: Prevent device from sleeping during audio playback - **Interruption Handling**: Automatic handling of audio interruptions (calls, etc.) - **Configuration**: JSON-based sound configuration system - **Preview Support**: Built-in audio preview functionality ## Requirements - iOS 16.0+ / macOS 13.0+ - Swift 5.9+ ## Installation ### Swift Package Manager Add the following to your `Package.swift` file: ```swift dependencies: [ .package(url: "https://github.com/yourusername/AudioPlaybackKit.git", from: "1.0.0") ] ``` Or add it through Xcode: 1. File → Add Package Dependencies 2. Enter the repository URL 3. Select the version and add to your target ## Usage ### Basic Audio Playback ```swift import AudioPlaybackKit // Get the shared player instance let player = NoisePlayer.shared // Create a sound let sound = Sound( name: "White Noise", fileName: "white-noise.mp3", category: "ambient", description: "Classic white noise" ) // Play the sound player.playSound(sound) // Stop the sound player.stopSound() ``` ### Using the ViewModel ```swift import AudioPlaybackKit // Create a view model let viewModel = NoiseViewModel() // Get available sounds let sounds = viewModel.availableSounds // Play a sound viewModel.playSound(sounds.first!) // Preview a sound (3 seconds) viewModel.previewSound(sounds.first!) // Stop playback viewModel.stopSound() ``` ### Sound Configuration Create a `sounds.json` file in your app bundle: ```json { "sounds": [ { "id": "white-noise", "name": "White Noise", "fileName": "white-noise.mp3", "category": "ambient", "description": "Classic white noise for focus and relaxation", "bundleName": "Ambient" } ], "categories": [ { "id": "ambient", "name": "Ambient", "description": "General ambient sounds", "bundleName": "Ambient" } ], "settings": { "defaultVolume": 0.8, "defaultLoopCount": -1, "preloadSounds": true, "preloadStrategy": "category", "audioSessionCategory": "playback", "audioSessionMode": "default", "audioSessionOptions": ["mixWithOthers"] } } ``` ### Wake Lock Service ```swift import AudioPlaybackKit let wakeLock = WakeLockService.shared // Enable wake lock (prevents device from sleeping) wakeLock.enableWakeLock() // Disable wake lock wakeLock.disableWakeLock() // Check if active if wakeLock.isActive { print("Wake lock is active") } ``` ## Architecture ### Core Components - **NoisePlayer**: Main audio playback service - **SoundConfigurationService**: Manages sound configuration and loading - **WakeLockService**: Prevents device from sleeping during playback - **NoiseViewModel**: SwiftUI-friendly view model for audio playback ### Models - **Sound**: Represents an audio file with metadata - **SoundConfiguration**: JSON configuration structure - **AudioSettings**: Audio session and playback settings ## License This package is available under the MIT license. See the LICENSE file for more info. ## Contributing Contributions are welcome! Please feel free to submit a Pull Request.