Editor Reference and Keyboard Shortcuts
Every button and every key, all in one place
This page is for looking things up. If this is your first time, walk through the editor quick start first — that one is a single route from nothing to pasting into the game.
I want to do X — which section
| I want to… | See |
|---|---|
| Get the character count down so it pastes into the game | Optimise (start with Lossless) |
| Hear only a section in the middle | Partial playback |
| Change the volume or the key of a whole span | Velocity, Transpose |
| Fold two tracks into one | Merge tracks |
| Change the tempo of the piece, or change it part-way | Tempo |
| Move a score in from the game, or back out to it | Clipboard |
| Save to a file, or import one | File |
| Give a friend a link | Share |
| Find where a note in a long score sits in the text | Piano roll (double-click the note) |
| Change instrument, rename a score, mute one of them | Score tabs |
Two worlds: focus decides the keyboard
The editor has two places you can work in — the piano roll and the MML text pane — and they share one keyboard. There is only one rule:
While focus is in the text pane, every roll key gets out of the way.
Which is to say: while you are typing in a text box, Delete deletes characters, Ctrl+C copies text and the arrow keys move the cursor, exactly as in any other text box. That holds even while the mouse is sitting over the roll — resting your hand over the roll while typing is a natural posture, and having your text paste swallowed at that moment would be maddening.
To get back to the roll's world, click on the roll (the mode where clicking empty space draws nothing is Select only).
The keys on the roll side share one precondition: something has to be selected. Delete, +/- and Ctrl+C/X all act on "the notes you selected", and with no selection nothing happens at all.
Also, the whole set stands down while a dialog is open: with the Velocity box open, Delete will not delete the notes behind it and 3 will not quietly change the note length.
Title bar
The top line. The site name on the left, and four ways in and out on the right.
The 夜光 MML Workshop wordmark in the top-left means "start over". It is not "go back" — clicking it clears what you had saved and reloads the demo score. It asks first, but once you confirm, Ctrl+Z will not bring it back: it is the one action on the whole site the undo stack cannot reach.
Clipboard
This is how scores move to and from the game. MML is plain text, so everything goes through the clipboard. The box has two halves:
| Button | What it does |
|---|---|
| Paste | Reads the MML in the clipboard. Two modes above it: Append fills from the first empty score and leaves the existing ones alone; Replace all clears everything and fills from score 1 |
| Copy current score | Copies the current score as one MML@…; block with all four segments inside, ready to paste into the game |
| Copy all | Copies every score at once. The block as a whole cannot be pasted into the game (it is multi-line), but each line individually can; pasting it back into this site restores the score names and instruments too |
Copying strips whitespace — that is what the game counts. A score with a track over its limit still copies, but you are told that this one will not paste into a Blank Score.
Some browsers will not let a page read or write the clipboard directly; when that happens a small box opens asking you to press Ctrl+V or Ctrl+C yourself — nothing is broken.
File
Three blocks, top to bottom:
| Block | What it does |
|---|---|
| Import | Takes .mid, 3MLE .mml and Mabinogi .mmi, and you can also drop a file into the box. It lists the voices in the file that contain notes for you to tick, up to 15 scores |
| Export | Type a file name, pick a format (.mid / .mml / .mmi), press Download |
| Clear | Clear all notes: clears all 15 scores and leaves 1 empty one. The file name and key signature are kept, the instruments go back to default. Ctrl+Z undoes it |
The import list has two modes: Fresh capture (replace everything) and Append (add after the existing tracks). Each row also gets a capture mode; the details of that are in MIDI to MML.
To take a whole ensemble away with you, save as .mmi — one mml-track in it is one score. .mml holds at most 16 tracks, so a full ensemble does not fit and something is left out (you are told when that happens).
Share
Creates a link; whoever opens it gets this whole ensemble. Signing in is required (in a copyright dispute this site must be able to notify the sharer by law, so an email address has to be on record).
Before it is sent the score goes through character-count compression that is non-destructive to the original notes — notes, lengths and tempo are completely unchanged, only written more compactly. Sharing identical content again gives you the same link.
The lower half of the box is the list of links you have shared, 10 per page, each with three actions:
| Action | What it does |
|---|---|
| Load | Loads that one back into the current editor, replacing what you have (Ctrl+Z gets it back) |
| Copy link | Copies the URL to the clipboard |
| Delete | The link stops working immediately and anyone opening it sees "not found". The score in your editor is unaffected |
Settings
A drawer on the right; for its contents see the settings drawer section. Esc closes it.
Playback row
The left half of the toolbar.
| Button | What it does |
|---|---|
| ▶ Play | Plays. Becomes ❚❚ Pause while playing, and ▶ Resume once paused. No keyboard shortcut |
| Stop | Stops and returns to the beginning |
| Follow | The view follows the playhead across pages while playing. Scrolling horizontally yourself switches it off, and one click turns it back on |
| All / Part | Play the whole piece, or just a section. Pressing All clears the start and end markers on the bar ruler |
| Loop | On reaching the end (or the end marker), start again from the beginning (or the start marker) |
How to set the range for partial playback: on the bar ruler, or in Select only mode on empty space in the roll — left click sets the start, right click sets the end. You can also move the range live on the ruler during playback.
Both panes are read-only while playing. Neither the roll nor the text pane can be changed during playback. You can edit while paused, and the changes take effect when you press Resume. The right of the roll toolbar shows whether you are currently Playing / Paused / Editing.
Roll toolbar
Select only, and note length
Select only (shortcut 0) is arrow mode: clicking empty space draws no note and sets the playback range instead. The six buttons to its right are the note length, shortcuts 1 to 6:
| Key | Length | Key | Length |
|---|---|---|---|
| 1 | Whole note | 4 | Eighth note |
| 2 | Half note | 5 | Sixteenth note |
| 3 | Quarter note | 6 | Thirty-second note |
Choosing a length puts you in drawing mode, and a left click on empty space draws a note of that length. To go back to clicking notes and reading along in the MML after drawing a few, press 0.
Zoom
Two pairs of plus and minus buttons, one per axis: column width (how wide one cell is across) and row height (how tall one pitch row is). The wheel works too:
| Gesture | Effect |
|---|---|
| Ctrl+wheel | Column width (finer detail across, or more of the song) |
| Ctrl+Shift+wheel or Alt+wheel | Row height (clearer pitches, or more octaves at once) |
| Shift+wheel | Horizontal scrolling (the browser's own; very useful in a long score) |
Zoom is current state only and goes back to the default on refresh.
Undo and redo
Ctrl+Z undoes, Ctrl+Shift+Z or Ctrl+Y redoes. A continuous run of typing counts as one step, not one step per letter.
All five functions below can be taken back with Ctrl+Z, and so can importing, pasting, loading a share and Clear all notes — so there is no need to be afraid of any of them.
Tempo
Writes t into the score. You can type it by hand, but only this box deals with notes held across a tempo change (they are split in two and rejoined with a tie; it sounds identical, but it is what stops the game drifting out of tune).
- Tempo reference: whose tempo counts as the master. Sync all scores next to it writes that tempo map into every other score
- Position: Start of track (the tempo of the whole piece) or Before the selected note (a change part-way; select a note first)
- Tempo (BPM): a number or the slider. Preview plays a fixed rhythm pattern so you can hear the tempo on its own, and it sounds while you drag the slider too
- Where a tempo mark already exists at that position, an extra Remove this tempo mark button appears
Every score has to carry its own tempo. A score is copied to one person, and without a t that person plays at their own default speed.
And it sounds right here: playback always converts against the tempo reference, so there is nothing to hear on this site and it only drifts once you are in the game. When tempos disagree the status bar keeps a warning up, with the button that fixes it right beside it.
Velocity
Adjusts volume in bulk (MML's v, 0 to 15). Range has four levels: All scores / Current score / Current track / Selected notes; Adjust chooses how many steps louder or softer. The box first tells you how many notes are in that range and what velocities they span.
There is a quicker pair on the roll itself: with notes selected, press + or - for one step at a time. How far those two keys reach depends on how many notes you selected:
| Selected | What +/- means |
|---|---|
| One note | Everything after this point follows (a single v is written) |
| Several notes | Only those notes change; the original velocity resumes after them |
0 and 15 are the ends of the scale, and notes pushed past them are clamped, losing the dynamic differences between them — both the box and the hint say so first.
Transpose
Raises or lowers by semitones in bulk. Range again has four levels (All scores / Current score / Current track / Selected notes), and Adjust reads "Up / Down N keys", with an exact octave marked as such.
If it would move notes out of range it does nothing, and tells you how many notes fall past the top or the bottom.
Optimise
Brings the character count down. This is the only thing that can change the sound, so the five methods come in two groups:
| Symptom | Which one |
|---|---|
| A little over, and you do not want the sound touched | Lossless — recomputes the shortest spelling; not one note moves |
| Still over after Lossless | Fill the gap (saves the most), Partial fill (keeps some sense of separation), Tail rest (gives up the tail as a breath). These three do change note lengths |
| One track has burst its limit while others in the same score have room | Regroup — moves notes into the gaps of the other tracks; not a single note changes |
What the middle three do is bounded: no note's start time changes and the rhythm does not change, only lengths — and only notes of a beat or more, extended by at most a quarter of their original length, with rests no longer than an eighth note. So what you hear is the phrasing getting more or less legato, not the melody changing.
Every option button works out the cost for you first (characters saved, notes affected), and only runs once chosen. Range has the same four levels as before, with two exceptions worth remembering: Lossless always recomputes the whole track and ignores the selection, and Regroup only applies to the current score.
Regroup is best kept for last — it scatters the original three-track layout. And it barely saves any characters; its value is in "getting every track under its own limit". When it cannot move anything it distinguishes two cases and tells you whether what you need to free up is time or characters; follow what it says.
Not happy with any of it? Ctrl+Z.
Merge tracks
Folds this track (or the selected notes) into another one. The target dropdown is grouped by score, so you can merge into a different score as well.
Five methods, again chosen by symptom:
| What you want | Which one |
|---|---|
| The source moves across whole; the target survives only in the gaps | Source wins |
| The reverse: source notes only go into the target's gaps, and collisions are dropped | Target wins |
| Two into one, with the melody floating to the top | Favour melody (takes the highest note at every attack) |
| Two into one, keeping the bass line | Favour root (takes the lowest note at every attack) |
| That stretch of the target is not wanted; replace it wholesale | Source replaces target |
The last three either generate a fresh monophonic line or discard the target's content, and both the explanation in the box and the cost on the button (notes dropped, notes shortened) are worked out for you first. Range has two settings: current track, or selected notes.
Piano roll
Where you draw notes with the mouse. The keys are down the left side and clicking a key sounds that note; the thin strip along the top is the bar ruler.
Mouse
| Action | Result | Requires |
|---|---|---|
| Left click on empty space | Draws a note (at the length chosen in the toolbar) | Drawing mode |
| Left click on empty space | Sets the playback start marker | Select only mode |
| Right click on empty space | Sets the playback end marker | Select only mode |
| Left click a note | Selects it and sounds it once | — |
| Right click a note | Deletes it (it becomes a rest of the same length; nothing after it shifts) | — |
| Drag a note | Moves it (up and down for pitch, left and right for position) | — |
| Drag a note's right edge | Changes its length | Single selection only |
| Ctrl+click a note | Adds it to or removes it from the selection | — |
| Shift+click a note | Selects everything from the last note clicked to this one | — |
| Double-click a note | The text cursor jumps to that note's position | Select only mode |
| Left / right click on the bar ruler | Sets the playback start / end marker | — |
Press Esc before letting go to cancel a drag; during a drag the arrow keys fine-tune by half a cell (only left and right do anything while resizing). Whether a drag will crush other notes is written out on the right of the toolbar first: "will delete N notes / will shorten N notes".
Reading the picture
- Solid notes are the track you are editing; other tracks in the same score are outlined, and other scores fainter still. Colour is by score
- Selected notes take on an obvious background. The selection is linked to the text pane — select a span of text there and it is selected here too
- With Key signature turned on in the settings, rows outside that key are dimmed. It is only a hint and blocks nothing
- Bar lines are always drawn as 4/4. You are told when an imported file is in another time signature, and the bars in the roll will not line up in that case
- During playback, whatever the playhead passes over lights up
Selecting, deleting, clipboard
| Key | Effect | Requires |
|---|---|---|
| Delete/Backspace | Selected notes become rests of the same length | A selection, focus outside the text pane |
| +/- | Velocity one step up or down | A selection |
| Ctrl+C | Copies the selected notes | A selection |
| Ctrl+X | Cuts (copies, then leaves rests) | A selection |
| Ctrl+V | Pastes notes | See below |
Ctrl+V lands at "the selection, or wherever the mouse is right now". With neither, it reminds you to "select some notes, or move the mouse to where you want to paste". Pasting replaces whatever was at the landing point, and Ctrl+Z undoes it.
Read-only tracks
When an imported score contains unrecognised characters, that track's roll is read-only — nothing can be drawn or dragged. The text is still editable, and clearing those characters restores it.
Editing in the roll regenerates the whole track's MML. The notes themselves are unaffected, but any comments and manual formatting you wrote will be lost. Get the notes right in the roll first and format last.
Score tabs and the editing area
The lower half of the screen. One tab is one complete score handed to one person, with its own instrument and name; up to 15 of them and at least 1 (a solo is a perfectly normal use).
The tab row
| Action | Result |
|---|---|
| Click a tab | Switches to it |
| Double-click the name | Renames it. In an ensemble, "Vibraphone - Sam" is easier to recognise than "Score 5" |
| Drag a tab | Changes the order of the scores |
| Click the dot to the left of the name | Shows or hides this score's notes in the piano roll (playback is unaffected) |
| The ✕ on the right | Removes this score. It asks first if there is still content in it, and the scores after it move up one slot |
| + Add | Adds a new empty score |
The instrument row
The line under the tabs, left to right:
| Control | What it does |
|---|---|
| Instrument dropdown | Which sound this score uses. One score has one instrument, shared by all four tracks |
| Instrument score / Vocal score | An instrument score uses the three tracks Melody / Harmony 1 / Harmony 2; a vocal score uses only Vocal. Switching never discards the other side |
| Mute | This score makes no sound on playback. Export, save and share are unaffected |
| Play only | Plays this score alone and mutes all the others. Click again to release |
| Show (the eye) | Hides this score's notes in the roll. It still sounds — to silence it use Mute |
| Show only | Draws only this score in the roll and takes all the others off. Click again to show them all |
| Copy | Copies this score as an MML@…; you can paste into the game |
Mute and Play only are about sound, Show and Show only are about the display: four buttons side by side, entirely independent of each other.
The MML text pane
On a desktop the three tracks sit side by side (Melody / Harmony 1 / Harmony 2), which makes them easy to line up. Whichever one you click becomes the roll's focus, and the one being edited has a brighter border.
The top right of each track is its counter: N notes · N/limit chars. That is the count after export, with spaces and line breaks excluded, so you can use line breaks to separate bars freely. Going over the limit turns it red, but nothing stops you carrying on editing.
| Track | Character limit |
|---|---|
| Melody | 1600 |
| Harmony 1 | 1200 |
| Harmony 2 | 900 |
| Vocal | 1200 |
This is a hard limit set by the game. The number shown on screen is the limit actually in force — where it disagrees with this table, believe the screen.
Status bar
The bottom line. It is all "what is true right now"; there is nothing to press:
| Field | Meaning |
|---|---|
| Scores | How many scores there are now / the maximum |
| Notes | Total note count |
| Tempo | The BPM in force. With no t written it shows "120 BPM (default)" |
| Length | How long the whole piece takes to play |
| Save state | Saved · time / Not saved yet / Autosave is off |
| Engine | The synthesiser's loading progress and sample rate. There is no sound until Engine ready |
Two more appear in the middle only when needed: parse warnings (unrecognised characters, pitches out of range and so on), and the persistent tempo mismatch notice — that one has the button that fixes it right beside it.
Settings drawer
The Settings button at the far right of the title bar; Esc closes it. Top to bottom:
| Item | Notes |
|---|---|
| Sign in | Sign in with Google. Only sharing needs it; nothing else does |
| Language | The interface language. Switching reloads the page — the score is kept, but the undo history is cleared |
| Autosave | Stores the score in this browser so a restart picks it up again, and nothing is uploaded to the server. Turning it off does not delete what is already stored, but later edits are no longer recorded — a refresh takes you back to the state it was in when you turned it off |
| Key signature | Pick a key and the rows outside it are dimmed in the roll. A hint only |
| Syntax colouring | Tempo, note length, octave and volume each get a colour; unrecognised characters get a red wavy underline, and anything past the character limit gets a red background |
| MML line breaks | A line break every 1 or 2 bars. It changes the text (real line breaks are inserted), but whitespace does not count towards the game's limit. A note held across a bar line cannot be split, so that line runs longer and the numbering skips |
| Bar markers | A bar number in the text every few bars. It changes the display and not one character of the text. Off by default |
| Sound bank | Load your own .dls / .sf2 / .sf3. Details in the FAQ |
| Instrument definitions | Load your own .def, which decides which sounds the instrument dropdown lists |
| Delete account | Deletes the account and every share under it, with no way back. What exactly is promised is set out in the privacy policy |
Narrow screens and phones
As the screen narrows, things fold away rather than disappear:
- The right of the title bar becomes a single hamburger button, with Clipboard / File / Share / Settings inside that panel
- The title bar gains four display toggles (invisible on a desktop): Show toolbar / Show piano roll / Show editor / Show status bar. Turning an area off gives its space to the rest — vertical space is the scarcest thing on a small screen, so turn the editing area off if you only want to draw notes, and turn the roll off if you only want to type. Lit means currently visible
- The three tracks go from side by side to stacked; narrower still and they become one at a time, switched with the small tabs above the editing area
There are two triggers: a very narrow screen, or a very short one — so a phone held sideways (wide but short) gets this layout too, and so does a desktop window squashed flat.
Playback and viewing are both fine on a phone, so opening a share link just to hear it works perfectly well. But the editor is designed for a mouse and keyboard — no right click, no shortcuts, and dragging is awkward — so for serious writing use a computer; see the FAQ.
Full shortcut tables
While focus is in the MML text pane, every key in the first table is inactive and you are in plain text editing (Delete deletes characters, Ctrl+C copies text, the arrow keys move the cursor). The first table also stands down entirely while a dialog is open.
Play, Stop, switching tabs and saving have no shortcuts — the buttons are the only way.
Piano roll keyboard
| Key | Effect | Requires |
|---|---|---|
| 0 | Switches to Select only (arrow) mode | — |
| 1 2 3 4 5 6 | Note length: whole / half / quarter / eighth / sixteenth / thirty-second | — |
| Delete/Backspace | Selected notes become rests of the same length | A selection, not playing |
| +/- | Velocity one step up or down | A selection, not playing |
| Ctrl+C | Copies the selected notes | A selection |
| Ctrl+X | Cuts the selected notes | A selection, not playing |
| Ctrl+V | Pastes notes (landing on the selection or the mouse position) | Not playing |
| ↑ ↓ ← → | Half-cell fine-tuning (only ← → while resizing) | Only during a drag |
| Esc | Cancels the drag in progress and stops the preview | — |
Mouse and wheel
| Gesture | Effect | Requires |
|---|---|---|
| Left click on empty space | Draws a note | Drawing mode |
| Left / right click on empty space | Sets the playback start / end marker | Select only mode |
| Left / right click on the bar ruler | Sets the playback start / end marker | Works during playback too |
| Left click a note | Selects it and sounds it once | — |
| Right click a note | Deletes it | Not playing |
| Drag a note | Moves it | Not playing |
| Drag a note's right edge | Changes its length | Single selection, not playing |
| Ctrl+click a note | Adds to or removes from the selection | Not playing |
| Shift+click a note | Range selection | Not playing |
| Double-click a note | The text cursor jumps to its position | Select only mode, not playing |
| Click a key on the left | Sounds that note | — |
| Ctrl+wheel | Column-width zoom | — |
| Ctrl+Shift+wheel or Alt+wheel | Row-height zoom | — |
| Shift+wheel | Horizontal scrolling | — |
Everywhere
| Key | Effect | Requires |
|---|---|---|
| Ctrl+Z | Undo | — |
| Ctrl+Shift+Z/Ctrl+Y | Redo | — |
| Esc | Closes dialogs, the settings drawer and the phone menu | — |
| ↑ ↓ | Adjusts the height of the roll and the editing area (Shift for bigger steps) | Focus on the splitter |
| Enter/Esc | Confirms / cancels a rename | While renaming a score |
Not read the quick start yet? The editor quick start has a single route from nothing to pasting into the game. To write MML by hand see the syntax guide, and for anything else the FAQ.