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.
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
]
Language constructs
Project
Global timing and metadata. humanize is a deterministic maximum timing offset in seconds (0–0.05).
project "Brooklyn Nights" {
bpm: 140
key: Dm
time: 4/4
swing: 0.12
humanize: 0.006
}Beat
One-bar grid divided evenly by its step count. X = hit, . = rest, 0-9 = velocity, Note:len = pitched hit.
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
Notes use Pitch:Length:Velocity:Expression; expressions include accent, ghost, staccato, legato, tie, slide, cresc, and decresc.
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
}Chord progression. Quality: m m7 maj7 7 dim aug sus2 sus4
chords: [Dm:4 Am:4 Gm:4 Bb:4]Vocal
Portable rendered vocal audio. text and voice are host generation hooks; native rendering consumes asset.
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
Load an audio file. chop slices it into segments (0.0–1.0).
sample stab {
file: "~/samples/horn.wav"
pitch: +2
chop: [0:0.5, 0.5:1.0]
}Section
A named time block. bpm can be absolute (140) or relative (+5, -10).
section chorus {
bars: 8
bpm: +5
play: [main hook hook_vox]
fx: [reverb(0.5)]
}Structure
Song arrangement. Each item is a section name with optional repeat count.
structure [
intro x1
verse x2
chorus x2
bridge x1
chorus x4
]LFO
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.
lfo {
target: lead.filter.frequency
shape: sine
rate: 4n
depth: 600
}Effects
Room reverb.
reverb(0.4)Feedback delay.
delay(1/8, 0.5)lpf | hpf | bandpass.
filter(lpf, 2000)Dynamics compression.
compress(4:1, -18db)3-band EQ.
eq(low: +3db, mid: -2db)Waveshaper distortion.
distort(0.4)Pitch correction.
autotune(Dm)BitCrusher + warmth.
lofi()Mix
Stereo channel and bus mix. Define buses as bus.name; master accepts lufs(-14) and limiter(-0.3db).
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
Available presets for melody/theme blocks.
juno106 tb303 jupiter8 sh101 dx7
piano pad organ bass synth leadReady to write some heat?
Open the studio and drop into the MusicScript editor. Your browser is the runtime.
Open Studio