The maker at /music/maker is an on-device song bench with a step-sequencer grid and an SFX lab side by side: up to 8 tracks with per-track wave and volume, piano-roll editing, tap record, share links โ and one-click rayguns. Everything runs in your browser; drafts live in localStorage.
8
tracks max
40โ240
bpm range
8KB
share budget
0
uploads needed
1Step sequencer
Build a loop on the grid
Pick a track, pick a wave (square, triangle, sawtooth, sine, noise), and toggle notes on the piano roll โ drag to stretch a note longer. Dial the BPM, layer up to 8 tracks, and the budget meter keeps the whole song inside share size.
maker โ step sequencer session
8 tracks
T1 ยท square lead โ 16 stepsvol 0.8
T2 ยท triangle bass โ 16 stepsvol 0.7
T3 ยท noise hats โ tap record armedbpm 128
2Walkthrough
From first note to share link
Work left to right: lay down steps, shape the sound, record a human feel, then export. Import and export speak canonical $music:1 JSON, and share links carry the song base64-encoded in ?song=.
1
Toggle steps on the roll
Click cells to place notes on the piano roll; drag a note's edge to stretch its duration. Copy, paste, or clear whole bars when a section repeats.
2
Shape each track
Set the per-track wave and volume โ square leads, triangle bass, noise hats. Keep every note inside MIDI 0โ127 and the track count at 8 or fewer.
3
Set tempo and tap record
Slide the BPM anywhere from 40โ240, then tap-record a pass for human timing on top of the grid. Watch the byte budget meter stay inside share size.
4
Preview and export
Hit play for the on-device WebAudio preview, then download the canonical JSON, copy the ?song= share link, or keep iterating โ drafts persist in localStorage.
3SFX lab
Design one-line sound effects
The SFX lab lands alongside the maker: pick a wave, sweep freqStart down to freqEnd, set duration, volume, and noise mix, then preview live. Start from a preset โ raygun, death, jump, coin, explosion, laser, powerup, gameover โ and tweak until it zings.
4Worked example
An 8 bar loop at 128 BPM
Build a danceable loop in four tracks and under five minutes: drums, bass, chords, lead. The budget meter stays green the whole way because note data is tiny.
1
Track 1: noise hats
Set wave to noise, volume 0.5, BPM 128. Toggle every off beat cell across 16 steps for the tick. Copy the bar once to cover 8 bars without extra work.
2
Track 2: triangle bass
Set wave to triangle, volume 0.7. Place root notes on steps 0, 4, 8, 12 using MIDI 36..48. Drag one note longer to slide into the next bar for movement.
3
Track 3: square stabs
Set wave to square, volume 0.6. Add short chord stabs on steps 2 and 10. Keep durations at 1 step so the bass breathes between hits.
4
Track 4: sine sparkle
Set wave to sine, volume 0.5. Tap record a one bar fill an octave up, then keep the best take and clear the rest. Human timing over the grid is what makes it feel played.
5
Share it
Preview on device speakers, confirm the byte budget sits inside share size, then copy the ?song= link. Paste the link in a fresh tab to confirm it loads before sending it to anyone.
5Troubleshooting
Share link too big, no sound, lost draft
Maker problems cluster into three buckets: budget overflow, browser audio policy, and localStorage surprises. Each has a fast fix.
1
Share link overflows the budget
Cut track count first (mute test: drop to 4 tracks and recheck the meter), then shorten long notes, then lower BPM precision. Eight tracks of 16 steps should fit easily, so overflow usually means one runaway track.
2
Pressing play makes no sound
Browsers gate audio behind a gesture. Click inside the page once, confirm volume sliders are up on both the track and the master, and retry. If a Bluetooth device stole output, switch sinks and press play again.
3
Draft vanished after a wipe
Drafts live in localStorage on that device and browser only. Clearing site data removes them, private windows never kept them, and a different browser never had them. Export canonical JSON for anything you care about.
4
Imported JSON fails
Paste it through the validator and read the per error list. Common culprits: wave misspellings, MIDI notes outside 0..127, BPM outside 40..240, or more than 8 tracks. Fix the listed fields and reimport.