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 humanize bars }

Global timing and metadata. humanize is a deterministic maximum timing offset in seconds (0–0.05).

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

Beat

beatbeat name { track: [steps] }

One-bar grid divided evenly by its step count. 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 chords arp fx velocity }

Notes use Pitch:Length:Velocity:Expression; expressions include accent, ghost, staccato, legato, tie, slide, cresc, and decresc.

example
melody hook {
  instrument: juno106
  notes: [D4:2:0.7:accent F4:2:1:slide A4:4:0.8:legato]
  arp: up rate: 1/16
  fx: [reverb(wet: 0.4) delay(time: 0.25, feedback: 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 asset pitch timing fx }

Portable rendered vocal audio. text and voice are host generation hooks; native rendering consumes asset.

example
vocal hook_vox {
  text:  "from Marcy to the world"
  voice: hip_hop_male
  asset: "vocals/hook.wav"
  pitch: -2
  timing: bar(1)
  fx: [reverb(wet: 0.3)]
}

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
]

LFO

lfolfo { target shape rate depth }

A free-running low-frequency oscillator that modulates a channel param around its mixed value. target is dotted: chan.volume, chan.pan, or chan.fxType.param. shape: sine | triangle | square | sawtooth. rate is a Tone time (4n) or Hz.

example
lfo {
  target: lead.filter.frequency
  shape:  sine
  rate:   4n
  depth:  600
}

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) send(bus, Ndb) }

Stereo channel and bus mix. Define buses as bus.name; master accepts lufs(-14) and limiter(-0.3db).

example
mix {
  bus.room:   level(-3db) pan(0.2)
  main.kick:  level(-4db) pan(-0.4) send(room, -12db)
  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