夜光 MML Workshop

Editor Reference and Keyboard Shortcuts

Every button and every key, all in one place

  1. I want to do X — which section
  2. Two worlds: focus decides the keyboard
  3. Title bar
  4. Playback row
  5. Roll toolbar
  6. Piano roll
  7. Score tabs and the editing area
  8. Status bar
  9. Settings drawer
  10. Narrow screens and phones
  11. Full shortcut tables

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 gameOptimise (start with Lossless)
Hear only a section in the middlePartial playback
Change the volume or the key of a whole spanVelocity, Transpose
Fold two tracks into oneMerge tracks
Change the tempo of the piece, or change it part-wayTempo
Move a score in from the game, or back out to itClipboard
Save to a file, or import oneFile
Give a friend a linkShare
Find where a note in a long score sits in the textPiano roll (double-click the note)
Change instrument, rename a score, mute one of themScore 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.

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:

ButtonWhat it does
PasteReads 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 scoreCopies the current score as one MML@…; block with all four segments inside, ready to paste into the game
Copy allCopies 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:

BlockWhat it does
ImportTakes .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
ExportType a file name, pick a format (.mid / .mml / .mmi), press Download
ClearClear 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:

ActionWhat it does
LoadLoads that one back into the current editor, replacing what you have (Ctrl+Z gets it back)
Copy linkCopies the URL to the clipboard
DeleteThe 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.

ButtonWhat it does
▶ PlayPlays. Becomes ❚❚ Pause while playing, and ▶ Resume once paused. No keyboard shortcut
StopStops and returns to the beginning
FollowThe view follows the playhead across pages while playing. Scrolling horizontally yourself switches it off, and one click turns it back on
All / PartPlay the whole piece, or just a section. Pressing All clears the start and end markers on the bar ruler
LoopOn 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:

KeyLengthKeyLength
1Whole note4Eighth note
2Half note5Sixteenth note
3Quarter note6Thirty-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:

GestureEffect
Ctrl+wheelColumn width (finer detail across, or more of the song)
Ctrl+Shift+wheel or Alt+wheelRow height (clearer pitches, or more octaves at once)
Shift+wheelHorizontal 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).

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:

SelectedWhat +/- means
One noteEverything after this point follows (a single v is written)
Several notesOnly 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:

SymptomWhich one
A little over, and you do not want the sound touchedLossless — recomputes the shortest spelling; not one note moves
Still over after LosslessFill 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 roomRegroup — 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 wantWhich one
The source moves across whole; the target survives only in the gapsSource wins
The reverse: source notes only go into the target's gaps, and collisions are droppedTarget wins
Two into one, with the melody floating to the topFavour melody (takes the highest note at every attack)
Two into one, keeping the bass lineFavour root (takes the lowest note at every attack)
That stretch of the target is not wanted; replace it wholesaleSource 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

ActionResultRequires
Left click on empty spaceDraws a note (at the length chosen in the toolbar)Drawing mode
Left click on empty spaceSets the playback start markerSelect only mode
Right click on empty spaceSets the playback end markerSelect only mode
Left click a noteSelects it and sounds it once
Right click a noteDeletes it (it becomes a rest of the same length; nothing after it shifts)
Drag a noteMoves it (up and down for pitch, left and right for position)
Drag a note's right edgeChanges its lengthSingle selection only
Ctrl+click a noteAdds it to or removes it from the selection
Shift+click a noteSelects everything from the last note clicked to this one
Double-click a noteThe text cursor jumps to that note's positionSelect only mode
Left / right click on the bar rulerSets 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

Selecting, deleting, clipboard

KeyEffectRequires
Delete/BackspaceSelected notes become rests of the same lengthA selection, focus outside the text pane
+/-Velocity one step up or downA selection
Ctrl+CCopies the selected notesA selection
Ctrl+XCuts (copies, then leaves rests)A selection
Ctrl+VPastes notesSee 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

ActionResult
Click a tabSwitches to it
Double-click the nameRenames it. In an ensemble, "Vibraphone - Sam" is easier to recognise than "Score 5"
Drag a tabChanges the order of the scores
Click the dot to the left of the nameShows or hides this score's notes in the piano roll (playback is unaffected)
The on the rightRemoves this score. It asks first if there is still content in it, and the scores after it move up one slot
+ AddAdds a new empty score

The instrument row

The line under the tabs, left to right:

ControlWhat it does
Instrument dropdownWhich sound this score uses. One score has one instrument, shared by all four tracks
Instrument score / Vocal scoreAn instrument score uses the three tracks Melody / Harmony 1 / Harmony 2; a vocal score uses only Vocal. Switching never discards the other side
MuteThis score makes no sound on playback. Export, save and share are unaffected
Play onlyPlays 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 onlyDraws only this score in the roll and takes all the others off. Click again to show them all
CopyCopies 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.

TrackCharacter limit
Melody1600
Harmony 11200
Harmony 2900
Vocal1200

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:

FieldMeaning
ScoresHow many scores there are now / the maximum
NotesTotal note count
TempoThe BPM in force. With no t written it shows "120 BPM (default)"
LengthHow long the whole piece takes to play
Save stateSaved · time / Not saved yet / Autosave is off
EngineThe 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:

ItemNotes
Sign inSign in with Google. Only sharing needs it; nothing else does
LanguageThe interface language. Switching reloads the page — the score is kept, but the undo history is cleared
AutosaveStores 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 signaturePick a key and the rows outside it are dimmed in the roll. A hint only
Syntax colouringTempo, 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 breaksA 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 markersA bar number in the text every few bars. It changes the display and not one character of the text. Off by default
Sound bankLoad your own .dls / .sf2 / .sf3. Details in the FAQ
Instrument definitionsLoad your own .def, which decides which sounds the instrument dropdown lists
Delete accountDeletes 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:

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

KeyEffectRequires
0Switches to Select only (arrow) mode
1 2 3 4 5 6Note length: whole / half / quarter / eighth / sixteenth / thirty-second
Delete/BackspaceSelected notes become rests of the same lengthA selection, not playing
+/-Velocity one step up or downA selection, not playing
Ctrl+CCopies the selected notesA selection
Ctrl+XCuts the selected notesA selection, not playing
Ctrl+VPastes notes (landing on the selection or the mouse position)Not playing
Half-cell fine-tuning (only while resizing)Only during a drag
EscCancels the drag in progress and stops the preview

Mouse and wheel

GestureEffectRequires
Left click on empty spaceDraws a noteDrawing mode
Left / right click on empty spaceSets the playback start / end markerSelect only mode
Left / right click on the bar rulerSets the playback start / end markerWorks during playback too
Left click a noteSelects it and sounds it once
Right click a noteDeletes itNot playing
Drag a noteMoves itNot playing
Drag a note's right edgeChanges its lengthSingle selection, not playing
Ctrl+click a noteAdds to or removes from the selectionNot playing
Shift+click a noteRange selectionNot playing
Double-click a noteThe text cursor jumps to its positionSelect only mode, not playing
Click a key on the leftSounds that note
Ctrl+wheelColumn-width zoom
Ctrl+Shift+wheel or Alt+wheelRow-height zoom
Shift+wheelHorizontal scrolling

Everywhere

KeyEffectRequires
Ctrl+ZUndo
Ctrl+Shift+Z/Ctrl+YRedo
EscCloses 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/EscConfirms / cancels a renameWhile 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.