Tracked Songs
Instead of prerecorded, offline-sequenced music files, the game uses a tracked music system that:
- Uses smaller
.oggloop files. - Allows dynamic, indefinitely playing, track-based songs.
- Allows scripts to mute or unmute tracks in response to level or player events.
- Works with the time-of-day cycle.
Diez edits these song metadata files:

Tracked songs are stored in the Music/ folder. Each song has a .fezsong.json file and a same-named folder alongside it containing the song's .ogg loop files:
├── Zuins
│ ├── Zuins_01.ogg
│ ├── Zuins_02.ogg
│ ├── Zuins_03.ogg
│ └── Zuins_04.ogg
└── Zuins.fezsong.json
Layout
The editor is split into three sections:
- Tracked Song Properties: Global song settings, shard notes, assemble chord, and ordering.
- Overlay Loops: The list of loops used by the song.
- Selected Loop Properties: Timing and playback settings for the selected loop.
Song Properties
The left section edits global song data.
- Song Name: Unique song name.
- Tempo: Tempo used for bar-based loop timing.
- Time Signature /4: Number of beats per bar.
- Assemble Chord: Golden or Anti cube collect chord used by this song.
- Note #1-#8: Cube shards pickup notes.
- Preview the Assemble Chord: Plays the selected assemble chord.
- Random One-At-a-Time Ordering: Enables random ordering for one-at-a-time loops.
- Custom Ordering: Custom loop ordering data.
You can preview an assemble chord by clicking the Play button. Diez loads the corresponding sound from the Sounds/Collects/SplitUpCube/ folder.
Overlay Loops
The middle section lists the song's overlay loops.
The toolbar has the following buttons, from left to right:
- Down / Up: Reorders the selected loop.
- Add: Chooses a loop file from the current song folder.
- Remove: Deletes the selected loop from the metadata.
To edit a loop's properties, double-click it in the list.
Loop names use the tracked song naming convention:
SongName ^ LoopName
For example:
CMYKave ^ rhythm
Loop Properties
The right section edits the selected loop properties.
- Filename: Referenced loop name.
- Trigger From / Trigger To: Range of bars to wait before triggering the loop again.
- Fractional Time: Allows non-integer trigger timing within the trigger range.
- Loop Times From / Loop Times To: Range for how many times the loop repeats.
- Duration: Loop length in bars.
- Delay: Bars to wait before the first trigger.
- One-at-a-time: Marks the loop for one-at-a-time playback behavior.
- Cut off tail: Cuts the loop tail when stopping.
- Day / Night / Dawn / Dusk: Time-of-day filters for when the loop can play.
Most loop timing is bar-based, so changes depend on the song tempo and time signature.
Example Song
The following example shows the metadata for Disasterpeace's Puzzle, also known as the puzzle-solving music. Its tracked song is named Cycle and uses the following global settings:
| Property | Value |
|---|---|
| Tempo | 140 BPM |
| Time Signature | 4/4 |
| Assemble Chord | E major |
| Shard Notes | D2, E2, A2, B2, D3, E3, A3, B3 |
| Random One-At-a-Time Ordering | Disabled |
| Custom Ordering | None |
The following table summarizes the timing pattern used by the recurring parts. Individual loops may use different values:
| Track | Initial Delay | Duration | Interplay Delay |
|---|---|---|---|
| Main Arp | None | 8 bars | [0, 16] bars |
| Counter Arp | 4 bars | 8 bars | [0, 16] bars |
| Ostinato | 8 bars | 4 bars | [0, 16] bars |
| Bass | 8 bars | 4 bars | [0, 24] bars |
| Antecedent | 16 bars | 3 bars | [0, 16] bars |
| Triplets | 16 bars | 9 bars | [0, 16] bars |
| Consequent | 20 bars | 3 bars | [0, 16] bars |
The arrangement changes with the time of day:
| Time of Day | Loop Family | Active Loops |
|---|---|---|
| Day | Locrian | 7 |
| Dawn | Dorian | 7 |
| Dusk | Aeolian | 6 |
| Night | Aeolian | 3 |
Most loops play once per trigger. The bass loops may repeat once or twice and use a trigger range of 0 to 24 bars. The nighttime-only loop uses a trigger range of 0 to 8 bars, while most other loops use a range of 0 to 16 bars. All Cycle loops disable fractional timing, one-at-a-time playback, and tail cutoff.
The Cycle.fezsong.json song uses the following loops:
├── Cycle
│ ├── Aeolian_Antecedent_3Bars
│ ├── Aeolian_Bass_4Bars
│ ├── Aeolian_Consequent_3Bars
│ ├── Aeolian_CounterArp_8Bars
│ ├── Aeolian_MainArp_8Bars
│ ├── Aeolian_Nighttime_13Bars
│ ├── Aeolian_Triplets_9Bars
│ ├── Dorian_Antecedent_3bars
│ ├── Dorian_Bass_4bars
│ ├── Dorian_Consequent_3bars
│ ├── Dorian_CounterArp_8bars
│ ├── Dorian_MainArp_8bars
│ ├── Dorian_Ostinato_2bars
│ ├── Dorian_Triplets_9bars
│ ├── Locrian_Antecedent_3bars
│ ├── Locrian_Bass_4bars
│ ├── Locrian_Consequent_3bars
│ ├── Locrian_CounterArp_8bars
│ ├── Locrian_MainArp_8bars
│ ├── Locrian_Ostinato_4bars
│ └── Locrian_Triplets_9bars
Here is the song during daytime:
Here is the song during nighttime:
The nighttime arrangement is less dense and has a distinctly different sound.
Reference
A more detailed description of the properties is available in the FEZSONG format reference.
For information about the song scripting API with Sound static entity, see the Scripting Reference.