LANGUAGE REFERENCE · v1

MusicScript

A domain-specific language for music production. Write beats, melodies, vocals, and full arrangements in plain text — then run them in the studio.

Files use the .gms extension. Runs in the browser and desktop app.

QUICK START

A beat in under 20 lines

// MusicScript — GoMeow Studio
// Drop into code and make it bang

project "My Beat" {
  bpm:   140
  key:   Dm
  time:  4/4
  swing: 0.1
}

beat main {
  kick:  [X . . . X . . . X . . . X . . .]
  snare: [. . X . . . X . . . X . . . X .]
  hihat: [X 7 X 7 X 7 X 7 X 7 X 7 X 7 X 7]
  808:   [D1:8 . . . F1:4 . . A1:2 . . . . . . . .]
}

melody hook {
  instrument: juno106
  notes: [D4:2 . F4:2 A4:4 G4:2 . F4:2 D4:8]
  fx: [reverb(0.35) delay(1/8, 0.5)]
  velocity: 0.75
}

section verse {
  bars: 8
  play: [main hook]
}

structure [
  verse x4
]
REFERENCE

Language constructs

Project

projectproject "Title" { bpm key time swing bars }

Global settings for the composition.

example
project "Brooklyn Nights" {
  bpm:   140
  key:   Dm
  time:  4/4
  swing: 0.12
}

Beat

beatbeat name { track: [steps] }

16-step sequencer. X = hit, . = rest, 0-9 = velocity, Note:len = pitched hit.

example
beat main {
  kick:  [X . . . X . . . X . . . X . . .]
  snare: [. . X . . . X . . . X . . . X .]
  hihat: [X 7 X 7 X 7 X 7 X 7 X 7 X 7 X 7]
  808:   [D1:8 . . F1:4 . . A1:2 . . . . . . . .]
}

Melody

melodymelody name { instrument notes fx velocity }

Note/chord sequence. Notes use Note+Octave:Length format.

example
melody hook {
  instrument: juno106
  notes: [D4:2 . F4:2 A4:4 G4:2 D4:8]
  fx: [reverb(0.4) delay(1/8, 0.5)]
  velocity: 0.8
}
chordschords: [Root Quality:len]

Chord progression. Quality: m m7 maj7 7 dim aug sus2 sus4

example
chords: [Dm:4 Am:4 Gm:4 Bb:4]

Vocal

vocalvocal name { text voice pitch timing fx }

Synthesized vocal line via ElevenLabs.

example
vocal hook_vox {
  text:  "from Marcy to the world"
  voice: hip_hop_male
  pitch: -2
  fx: [reverb(0.3) autotune(Dm)]
}

Sample

samplesample name { file pitch volume loop chop }

Load an audio file. chop slices it into segments (0.0–1.0).

example
sample stab {
  file:  "~/samples/horn.wav"
  pitch: +2
  chop:  [0:0.5, 0.5:1.0]
}

Section

sectionsection name { bars bpm play fx automate }

A named time block. bpm can be absolute (140) or relative (+5, -10).

example
section chorus {
  bars: 8
  bpm:  +5
  play: [main hook hook_vox]
  fx:   [reverb(0.5)]
}

Structure

structurestructure [ section xN ... ]

Song arrangement. Each item is a section name with optional repeat count.

example
structure [
  intro   x1
  verse   x2
  chorus  x2
  bridge  x1
  chorus  x4
]

Effects

reverbreverb(wet)

Room reverb.

example
reverb(0.4)
delaydelay(time, feedback)

Feedback delay.

example
delay(1/8, 0.5)
filterfilter(type, freq)

lpf | hpf | bandpass.

example
filter(lpf, 2000)
compresscompress(ratio:1, threshold)

Dynamics compression.

example
compress(4:1, -18db)
eqeq(low: Ndb, mid: Ndb, high: Ndb)

3-band EQ.

example
eq(low: +3db, mid: -2db)
distortdistort(amount)

Waveshaper distortion.

example
distort(0.4)
autotuneautotune(key)

Pitch correction.

example
autotune(Dm)
lofilofi()

BitCrusher + warmth.

example
lofi()

Mix

mixmix { channel: level(Ndb) pan(N) }

Final mix levels. master: accepts lufs(-14) and limiter(-0.3db).

example
mix {
  main.kick:  level(-4db)
  hook:       level(-10db) pan(-0.2)
  master: lufs(-14) limiter(-0.3db)
}

Instruments

instrumentsinstrument: name

Available presets for melody/theme blocks.

example
juno106  tb303  jupiter8  sh101  dx7
piano  pad  organ  bass  synth  lead

Ready to write some heat?

Open the studio and drop into the MusicScript editor. Your browser is the runtime.

Open Studio