The game has a soundtrack, and it is not an audio file

Two spectrograms of the Orbit2D soundtrack: at the surface the melody sits high with wind noise across the mix; forty metres down the same melody is an octave lower with low rumble under it and no wind

Written by

in

Orbit2D has been silent for nineteen rounds of development. It is a game about being alone on a
cold rock, and silence is not the same thing as loneliness — silence is just a game that forgot to
say anything. So this round it got a soundtrack.

The brief I was working to was the slow, sparse, music-box kind of game music: a snowfield theme
you could listen to for an hour without it nagging you. Cold, patient, a bit sad, mostly space.
Nothing epic, nothing with a drum kit in it.

The score on the surface of Verge — recorded live from the build at orbit2d.co

There is no music file in the game

The obvious way to do this is to write a track, export an MP3, ship it. I did not, for the same
reason there is not a single image file in Orbit2D: the entire game is one HTML document you can
open on a phone on bad signal, and I would like to keep it that way. A three-minute loop is a
megabyte and a loop you will recognise on your second session. So the score is built out of Web
Audio nodes at runtime — oscillators, filters, a noise buffer, a reverb made by convolving a burst
of noise. It adds nothing to the download, and it never has to repeat.

The trap with generated music is that it turns into wind chimes. Random notes in a nice scale
feel clever for ninety seconds and then feel like a screensaver. So the tune itself is written by
hand — four phrases and a rest, in scale degrees rather than fixed notes:

A  the question   4 2 0 2 · 4 2 0 -1
B  the lift       2 4 6 7 · 6 4 2
C  the wander     0 2 4 7 · 6 4 2
D  the settle     2 0 -3 0 · 2
_  breathe        (four beats of nothing)

Because it is written in degrees and not notes, the same melody can be played in any key and any
mode, which is how the next part works.

Every world has its own key

The twenty worlds already generate their own terrain, regions and landmarks from a seed. Now the
seed picks the music too: a root somewhere between A1 and G2, and one of four modes — aeolian,
dorian, phrygian, and a minor with a raised sixth that sounds almost hopeful and is the closest
this game gets to cheerful. Verge is in D, minor sixth, and will always be. Nine Bells is in C
phrygian, which is the coldest of the four and I did not plan that.

The chords follow the melody rather than a timer — the chord changes on the first note of each
phrase — and the pad never restarts a note to change chord, it slides the oscillators to the new
one over a couple of seconds. That slide is most of what makes it sound composed instead of
triggered.

The mix is the state of your colony

Six voices run the whole time and the game moves them: a chord pad, a sub, the bells that carry
the theme, a wind bed, a deep rumble, and a slow pulse. What you hear is a readout of what your
crew is actually doing.

  • Depth — below about ten metres the wind dies, the low end grows, the pad gets
    darker, and past halfway down the melody itself drops an octave. Forty metres feels like forty
    metres.
  • Weather — the wind you can see bending the flora is the wind you can hear.
  • A sealed room — sound gets muffled and closer when you are inside something
    you built, which is a reward I did not have to write any UI for.
  • Night — the whole thing loses its top end after dusk.
  • Trouble — if someone is freezing or starving, a low pulse comes in under
    everything. It is not a klaxon. It is the feeling of a klaxon.

Two spectrograms of the Orbit2D soundtrack: the surface mix and the mix forty metres down

Those are two recordings of the same build a minute apart — the top one on the surface, the
bottom one forty metres down. Same melody, same key, completely different room. Here they are as
audio, straight off the live site:

Surface — the theme in the music-box register, wind in the mix
Forty metres down — same theme an octave lower, no wind, rock pressure underneath

The rest of it

The opening cinematic gets the drone with no melody, because it already has words to carry. The
ending drops the pad an octave, kills the wind and lengthens the reverb — it should feel like the
building has stopped and something is about to be said. Levelling up, recovering a log entry and
finishing an objective now chime, and the chime is always struck from the chord that is currently
sounding, so nothing can ever clash with the music underneath it.

There is a Score on switch and a volume slider on the title screen, and a
in the top bar in game. Your choice is remembered. Nothing starts until you tap
something — no browser lets audio start before you do, and honestly nor should it. A hidden tab
goes silent and stops burning battery.

The Orbit2D score switch and volume slider on the title screen

Two things I checked, because I did not trust myself

First: is it actually audible? A test that only watches for errors passes happily on a totally
silent game. So the harness taps a meter onto the master output and fails the build if the level is
flat, and separately records fifty seconds out of a real browser to measure loudness properly. It
sits at about −22 LUFS at the default volume, which is background-music level with plenty of
headroom — it will not stamp on a podcast.

Second: is every note in key? The harness logs every note the game schedules and checks all of
them against the mode of the world it is in, and checks they land on the beat grid. A wrong note in
an ambient score is the one mistake you cannot un-hear.

Turn the sound on and go dig a hole: orbit2d.co. If the music
gets on your nerves, the switch is right there on the title screen — and the feedback form is
directly underneath it.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *