🚀 Getting Started
ABC Music Maker is a multi-track DAW built around ABC notation — a plain-text music format. Every song is stored as a human-readable .abc text file. The interface has three main areas:
- Toolbar — file operations, transport controls, global settings, and panel toggles.
- Piano Roll — graphical note editor. Multiple coloured tracks are displayed simultaneously.
- ABC Editor — raw notation editor. Bidirectionally synced with the piano roll.
Typical workflow: Open or create an .abc file → edit notes in the piano roll or editor → pick instruments in the Tracks panel → adjust mix → export audio.
Quick-start: Click New to create a blank song, or Open to load an existing .abc file. Make sure the Integrated Synth is loaded (toolbar button) before playing — it loads the GM soundfont on first use and may take a few seconds.
⌨ Global Keyboard Shortcuts
| Space | Play / Pause toggle |
| Escape | Stop playback and return playhead to start; also deselects notes and closes overlays |
| Ctrl Z | Undo (piano-roll edits, track changes, mixer, transport) |
| Ctrl Y / Ctrl ⇧Z | Redo |
| Ctrl S | Save current file (overwrites; updates Q:/K:/M: headers) |
| Ctrl O | Open file picker |
| Ctrl N | New blank song |
| Ctrl E | Toggle ABC Editor panel visibility |
| Ctrl Enter | Apply ABC editor changes (same as Apply button) |
| F8 | Toggle Recorder panel |
| F9 | Toggle Mixer panel |
| F10 | Toggle 3D Visualizer |
| ? | Open this help panel (when no text field focused) |
| [ | Set loop start at current playhead position |
| ] | Set loop end at current playhead position |
🎹 Piano Roll — Editing Modes
The piano roll shows all tracks as coloured note blocks on a time/pitch grid. The active track (selected in the Tracks panel) is brighter; other tracks are dimmed but still visible. Switch editing modes via the toolbar mode buttons or keyboard shortcuts:
| D | Draw mode — left-click to place a note; click and hold to set its start then release to commit. Right-drag an existing note's right edge to resize its duration. Right-click a note to delete it. |
| E | Erase mode — left-click or drag over notes to delete them. |
| V | Select mode — click a note to select it; drag on empty space to rubber-band-select multiple notes. Drag selected notes to move them (time and pitch). Right-drag the right edge of a selected group to resize all at once. |
| H | Pan mode — left-drag anywhere to scroll the viewport freely. |
Navigation:
| Scroll wheel | Zoom in / out horizontally (time axis) |
| Shift + Scroll | Pan left / right (time axis) |
| Ctrl + Scroll | Pan up / down (pitch axis) |
| Click bar-ruler | Jump playhead to that position |
| Shift + click bar-ruler | Set loop start |
| Ctrl + click bar-ruler | Set loop end |
| Click key labels (left) | Preview that pitch through the active synth |
Grid snap: Notes snap to the current quantisation value shown in the toolbar snap selector. Common values: 1/4, 1/8, 1/16, 1/32, and Triplet variants. Set to Free to place notes without snapping.
▣ Selection & Clipboard
| Ctrl A | Select all notes on the active track |
| Ctrl C | Copy selected notes to clipboard |
| Ctrl X | Cut selected notes |
| Ctrl V | Paste at playhead position on active track |
| Del / Backspace | Delete selected notes |
| Escape | Deselect all |
| Drag (Select mode) | Move selected notes — both time position and pitch |
| ↑ / ↓ | Nudge selected notes up / down one semitone |
| ← / → | Nudge selected notes left / right by one grid unit |
| Shift ↑/↓ | Nudge one octave up / down |
Copy / paste works across tracks — paste adds notes to whichever track is currently active. Copy then switch tracks before pasting to duplicate a phrase onto another instrument.
🎚 Transport & Song Metadata
The transport bar (top of piano roll area) contains the play controls and song-wide settings:
| BPM | Beats per minute. Changing the value rescales all note timestamps so the rhythm sounds identical at the new tempo. The ABC Q: header is updated on save. |
| Key | Key signature. When changed, all non-drum notes are transposed by the shortest interval to reach the new key (max ±6 semitones). The K: header updates. |
| Meter | Time signature (e.g. 4/4, 3/4, 6/8). Changing this updates bar-line positions in the piano roll and the M: header. |
| Loop ⟳ | Toggle loop playback. The shaded region between the loop markers loops continuously. Loop markers can be dragged or set with [ / ]. |
| Follow ↓ | Auto-scroll the piano roll to follow the playhead during playback. |
| ⬇ Audio | Export the entire song to a WebM/Opus audio file — see Audio Export section below. |
📋 Tracks Panel
Each row represents one ABC voice (V: header). Click a row to make that track active in the piano roll.
| Name | Click to rename. Used as the ABC V: name and label in the piano roll. |
| Ch | MIDI channel 1–16. Channel 10 is always the GM drum channel — note pitches map to drum sounds regardless of instrument. |
| Instrument | Click to open the instrument browser. For the GM synth this shows all 128 GM programs grouped by family. For the DX7 synth it opens the DX7 preset picker. |
| Vol / Pan | Coarse track volume (0–127) and stereo pan (L–R). Stored as %%MIDI control 7 and %%MIDI control 10. |
| ⊕ Add track | Adds a new empty voice with a default instrument. |
| ⠿ Drag handle | Drag rows to reorder tracks. Order affects ABC voice numbering and piano-roll colour assignment. |
| ⧉ Duplicate | Clones the selected track including all its notes and settings. |
| 🗑 Delete | Removes the track and all its notes (undoable). |
📄 ABC Notation Primer
ABC notation represents music as plain text. A minimal single-track file looks like this:
X:1
T:My Song
M:4/4
L:1/8
Q:120
K:C
V:1 name="Piano"
%%MIDI program 0
C D E F | G A B c |
Header fields (before the first note line):
X: | Index number — must be first; any integer works. |
T: | Title — shown in the app title bar and used as the export filename. |
M: | Meter / time signature, e.g. 4/4, 3/4, 6/8. |
L: | Default note length, e.g. 1/8 means an undecorated letter = an eighth note. |
Q: | Tempo in BPM, e.g. 120 or 1/4=140. |
K: | Key signature, e.g. K:G, K:Dm, K:none. |
V: | Voice/track name, e.g. V:1 name="Guitar". Each voice becomes one track. |
Note syntax: C D E F G A B = middle octave; c d e f g a b = octave above. Add ' to go up an octave, , to go down. Use ^ for sharp, _ for flat, = for natural. Duration multipliers: C2 = double length, C/ = half. Use | for bar lines, z for rests, x for invisible rests.
Chords: Wrap simultaneous notes in square brackets: [CEG].
Tuplets: (3ABC = triplet of A B C.
📝 ABC Editor
The editor is a code editor with ABC-aware syntax highlighting and error checking. Changes you make are reflected in the piano roll when you press Apply (Ctrl Enter). Conversely, every piano-roll edit, track rename, mixer change, or transport adjustment immediately regenerates the ABC text in the editor.
Editor shortcuts:
| Ctrl Enter | Apply — parse and reload the piano roll |
| Ctrl F | Open find bar |
| Ctrl H | Toggle find-and-replace row |
| Enter (find open) | Find next match |
| Shift Enter (find open) | Find previous match |
| Ctrl . | Apply first available Quick Fix on the current line (e.g. fix unknown note, balance brackets) |
| Ctrl / | Toggle % comment on selected lines — mutes those notes without deleting them |
| Shift Alt ↓ | Duplicate current line or selected block downward |
Auto-Apply toggle (toolbar): When on, the piano roll updates automatically after every keystroke with a short debounce delay. Useful for short compositions; turn off for large files to avoid lag.
Hints mode (toolbar toggle): Enables contextual tooltips that explain ABC tokens as you hover or type — useful for learning the format.
%%MIDI extensions supported in the editor:
%%MIDI program N | Set GM program (0–127) for the current voice |
%%MIDI channel N | Override MIDI channel for the voice |
%%MIDI control 7 N | Volume (0–127) |
%%MIDI control 10 N | Pan (0=left, 64=center, 127=right) |
%%MIDI control 91 N | Reverb send level (0–127) |
%%MIDI control 93 N | Chorus send level (0–127) |
%%MIDI automation T CC V | Automation point: time T (beats), CC number, value V. Creates a time-varying control curve during playback. |
🔊 Integrated Synth (SpessaSynth GM)
The primary audio engine is SpessaSynth, a high-quality General MIDI synthesizer that uses the included Integrated_Synth.SF2 soundfont. It supports all 128 GM programs across 16 MIDI channels simultaneously.
- Load it once per session with the Integrated Synth toolbar button. The first load downloads and decodes the SF2 file (~30–60 s on slow machines).
- Once loaded, it remains active for the entire session and is the default playback engine.
- GM program numbers 0–127 correspond to standard instruments: 0=Acoustic Grand Piano, 24=Nylon Guitar, 40=Violin, 56=Trumpet, 73=Flute, etc.
- Channel 10 is always drums — note C2 = Bass Drum, D2 = Snare, F#2 = Hi-hat, etc. (GM drum map).
- Reverb and chorus levels sent via
%%MIDI control 91/93 are handled internally by SpessaSynth's built-in effects.
🎛 DX7 FM Synthesizer
A second synth engine based on the Yamaha DX7 FM synthesis model. Runs as a Web Audio Worklet alongside the GM synth. Assign it to a track by selecting a DX7 preset as the track instrument.
Preset Browser: Click any track's instrument button while the DX7 synth engine is loaded to open the DX7 Preset Picker overlay. It provides:
- Search box — type any part of a patch name to filter across all loaded banks instantly.
- Bank selector — choose from all
.syx DX7 sysex bank files found in webdx7-master/dist/dx7/presets/.
- Patch selector — 32 patches per bank; select to load immediately.
Adding custom banks: Drop any Yamaha DX7 .syx sysex file (32-voice format, 4104 bytes) into webdx7-master/dist/dx7/presets/ and reload the app. The bank appears automatically.
The DX7 synth is polyphonic and supports velocity sensitivity. It outputs to the same master audio bus as the GM synth, so Mixer and FX chain settings apply to its output.
🎚 Mixer
Open with Mixer button or F9. Shows one channel strip per track plus a master strip on the right.
| Volume fader | Track output level (0–127). Writes %%MIDI control 7 to the ABC on change. |
| Pan knob | Stereo position (full left to full right). Writes %%MIDI control 10. |
| Reverb | Send level to the built-in reverb effect (0–127). Writes %%MIDI control 91. |
| Chorus | Send level to the built-in chorus effect (0–127). Writes %%MIDI control 93. |
| M (Mute) | Silences the track without removing it. Muted tracks are greyed in the piano roll. |
| S (Solo) | Mutes all other tracks. Multiple tracks can be soloed simultaneously. |
| Master fader | Overall output gain. Does not affect the exported audio level. |
Automation: Draw automation curves into the ABC with %%MIDI automation lines. During playback the automation values smoothly override the static fader/knob positions. Automation is written per-beat and interpolated.
🔧 FX Chain
Open with the FX toolbar button. A master effects rack that processes the combined output of all tracks. Built on the Tuna.js audio effect library. Effects run in the listed order (signal chain top-to-bottom).
| Enable toggle | Enable/disable the entire FX chain with one click. When disabled, the chain is bypassed and uses zero CPU. |
| Reverb | Convolution or algorithmic reverb. Controls: Room Size, Damping, Wet/Dry. |
| Chorus | Rate, Depth, Delay, and Feedback controls for thickening pads and leads. |
| EQ | Three-band parametric EQ: Low shelf, Mid peak, High shelf. Frequency, gain, and Q for each band. |
| Compressor | Dynamics compressor: Threshold, Ratio, Attack, Release, Knee. |
| Delay | Sync-able tape delay: Time (ms or beat division), Feedback, Wet level. |
Each effect has its own enable toggle. Disabled effects pass signal through unchanged with no CPU cost. Drag effect rows to reorder the chain.
⬇ Audio Export
Click ⬇ Audio in the piano roll header to export the current song as a WebM/Opus audio file. The format is supported by all modern browsers and media players.
How it works:
- Playback starts from the beginning of the song.
- Audio is captured directly from the master audio output bus using a
MediaStreamDestination node — no microphone or screen-capture required.
- Recording stops automatically 1.5 seconds after the song ends (to capture reverb tails).
- The file is named after the song's
T: title field and downloaded automatically.
Notes:
- The Integrated Synth must be loaded before exporting.
- The export captures exactly what you hear — all active mixer settings, FX chain, and mute/solo states are reflected.
- Click ⏹ Cancel to abort mid-recording (no file will be saved).
- Do not interact with the app during export for best results.
🌀 3D Visualizer
Toggle with Viz toolbar button or F10. Opens a full-screen 3D animated display that shows notes flying toward the camera and a 3D piano keyboard that lights up in real time during playback.
- Camera orbit: Left-drag to rotate the scene. Right-drag to pan. Scroll to zoom.
- Playable keyboard: Click the 3D piano keys to play notes through the active synth, even while playback is stopped.
- Note colours match the track colours in the piano roll.
- Performance note: the visualizer uses WebGL. On low-end hardware consider reducing the window size or closing other GPU-heavy applications.
⏺ Recorder
Toggle with F8 or the toolbar button. Records from your microphone and converts pitched audio into MIDI note events on the active track using real-time pitch detection.
- Grant microphone permission when the browser asks.
- Best results come from monophonic sources (singing, whistle, single-note instruments).
- Detected notes appear in the piano roll in real time and are also written to the ABC editor.
- Set the active track before recording — notes are added to whichever track is selected.
- Quantisation: recorded notes are snapped to the current grid snap value.
💾 File Operations
| New | Create a blank song with one empty track. Prompts to save unsaved changes. |
| Open | Open a .abc file from disk. Supports standard ABC v2.1 and files with %%MIDI extensions. |
| Save (Ctrl S) | Overwrite the current file. All transport, track, and mixer settings are serialised back into the ABC headers. |
| Save As | Save a copy under a new filename. |
| CSV Import | Import note data from a CSV file (time, pitch, duration columns). Useful for programmatic composition workflows. |
The title bar shows the filename and a • dot when there are unsaved changes. Closing the window with unsaved changes will prompt you to save.
🔌 MIDI Output
If your system has MIDI output ports (virtual or hardware), use the MIDI Port selector in the toolbar to route playback to an external synthesizer, DAW, or device. When a port is selected, MIDI note-on/off, program-change, and CC messages are sent in real time during playback.
- Connect a DAW (e.g. Ableton, FL Studio) via a virtual MIDI cable (loopMIDI on Windows) to use ABC Music Maker as a sequencer.
- Internal audio (SpessaSynth / DX7) continues to play unless you mute the master or lower volume.
- MIDI output and audio export are independent — you can export audio while also sending MIDI.
💡 Tips & Advanced Workflows
- Multi-instrument arrangements: Add one track per instrument. Assign unique MIDI channels (1–9, 11–16) and GM programs. Keep channel 10 for drums.
- Quick transposition: Select all notes on a track (Ctrl A) then use ↑/↓ for semitones or Shift ↑/↓ for octaves.
- Copy a phrase to another track: Select notes (Ctrl C), click the destination track, paste (Ctrl V). Useful for call-and-response or doubling.
- Comment out a section: Select lines in the editor and press Ctrl / to mute them with
% — then apply. The notes disappear but remain editable.
- BPM automation: The
Q: header can appear multiple times in a file; each occurrence changes tempo at that point. The editor supports multiple Q: lines mid-song.
- Undo history is per-session. It covers piano-roll edits, track mutations, mixer changes, and transport changes. The editor has its own separate undo stack.
- Long songs: Turn off Auto-Apply in the toolbar and only press Apply when ready, to avoid expensive re-parses on every keystroke.
- Previewing drum patterns: Channel 10 note C2 = Bass Drum 1, D2 = Acoustic Snare, E2 = Hand Clap, F#2 = Closed Hi-hat, A2 = Open Hi-hat, B2 = Ride Cymbal.
- Export at a specific mix: Mute tracks you don't want, set the faders, enable FX chain, then click ⬇ Audio to capture exactly that balance.