# Stilllight · original soundtrack

Composed and rendered specifically for Stilllight by Codex using the source score in `Tools/compose_soundtrack.py`. No commercial recordings, sample packs, existing melodies or third-party audio are used. All instruments are synthesised from oscillators, filtered noise, amplitude envelopes and circular reverberation.

## Music

| File | Role | Length |
|---|---|---:|
| title-a-place-to-begin.wav | A Place to Begin · title theme | 80 seconds |
| gameplay-foundation.wav | Company in the Quiet · foundation | 160 seconds |
| gameplay-company.wav | Companion melodic layer after first constellation | 160 seconds |
| gameplay-remembering.wav | High, sparse layer after Reflection | 160 seconds |

48 BPM, E major / C-sharp minor colours, eight slow chord fields, soft felt-like melodic attacks and spacious tails. The gameplay stems share exactly the same frame count and start from one AVAudioPlayer device clock. They are mixed with two-second volume ramps as the world develops. All music loops use circular rendering, including effect tails, to avoid hard truncation at the boundary.

The app ships 32 kHz stereo PCM16 WAV files, directly usable in AVFoundation. Browser/listening previews in Release/Audio are AAC derivatives, not the looping masters. The complete listening mix combines all three gameplay layers without adding a fourth app track.

## Effects

`touch.wav`, `companion.wav`, `connection.wav`, `reflection.wav`, `renewal.wav` and `drift.wav` use the same tonal palette. Touch is quiet and brief in its attack, with a soft tail. No alarms or repetitive notification chimes. Effects have a separate saved volume control; a bounded player pool prevents rapid input from accumulating unlimited voices.

## Objective checks

AUDIO_MANIFEST.json records duration, peak, RMS and loop-boundary discontinuity for every master. Music loop boundary difference is zero. The complete three-layer mix peaks at approximately -11.62 dBFS with RMS -25.70 dBFS, leaving headroom for effects. No master contains clipped or non-finite samples. App-host tests load all ten WAV assets and verify all gameplay durations match 160 seconds.

Playback uses the ambient audio category, respects the silent switch and mixes with other audio. Backgrounding pauses music and stops effects. Interruption notifications honour the should-resume flag. Headphone disconnection pauses audio until the player changes a sound preference or returns to the app. Sound preferences persist with the save.

Automated audio lifecycle checks exercise the actual audio players and notification paths. Simulator evidence does not replace listening on physical iPhone speakers and headphones, hardware silent-switch checks or a real incoming-call interruption. Those release checks remain explicitly listed in VERIFICATION.md until evidenced.

## Re-render

Use Python 3 with NumPy: `python3 Tools/compose_soundtrack.py`. The generator writes the finished WAV assets and their manifest. It is deterministic; retain the source score with the project. Music and effects are original to this game, and playable assets are included rather than a request to source music later.
