I’ve been working on the development of a new game (working title is 50 Things). In our latest development update for 50 Things, we’ve pivoted our audio architecture toward a more dynamic, generative approach. Instead of static, looping background tracks, we’ve implemented a Camelot-based Music System that creates a unique soundscape every time you play.
The Camelot Wheel is a tool used by DJs to mix tracks harmonically. Every musical key is assigned a number and a letter (e.g., 8A for A minor, 9A for E minor). By matching these numbers, you ensure that multiple audio stems will always sound harmonious when played together.
In our game, we use this to drive a “Generative” engine.

Standard game music can become repetitive. By breaking a song down into four distinct “stems,” we can mix and match variations in real-time:
By having, for example, 3 different pad variations and 5 different lead variations for a single key, the game can generate 15 different versions of the same song!
We built this system using Godot Mono (C#) with a focus on performance and flexibility.
We moved away from embedding metadata in WAV files. Instead, we use a single track_catalog.json. This file acts as the “brain” of the system, telling the game which files belong to which Camelot key and stem type.
{
"tracks": [
{
"FileName": "abyss_2A.ogg",
"TrackName": "Abyssal Pad",
"CamelotNumber": "2A",
"StemType": 0
}
]
}
The MusicManager is a global autoload that handles the heavy lifting. It parses the JSON, caches the audio files to prevent frame-stutter, and—most importantly—triggers all four stems at the exact same micro-second to ensure perfect synchronization.
We also added support for multiple formats like OGG Vorbis, which drastically reduces our memory footprint (from 30MB WAVs down to 3MB OGGs!) while maintaining high quality and gapless loops.
To bring the music into the world, we created a GenerativeMusicTrigger scene. It’s a simple collision area that developers can drop anywhere in a level. When the player walks into the trigger, it tells the MusicManager to “Play 2A,” and the engine instantly builds a harmonious mix from the available catalog.
This pivot to a JSON-driven Camelot system gives us:
Stay tuned for more updates as we continue to expand the soundscape of 50 Things!