Minichord Lab
Small web views that use the minichord as an interface for music theory.
Open it: https://keyandcableco.github.io/minichord-lab/
Views
- Pitch-class clock: every chord as a shape on a clock face, with its chord name, set class, interval vector and symmetry, and whether it's a turn (transposition) or a flip (inversion) of the chord before. Follows the minichord's key for spelling and its 19- and 31-note temperaments.
- Tonnetz: each triad lights a triangle on the tone lattice, and the trail follows the fewest P, L and R flips from chord to chord, beside how far the voices actually moved against the smoothest possible voice leading. Seventh chords and other non-triads light their notes and every triangle they fill. Follows 19- and 31-note temperaments with their own fifths and thirds.
- Roughness: Sethares's sensory roughness for each chord as tuned, the same chord in all twelve of the minichord's temperaments (choosing one switches the minichord), every major or minor triad in the current temperament against equal, a bar per chord, and the two-tone dissonance curve with the chord's intervals marked.
- Beats: a Lissajous figure of any two voices, still for a pure ratio and rolling when tempered, with each pair's nearest pure ratio, cents off it and beat rate from its closest overtones, the pair in every temperament, and a button to hear it. Uses the minichord's master tuning.
- Ear trainer: plays a chord or a three- or four-chord progression in the minichord's key, then checks what you play back on the chord buttons (or answer with an on-screen picker), with the bass note too if asked. Hints say whether the root, the kind of chord or the bass was off.
- Chord geometry: Dmitri Tymoczko's twisted triangular prism of three-note chords, drawn in 3D to drag and turn. Height is transposition and position across is the chord's shape; the trail is the straight line between chords, the smoothest voice leading, with its length in semitones. Four-note chords are shown by their three-note core, and the page says so.
- Stage: full-window visuals for projection. Ribbons draws each voice scrolling by, Bloom draws each chord on the pitch-class clock blooming outward as the next arrives, and Constellation turns the Tonnetz into a star field. Rough chords shimmer and sweet ones hold still. Night, chalkboard and daylight palettes; the controls and cursor fade when idle; keys 1–3, F, N and D; a demo loop with real glides.
- 8b8 Link: the minichord playing the 8-Bit 8asterd (three AY-3-8910 chips), on the board over USB or in its emulator. Notes go to the 8b8's MIDI port, each MPE voice on a lane of its own; settings go over its serial port. The 8b8 follows the minichord's temperament and master tuning (with MPE the bends carry the temperament and only the A is added). The harp can play the 8b8's drum kit, a string per drum; the knobs turn any 8b8 setting; the arpeggio can follow the chord; an 8b8 sound can be kept with each minichord preset; and a drum pattern on the 8b8 clocks the minichord's rhythm mode. With the 8b8's pinned-voices firmware, the minichord's four chord voices can be latched to four of the nine AY voices of their own (bass, tenor, alto, soprano under voice leading), each with its own envelope, legato and octave, drawn as four lines, beside the minichord's voice leading, cantus, slash voice and glide. A tracker shows the 8b8's nine channels from its chips' registers (read from the emulator directly, or with the 8b8's REGS command): a scope per channel rebuilt with the emulator's model of the chip, and rows of new notes, volumes, slides, notes let go, the drums by name, and each chip's noise and envelope, full screen if wanted. The minichord's settings are pushed before anything is borrowed and popped on leaving.
tools/8b8-params.pyregenerates8b8/params.jsfrom the 8b8'sgenerate.py. - Harmony chart: the harmonic box chart from the Chord & Scale Diagram Generator, live. The scale runs across the top one semitone per column, and each row is the chord built on one degree, triads or sevenths, in major and its modes, the minors, Phrygian dominant, harmonic major, Lydian dominant, altered, whole tone, the bebop dominant and Barry Harris's major and minor sixth-diminished scales (whose rows show the sixth chord and the diminished seventh taking turns, inversions and all). It follows the minichord's key signature, so the key change combo redraws it; the chord you play lights its row, and one from outside the key gets its own row with its function: a secondary dominant (V/vi), a chord borrowed from the parallel key (♭VI, iv), or the Neapolitan.
- The Minichord Arcade: the arcade's lobby, a lit marquee over the twenty games' cabinets, each with its screen, what it plays with and its high score, a ticker of the boards' leaders, and how to connect a minichord. Its share card is the marquee over all seven screens.
- Chord Invaders: the Practice Room's arcade game on a page of its own, for linking straight to. Any game can be opened directly the same way, as practice/?game=reshape, and on its own with &solo.
- Harp Command: Missile Command for the harp, on a page of its own. Twelve cannons stand along the bottom, one under each harp string, lowest on the left, and notes fall toward them; plucking the string that plays a note fires its cannon. The game sets the harp itself, climbing from chromatic with the names showing, to a major key's scale on the strings, scale degrees, minors and modes (the custom scale, on firmware that has it), and notes read off a small staff. Chord Invaders' cabinet, sounds, speeds, star notes and a how-to-play demo.
- Chord Snake: Snake for chord spelling, on a page of its own. Spelled notes lie on the board; the snake carries the ones it eats, and when some of them spell a chord (triads, then sevenths, diminished and augmented, then Barry Harris sixths), they glow and playing that chord on the buttons cashes them in. Walls, the snake's own tail and carrying too much cost a life. It steers on the harp played as a d-pad, in chromatic mode so each section plays a known note: on the standard strip, top to bottom, three sections up, two left, A, B, two right and three down; on the keymaster harp's four rows of three (a setting), the bottom row down, the top row up, 4 and 7 left, 6 and 9 right, 5 B and 8 A. The controller is drawn beside the board and lit as it's touched, with a setting for how loud the harp plays while steering. Arrow keys work too.
- Chord Asteroids: Asteroids for spelling chords, on a page of its own. Chord asteroids drift in toward the ship in the middle; playing a rock's chord on the buttons cracks it into its notes, each spelled as the chord's own (E7 into E, G♯, B and D), which scatter and turn back toward the ship, and plucking each note on the harp turns the ship and shoots it. A rock that reaches the ship costs a life, a string that plays no rock jams the gun, and clearing every note of a chord scores a bonus. Levels climb from triads on natural roots to Barry Harris sixths.
- Chord Stack: Tetris, where the blocks are notes, on a page of its own. The pieces are the seven tetrominoes, each block a note of the level's key, dealt from one of the key's chords so one can always be built. Move and rotate each as it falls (the harp as a d-pad: ◀ ▶ move, ▼ drops a row, A rotates, B drops it; a knob slides it; the arrow keys and space too). When a row holds all of a chord's notes, anywhere in it, they light up, and playing that chord clears them, scored by chord type as in Chord Invaders; the blocks above fall into the gaps. Notes side by side (three for a triad, four for a seventh, nothing else between) score double, a whole row of one chord five times, a row that spells nothing is just weight, and the stack reaching the top ends the game. Levels run from triads in C to every key with sevenths and diminished chords, the minichord set to each level's key. The chords follow the minichord: with Barry Harris mode on, the sixths and diminished sevenths its buttons make are what light up and what the pieces are dealt from, switching the moment the mode does, and a played chord clears any row holding all its notes (C6 and Am7 alike).
- Chord Breakout: Arkanoid with chords, on a page of its own. A wall of chord bricks, a ball, and a paddle steered with any of the minichord's knobs, as Arkanoid's was with a dial (the mouse and arrow keys work too). The ball cracks a brick it hits, and the brick only breaks if its chord is played before the ball comes back to the paddle; otherwise it heals. Levels climb through every chord type Chord Invaders drops, from major and minor to Barry Harris's sixths, each worth what it's worth there. Some bricks carry a power-up: broken, they rain their chord's tones (ARPEGGIO), the ball keeps going, and the paddle becomes a cannon, still steered by the knob, that shoots a tone when it's under it and its note is plucked on the harp. Others hold a capsule, marked with its sign, which falls when the brick breaks and is taken by catching it on the paddle: CRESCENDO (the paddle half as wide again), RITARDANDO (every ball at two thirds speed), DIVISI (the ball splits in three, and only the last one past costs a life) and FERMATA (the paddle catches the ball and holds it until a pluck, a click or ↑ lets it go). When only three bricks are left, or six and the ball has gone nine seconds without touching one, the CODA: the last bricks open, their chords playable without a hit, for a bonus that drains away. Every two levels, its own bonus round, CHORD CATCH: a chord is called and its notes fall among wrong ones, to catch on the paddle. The paddle is a solid block the size it's drawn, glow and all: a ball that clips its edge or that it's swung into is sent back up, never dead straight, with a little of the paddle's swing, a little quicker each time. The knobs need firmware 17's "knobs send MIDI" setting (address 238): CC 20, 21 and 22 on channel 16, which the game turns on while it plays.
- Fifths Defender: Tempest on the circle of fifths, on a page of its own. The twelve keys stand round the player in fifths, C at the top; enemies crawl in along the spokes. Turn a knob (or the mouse, or the arrow keys) to aim down a spoke, and play that key's chord to fire along it, so a key's neighbours on the circle are learnt by feel. Levels climb from the near keys to all twelve, then the relative minors, the dominant sevenths (G7 fires down the C spoke), and the key's note on the harp. In Chord Stack a knob is the transposition dial, sliding the falling piece through the columns.
- Chopper Rescue: a rescue flight that runs on decoding the radio, on a page of its own. The radio calls coordinates in theory ("survivors at vi in G"); the player decodes them into a chord and plays it, and the chopper flies from its base to where that chord lies, finding the survivors if the call was decoded right and nobody if not. Each call is an emergency (a fire, a bear, a yeti, a boat going down, hikers stranded) animated on the map, but the same trouble breaks out in one or two other places too, so only the radio's coordinates say which to fly to. Levels climb from C, with the radio saying the chord after a while as training, to nearby keys, every key, sevenths and V of V, and borrowed chords and whole routes read as progressions. Each call comes in through static over a station tone: tune the radio to it by ear (a knob turns the dial, the arrow keys nudge it, or pluck the station's note on the harp) and only then does the call come through. At the right place the survivors come up only when answered with their signal, the chord's notes plucked in order on the harp, root upward, and at the top level from the 3rd.
- Key Fleet: battleship on the chord buttons, on a page of its own. Their columns run in fifths, so a key's chords sit side by side: three neighbours in the major row are a key's IV, I and V, three in the minor row a minor key's iv, i and v. The enemy's ships are keys hidden on that chart; the player fires by playing chords, and hits only cripple a ship: it sinks when the player calls its key, by plucking its tonic on the harp (at the first levels), playing its cadence, V7 then I, or setting its key signature with the key change combo. A key called before all its chords are hit is sunk by deduction, for a bonus; a wrong call costs a torpedo. Later fleets bring ships in other theory shapes: ii–V–I cadences zigzagging one chord to a row, minor keys with their V7 under the v, whole keys (six chords across two rows), and dominant pairs and chains in the 7 row. Islands (rocks where no ship lies) give free clues, and at the puzzle levels the number of ship chords in each column and row is shown at the edges, Battleship-solitaire style. From level 3 the sea reaches one column past the plain buttons each side, B♭ and F♯, so F major, B major and their relatives sail too; the last levels widen it further along the line of fifths, past the plain buttons to the flat side (G♭ to B♭) and the sharp side (F♯ to G♯), reached with the modifier, so every key is there and enharmonic keys like C♯ and D♭ major are different places; the harp flips the modifier between sharpening and flattening. Torpedoes are limited, and a sink with no misses scores double.
- Chord Sweeper: a game of tension and release, on a page of its own. A minefield where each mine is a key's home, swept with a cursor steered on the harp (A sweeps, B flags) or the arrow keys. Each swept square shows a chord, and how far it is from the nearest mine is how many resolutions it is from that key's home: the V7 right beside it (G7 for C), V of V two away (D7), V of V of V three away (A7), calm beyond. The harder levels add the tritone substitutes (D♭7, A♭7, E♭7), the leading-tone diminished seventh and the bare tritone, which collapses two ways and needs its neighbours to say which. Sweeping plays the square's chord; on a mine, its key's chord defuses it, the release. The keys to find are shown beside the field, by name at the first levels and then as key signatures.
- Between the Frets: a quarter-tone ear game on a page of its own, in black-and-white polka dots. A note plays, then another: the same, a quarter-tone sharp or a quarter-tone flat? Answer on the chord buttons, any column (the major row sharp, the minor row in tune, the 7 row flat); then find the note in between with the modifier, which in this game means a quarter-tone. The game silences the minichord's speaker (its output amplifier, not the MIDI velocity) and makes every sound on the page, retuned; holding the key at C, a black-key chord can only come from the modifier, so C♯ means C and the modifier, sounded a quarter-tone up. As E and B have no black key above them, nor C and F below, it asks for quarter-sharps only on C, D, F, G and A and quarter-flats on D, E, G, A and B, setting the modifier's way for each. Levels run from notes to intervals, the neutral third and riffs where one note bends. On firmware 18 and up the minichord plays the quarter-tones itself: the game sets it to 24-EDO (temperament 11, where the modifier moves a note by a quarter-tone) and MPE, leaves its speaker on, and reads each quarter-tone from the bend on the chord's voices, so any letter can go either way.
- Sight Line: sight-reading on a page of its own. Notes and chords scroll right to left along a staff toward a playhead: a note is plucked on the harp and a chord (stacked on the staff) played on the buttons as it reaches the line, dead on for double, with a streak multiplier; a note that slips past costs a life. Levels run through the treble clef, the bass clef, ledger lines on a grand staff, sharps and flats, key signatures (where an F in G major is played F♯, the sharp only in the signature), chords, changing keys (a double bar and the new signature scroll in, and the minichord is set to the new key with the key change combo, as Chord Invaders asks), inversions (a chord with its 3rd or 5th in the bass, the minichord's voicing swung with a knob or the up and down arrows), both clefs, and public-domain tunes named once they're read. The Chord Asteroids ship now flies an orbit round the field, steered by the mod knob or the arrow keys, to dodge.
- Chord Hunt: Duck Hunt by ear, on a page of its own, and always relative. Each round opens with its key, the dog sniffing through the grass while a cadence plays and the sign goes up; then each duck: home sounds first, the tonic chord, then the duck's own chord as it rises out of the grass, voiced afresh each time so the top note gives nothing away. Name it against home and play it on the buttons to shoot it down; three shells a duck, a wrong chord spending one and saying what it was (THAT'S ii). A duck that gets away turns the sky pink, the dog laughs, and the answer is played, home then the duck. Ten ducks a round, six to nine of them to clear it, or the round costs a life and is flown again in a new key. Levels run from I, IV and V through the relative minor, every triad, minor keys, sevenths, borrowed chords, secondary dominants and inversions to flocks (progressions shot in order, the famous ones named) and migration, every duck from a key of its own. The minichord's key signature stays at C, so a sharp or flat root is its letter and the modifier, as in the other games; the modifier's way is set once for the key (sharp keys sharpen, flat keys flatten), which names no duck, and a level only deals keys whose chords all lean one way. A field guide along the grass lists the round's numerals and chords, or numerals only, or nothing, for more points. The harp is the duck call: a low string for home again, a high one for the duck. First-shot hits with no help build a pure ear multiplier up to ×4; golden ducks carry a chord from the next level up; the dog fetches power-ups, a tag with a chord to play (DRONE, BASS SCOPE, ARPEGGIO, RESOLVE, PLUMAGE, SLOW-MO, DA CAPO), each a way of listening; and its own bonus round, CLAY SHOOTING, is cadences: home, then two clays to shoot in order, named authentic, plagal, half or deceptive.
- Key Racer: Pole Position through the key, on a page of its own. A road in pseudo-3D, as the old racers drew it, with a row of chord signs across its three lanes every few seconds: the key's chords are fuel (drive through one for speed and a second on the clock), the rest are oil (drive through one and you spin), and an AHEAD board on the dash shows the next row in time to read it. The harp steers, its twelve strings laid across the road, low on the left, or a knob does, for a quarter more points. From the fourth circuit a gate only opens if its chord is played on the way in. Rival cars carry chords: play an in-key one and it pulls over, steer round one out of the key, and V then I is the turbo. GRAND PRIX is eight circuits, each a key centre (C Speedway, G Raceway, F Ring, D Circuit, B♭ Park, A Minor Rally, E Grand Prix, E♭ Mountain), then round again faster; each opens with qualifying, the key's seven chords played in order against the clock for a place on the grid, and finishes where the rivals still ahead say, with championship points; the pit stop every two circuits is the arcade's bonus round. ENDURANCE is Pole Position's long race against the clock round the circle of fifths, each checkpoint a key change: play the new key's I before crossing for the long extension, and just before it the pivot chords the two keys share score double. Numerals on the signs at B♭ Park, minor keys, sevenths, and chords borrowed from the minor as oil at the later circuits. The key signature stays at C and the modifier is set for each key's sharps or flats. Capsules on the road: SLIPSTREAM, ROLL CAGE, YELLOW FLAG and DA CAPO.
- Chord Chomp: the maze game played on both halves of the minichord, on a page of its own. The harp steers, read as a d-pad as in Chord Snake, and the dots are eaten as they always were, with nothing to get right or wrong; but a chord played on the buttons makes them sing (latched, it stays on till another, or the same again, is played; held only, a choice on the title screen, scores a quarter more), each dot the chord's next note, up two octaves and back down, so a corridor is an arpeggio and a corner taken on a new chord changes the harmony. The four ghosts wear chords of the maze's key as numerals (named at first). A power pellet turns blue only the ghost whose chord is on, for as long as it's on, and the other three keep chasing; ghosts caught in a cadence's order score a bonus (V then I perfect, IV or ii, V then I full, IV then I plagal, V then vi deceptive, anything then V half). The fruit is a key: twice a maze a key signature turns up below the ghosts' house, and set with the key change combo before it goes (or its home chord played, on firmware without the combo) the maze changes key, its colour and the ghosts' chords with it, keys farther round the circle of fifths scoring more. The combo takes both hands off the steering, so while a key is up a power pellet is the old game's, every ghost blue for the whole of it, whatever's held, and the key waits till it's over; a key that turns up with every pellet eaten puts one back. Levels move from I, IV, V and vi through the key's other chords, sevenths, secondary dominants and borrowed chords. Capsules: FERMATA, REST, DA CAPO. And once a game, unannounced, a key taken leaves a little minichord in the tunnel: eaten, it's a jam session, the ghosts dancing while their four chords are played as a progression (I – vi – IV – V), each catching its ghost and all four the biggest bonus. Its own sounds, a demo, and a share card.
- Chord Burger: the kitchen game played on the minichord, where a burger is a chord voicing, on a page of its own. Four plates, each burger's four ingredients (bun, patty, lettuce, bun) lying on the floors above it and each spelled with its note, for the minichord plays every chord in four voices: read from the plate up, a burger is its chord from the bass up, and in close position the two buns are the same note, the bass. The cook walks for as long as a way is held on the harp (or the arrow keys), and an ingredient walked across drops a floor, knocking down any below it, never changing their order, each landing on its plate at its own pitch. A full plate is served by playing its chord, voiced as stacked: a knob swings the minichord's inversion (address 37), another its spacing (38: close, drop 2, drop 3, drop 2 and 4), the chords voiced two octaves up so every drop has room; or, with hold on, the chord pressed again climbs an inversion a press (press again in hold, 324, firmware 57), the climb costing no more pepper than the first press; up to the open kitchens a serve is judged on the chord and its bass (a slash chord does as well as the knob), from them on the whole stack, note for note. Served hot it's worth more. The sour notes chase the cook wearing notes; the pepper is a chord, harmonising every sour note close by whose note is in it, and an ingredient dropped on them squashes them, those standing on it riding it down for a doubling bonus. The plates left to right are a progression of the kitchen's key, served in order a COMBO MEAL. Levels move from root position through the inversions, sevenths, drop voicings, orders (a ticket over each plate, its column out of order, put right with FLIP), stacks with two names (C6 is Am7/C) and plates read by ear. VOICING on the title screen: the knobs yours, or turned for you. Bonus food: SIDE ORDER, FERMATA, DA CAPO. Its own sounds, a demo, and a share card.
- Dominant Kong: the barrel game played on the minichord as a lesson in tension and release, on a page of its own. Kong, at the top of the sloping girders, is the dominant: every barrel he throws wears a dominant seventh (G7, in C), and rolling down it can be jumped (A on the harp) or resolved, the chord it resolves to played (C) to break it, deceptively (G7 to Am) for more; later barrels are secondary dominants, tritone substitutes (D♭7, resolving down a semitone) and backdoor dominants (B♭7, up a step). One rolled unresolved into the drum comes out a fireball, a diminished seventh put out by any chord a semitone above one of its notes. The way up is a chain of fifths home: home is the key's I at the top, each floor below a dominant away from the one above, and a locked ladder opens for the floor above's chord, so the whole climb plays B7 E7 A7 D7 G7 C; the first levels lock only the ladder home, each later one more. Then the lifts: a rising lift to jump on and off before it reaches the top, and a second lift that goes where the steering knob's turned (running down on its own without the knobs), while Kong's springs, dominant sevenths too, hop along the top and drop down the far side. And the rivets, eight of them the key's chords (triads, sevenths, a minor key's), each pulled by standing on it and playing it, all eight bringing Kong down. The player walks while a way's held on the harp; long falls, barrels, fireballs and Kong are fatal; the bonus counts down; the hammer (a piano's) breaks what it's swung at. LABELS on the title screen: by name, or by numeral for half as much again. Its own sounds, a demo, and a share card.
- Sus Bros.: the pipe game played on the minichord, where every pest is a suspended chord, on a page of its own. The old game's one move is two steps, a floor bumped from underneath flipping what's on it and then the finishing off, and that's a suspension: tension, then resolution. So the creepers are sus4s (the 4th falling to a 3rd), the flies sus2s (flipped only when they land), the crabs 7sus4s that take two bumps (the first resolving them halfway, to the dominant, the second flipping them, the dominant then resolving home), and the ice a diminished seventh, melted by a chord a semitone above any of its notes. A flipped pest sounds its suspension, the tension hanging, and the player's chord resolves it: the resolution's all it takes, on the minichord's own buttons. SUSPENSIONS on the title screen, for half as much again where the minichord can load its alternate layout's slots (and on the screen's): SUSPEND loads a sus layout while the game plays (major, minor and 7 as ever; sus4 on major and 7, sus2 on minor and 7, 7sus4 on major and minor, °7 on all three), and a pest's cleared by playing its suspension and then its resolution, the 4–3 played out by letting go of a button. A sus chord has no third, so either third resolves a creeper or a fly, and the one played decides where the music goes: the one the key has keeps it there (in C, Dsus4 to Dm), the other moves it to the nearest key that has it (Dsus4 to D, to G), every degree a different way round the circle of fifths. The pests stay the home key's chords, so away from home the same Dsus4 means something else. Everything scored away goes into a pot, times one more than the fifths from home, banked when the music gets home (a crab's dominant resolving to the home I takes it there from anywhere), lost with a life; a phase ended away waits a moment for its home chord. Left flipped too long a pest rights itself, faster; one down the bottom pipe comes back out at the top, faster again. Each one resolved sends out a coin, the key's scale a note at a time. The POW block, the screen wrapping round, falls that never hurt. Its own sounds, a demo, and a share card. The screen's minichord plays the alternate layout and its slots, as the instrument does.
- Time Pilot: the dogfight across the eras as a drummer's oldest exercise, keeping time when the click drops out, on a page of its own. The game turns on the minichord's harp drums (firmware 60), so its twelve strings are drum pads, and listens to their hits on MIDI channel 10, timed against the audio clock; the screen's pads and the number keys play too. Enemy planes spiral in to the gunsight, each on its beat, and a hit on the beat shoots one down (PERFECT, GOOD or OK by a fraction of the beat). Each sortie counts in, flies two bars of formation with the click, then the cloud bank: the click stops and the sky clouds over, with nothing on screen keeping the beat, for one bar up to eight; then the clouds part on every hit made in them and the drift, ahead or behind. The player's own steady offset from the click is measured and taken out, so it scores holding the time, not a constant latency. Eras are the levels: 1910 in quarters, 1940 on the backbeat, 1970 in eighths, 1982 and 2001 at a tempo the player taps in.
- Trading Fours: a drum battle, a versus fighter's health bars and a boxing game's roster, played on the minichord's harp drums, on a page of its own. The rival plays four bars, the player answers four on the pads, the time running on underneath without a gap; the answer is judged on the call's rhythm, not its exact drums: onsets on a sixteenth-note grid, low, middle and high drums, accents and how many hits, with the player's own steady offset taken out first. A close answer hurts the rival, a poor one the player. The rivals: Max Backbeat (rock, the studio kit), Dona Bossa (bossa nova, brushes), GL1TCH-9000 (clicks and cuts) and the boss, Ustad Teental, on tabla, a teental cycle to four bars, its calls in bols, ending in a tihai on sam. Their calls are drawn from the firmware's grooves (Ben Poilvé's minichord firmware, BSD-3) and fills of their own; on the minichord the player's pads sound in the rival's kit.
- The Practice Room (once called Spellbound): games that train you to find chords and notes on the minichord quickly, with answers timed. Read and play: Spell it, Numerals, On the staff (engraved in Bravura), Slash chords, Key detective, a mix, Chord Invaders, an arcade round in the style of the old space shooters: chords fall through a pixel starfield and each one played before it lands is shot down by the ship, with a level menu to start from, ★ chords worth five times as much that do no harm if missed, big banners for new levels, a readout of what the game heard, a game over screen with Play again, every game starting in C major, and a HOW TO PLAY demo, also run on its own as an attract mode, that teaches the minichord on a pixel model of it: the button for each chord type, the modifier, slash chords and the key change combo, with levels that add chord types, the modifier's roots, inversions, any slash chord and finally Barry Harris mode (switched on mid-round once the field is clear), getting faster as they go, a starting level to choose, and key bars from level 3: set that key signature with the key change combo before the bar lands and the chords after it are all plain buttons, and Seven chords, which sets the minichord's key signature and has you play the key's seven chords in order, with the signature engraved on the staff. The harp, in "Scale per chord" so the chord you hold sets the scale: Harp hunt, Play by number (tunes in scale degrees), Simon says (a melody that grows by a note each round) and Missing note, plus Chord scales, where the game writes a real scale into the custom scale on the chord you press and you name it. Scale rounds can be answered on the chord buttons: a mode by pressing the major chord whose scale has the same notes, anything else through a keypad lettered C to B. The chromatic harp (address 98): Follow the directions (up a fifth, down a minor third…), Pluck the chord and Build the scale. Alternate layout: Hidden layout (seven secret chords loaded onto the button combinations; find the one asked for by ear and press the spacebar), Odd one out (three chords of a family and an impostor), and Shades of the third (31-EDO's subminor, minor, neutral, major and supermajor triads, to put in order or find by ear). Voice leading: Reshape, where you hold a chord and pluck the harp to turn it into another (C to Am is the G up to A) while the game points the cantus at the voice that has to move, from one-voice moves through two and the bass to aiming the cantus yourself; Smooth moves, checked against the minichord's own voice-leading search, and Which voice moved?, two chords voiced by that search where only one voice moves, to name by ear. Mystery settings: Scale detective, Transpose detective, Temperament taster and Tune up, which turns the minichord into a plain tone in the waveform you pick, with no vibrato, tremolo or effects, so the only beating is the tuning. Scales come in four levels, everyday to exotic (phrygian dominant, Hungarian minor, the Neapolitans, altered, Persian, enigmatic and more). Every game but Temperament taster runs the minichord in equal temperament, and each round sets what it needs (harp mode, chromatic mode, MPE, voice leading, slash voice, the modifier, Barry Harris mode) by itself; all of it goes back when you leave the game that needed it, or at "Put my settings back". Every answer says how to press it on your minichord, and every game works without one through pickers and the piano. A round answered right first time moves on by itself; after a miss the game waits for Next, so there's time to read the answer. Right answers ring a soft chime, with a lighter one for each right step of a path, scale or chord; wrong ones flash the card red with two soft low notes, and a Sounds button turns the sounds off. Every answer, once found or shown, lights up on a piano keyboard (a chord from its root, a slash chord over its bass, a scale to its octave, a note among its scale or chord), and Key detective writes each chord's numeral under it after a wrong guess or the answer. A found scale shows how it's built (its degrees, its whole and half steps, and its notes on the root), and so does a chord you missed first. A pill beside the game's name shows which way the modifier goes, pulses when the game changes it, and says when a question needs it. Every note in the chromatic harp games is spelled the way its prompt spells it. The Key setting can also pick a new key each time and set it on the minichord, so the key's notes are all plain buttons. Solfège is something to play, like scale degrees: Play by solfège plucks tunes from do re mi on the key, and Harp Command has a solfège level after its scale degrees. While a game runs, a double tap on the modifier flips it between sharp and flat (the player's own double tap goes back after), and the arcade games' title screens can be run from the chord buttons: a column's major button starts that level, its minor button sets the speed, and its 7 button switches game. Every arcade game can go full screen, from the button in the field's corner or F. An optional CRT look (scanlines, glow, rounded dark corners, a faint roll) is on the title screens' options; a game over screen left alone goes back to the title loop; and games played with beginner mode on stay off the high-score board. Full screen is a cabinet: the game's screen at 4:3 in CRT, in a bezel under a lit marquee with side art (filling the window where a browser can't go full screen, as on an iPhone). On graphics that can't keep up with the cabinet at a big screen's size, it goes plain by itself (black all round, the screen square and flat, no CRT) and remembers that screen; FULL SCREEN in the arcade's settings chooses AUTO, CABINET or PLAIN. Every two levels a bonus round takes over for twenty seconds, one of five mini-games (Tune it, tuning a note to A 440 by ear; Missing note; Odd one out; Key detective; Simon says) with only points to win, and the game carries on after. Each keeps a high-score board, shown in the title loop after the rules and entered with three initials at game over; scores count only when a minichord was connected and played, go to a shared board (the arcade-scores app on the flask-stack, reached through Tailscale Funnel) and to the browser's own, which stands in when the shared one can't be reached. The arcade games open like real cabinets: the title, then the rules rolling up the screen, then the demo, round again until a chord, a pluck, a key or a click brings up the options. The options are a list, one line to each: its name, its value between arrows (a tap steps it on, the left arrow back, or the arrow keys) and what it scores, the game's under the score they make and the setup's after, with a line underneath saying what the value chosen means; the settings button shows the same list, with the arcade's own after it. Taking an aid away scores more where a game has one to spare: Key Fleet's TORPEDOES (fewer, for up to half as much again; it has no speed), Fifths Defender's CIRCLE bare but for C, Between the Frets' REPLAYS cut to one or none, Chord Snake's and Chord Stack's CHORD GLOW off, Chord Stack's NEXT PIECE hidden, and Sight Line's TIMING tight. A beginner mode keeps the minichord on screen and lights what to press: the chord buttons, the modifier and a slash's bass, and in the harp games the string to pluck, drawn as the standard strip or the keymaster grid.
- String quartet: the four chord voices as a string quartet, lowest to the cello, then viola, second and first violin, each drawn on the platform with the string it would play on lit and a moving bow. Arco, pizzicato, tremolo, sul ponticello and con sordino; six dynamics; two seatings; a hall; the cello an octave down; parts kept in their ranges. Each voice glides on its own bow with MPE. Below the platform an open score writes the four parts as they play, viola in alto clef and cello in bass, in the minichord's key signature, and carries them off to the left; the minichord's MPE, voice leading, glide, temperament, slash voice and cantus can be set from the page.
- Looper: a multitrack looper. It records the minichord's sound over USB audio and its MIDI at the same time, to a metronome with a count-in, its beat shown large (bar, beat, a dot per beat, a count-down to a punch in). The first take sets the loop, rounded to whole bars; later takes punch in at once, on the beat, the bar or the loop, and at the loop's end play on, keep overdubbing (each pass a layer) or record on into the next track. Clips move, trim, copy, split and repeat on a timeline snapped to the grid, and their notes edit in a piano roll (moved, quantized, transposed). A track plays its takes' sound, or their MIDI through the browser's piano, the minichord or any MIDI device. Takes are placed by the time they were heard, so they land on the beat: MIDI by its timestamps, the sound by the input's latency, measured by calibrating. Songs are kept in the browser; the song or the loop goes out as a WAV mix, a WAV per track or a MIDI file (MPE, so the temperaments survive), and the whole project as a file to open elsewhere. The minichord's double tap works it from the instrument (firmware 37 on: double tap control 256, value 7, set with one button), each step placed where the second tap landed; a foot controller works it too, with control changes 85 to 90, as the minichord's own looper.
- Vocoder: loops of speech (Harvard sentences read by a woman or a man, recorded up to 9 kHz so the consonants carry, a sentence to a bar of 4/4 at 80 BPM, in loops of one, two, four and eight bars, the sentence being spoken written under them) played into the minichord over USB audio, with its vocoder switched on from the page: how much, what it shapes (the chords, the harp or both) and how much of the voice's hiss comes through, a chord sound made for it (held, bright, the effects that smear words off) or the preset's own, and the voice heard beside it or not. The page finds the minichord's speaker and sends the voice there, shows the bar and beat, and draws the voice in the vocoder's sixteen bands as the minichord hears it. Everything is borrowed and given back, USB audio included; with USB audio set to 2 it offers to turn the speaker on. Needs the advanced firmware's vocoder, version 34 or later.
- Phone: a song playing on the phone (any app) into the minichord over USB, and the minichord playing along with it. Recipes switch on what the advanced firmware's phone follower does (firmware 52): the pump (the kick ducks the chords), an auto-wah on the hi-hats, rhythm mode locked to the song's tempo and beat with its clock out, the held chord struck on every kick, the vocoder, and each kick out as MIDI note 36. The DJ box (firmware 59) puts the song itself through a filter (low pass one way, high pass the other, on a slider, the mod knob or a hand over the harp), an echo in time with the beat thrown by a held button or a tap and hold of the modifier, and a tape stop. And the harp plays the song: a second of it grabbed onto the strings, each at its own pitch, and the held chord strummed on the beat. A dark strip shows what the minichord hears: a lamp on every kick, the tempo from its clock, the two followers and the harp's strings. Everything is borrowed and given back, USB audio and rhythm mode included.
- Choir: each voice of the chord sung by its own singer, from recorded choirs or synthesized ones, with the minichord's MPE output, voice leading, glide and temperament switched from the page, a pitch trace, the last eight chords in closed score with parallel fifths and octaves marked, a voice-motion readout that names any parallels, an MPE MIDI recorder, a demo of the minichord's own voicings with voice leading off and on, and slash chords: on firmware 13, "slash voice" (bass, tenor, alto or soprano, counted up from the bottom) and "re-voice", with the singing voice's strip marked and each slash drawn on the trace; on older firmware, "slash replaces"; on firmware 14, "cantus", the voice the harp sets. It keeps its own chant-book look, with the Lab's ivory and ebony as its second look.
Layout
core/minichord.js: the shared connection to the minichord. It reads the chord port over Web MIDI with MPE zones and per-voice bends, so every voice has an exact pitch, and reads the parameter dump over sysex for the key, temperament and MPE settings. Pages listen forvoices,chord,device,statusandharpevents;harpreports each plucked string, from the harp port or the harp channels in single port mode. Achordevent waits for any glide to finish, since the minichord sends each new note first and then bends the voice home, so views always see the chord as it lands.core/theory.js: pitch-class sets in any equal division: prime forms, Forte numbers, interval vectors, symmetry, transposition and inversion, and chord names spelled for the key, the smoothest voice leading between two chords, Sethares's roughness, and pure ratios and beat rates.core/temperaments.js: the minichord's temperaments as whole-cent offsets, generated fromfirmware/generator/temperaments.pyon the firmware'sadvancedbranch, so a view can tune any chord in any of them, and helpers that pick the minichord's exact MPE pitches when it sends them.core/sound.js: a small sampled piano for views that play something themselves, with a synthesized fallback.core/music.cssandcore/fonts/: subsets of Steinberg's Bravura for music: the treble and bass clefs, whole and black noteheads and accidentals for engraved staves (lab-music.woff2), and the text accidentals ♭ ♮ ♯ 𝄫 𝄪 (lab-accidentals.woff2, from Bravura Text), whichcore/lab.cssputs first in every font stack so chord symbols get real music signs. Both are under the SIL Open Font License and renamed as its Reserved Font Name requires; the licence is incore/fonts/OFL-lab-music.txt.core/lab.css: the shared look, a chalkboard in dark mode and a whiteboard in light.- One folder per view.
samples/: sound files, the piano for the ear trainer and the recorded choirs, with their sources and licenses insamples/README.md.
Requirements
- Chrome, Edge or Opera on a computer or Android. Safari and iOS browsers have no Web MIDI.
- Allow MIDI access, including system-exclusive messages, so the views can read the key and temperament.
- For MPE, key reporting and the temperaments, the unofficial advanced firmware. Every view has test chords that work without a minichord.
Running it locally
The views are ES modules, which browsers won't load from a plain file. Serve the folder:
python3 -m http.server 8000
then visit http://localhost:8000/.
How the code is laid out
The Practice Room and the arcade games play on one page, practice/index.html (each game's own page
opens it with ?game=<name>&solo). Its code is plain scripts, loaded in order and sharing one scope:
practice/boot.jsbrings in the Lab's core modules (core/) and hands them to the scriptspractice/games.js: the Practice Room's own gamespractice/virtual.js: a minichord without a minichord, its chord buttons following the firmware's own rules (slash chords, and the grace that keeps C to C7 from passing through Cmaj7), heard by the Lab as a real one is;practice/keyboard.jsplays it from the computer keyboard, andpractice/touch.js(withtouch.css) from a touch screen: the chord buttons, the modifier, and the harp's strings (or, an option, an octave of a piano's keys playing them), a d-pad or a knob as each game needs, on by itself on a phone (and put away by itself when a minichord is plugged in). There the game plays in the phone's cabinet (cabinet.js): the game's screen with the minichord under it, or held sideways either side of it, chords on the left and the harp standing on the rightarcade/: the arcade. One file per game inarcade/games/;controller.js(the harp as a d-pad),cabinet.js(title loop, beginner mode, full screen),kit.js(menus, demos, settings, high scores),sounds.js(the shared cabinet sounds; each game's own are inarcade/games/<game>-sounds.js, loaded after it) andscreen.js(the pixel canvas every game draws on)practice/room.js: the Practice Room itself (rounds, answers, settings, connecting), which runs last and starts whatever the page opened on
Order matters: a script can use what an earlier one declared as soon as it runs, and what a later one
declared only from inside a function. tests/ checks it all, headless: cd tests && npm install && npm test.
node tools/weigh.js says what each arcade game's own page downloads before it can play, raw and
gzipped, against the budget a phone's page should keep to (--all lists every file).
License
Copyright © 2026 Greg Miller / The Key & Cable Company.
Licensed under the GNU General Public License v3.0. You can use, study, share and modify it. If you distribute it or a modified version, you have to make the source available under the same licence.
Bundled assets keep their own licences: the fonts in core/fonts/ are under the SIL Open Font License 1.1 (see the OFL-*.txt files beside them), and the sound samples in samples/ are under the Creative Commons licences listed in samples/README.md.
