ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
키와 진행을 선택해 4파트를 쓰면 SATB 작곡 규칙에 맞춰 채점해 주는 인터랙티브 보이스리딩 트레이너
An interactive SATB voice-leading trainer: pick a key and a progression, write the four parts on a grand staff, and have them marked against the rules of four-part writing.
교육HTMLGitHub @ShaneDoyleDev온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Open it here — it runs in the browser, with nothing to install.
An interactive SATB (soprano/alto/tenor/bass) voice-leading trainer. Pick a key and a chord progression, place each voice's notes on the staff, and get checked against the standard rules of four-part writing — the same way a theory instructor would mark it.README 전문 보기 ↗Open it here — it runs in the browser, with nothing to install.
An interactive SATB (soprano/alto/tenor/bass) voice-leading trainer. Pick a key and a chord progression, place each voice's notes on the staff, and get checked against the standard rules of four-part writing — the same way a theory instructor would mark it.
Pick the key from a circle of fifths. Majors on the outer ring with their accidental counts, relative minors inside; click a wedge to choose the key and the mode in one move, and the hub draws the signature as notation — a treble clef with its accidentals, not a list of letters. The six o'clock wedge carries the enharmonic pair — click it again to flip F♯/G♭ or D♯m/E♭m. Minor automatically raises the leading tone in V and vii°, no manual accidentals needed.
Build a progression. Chain together any of the seven diatonic triads — I ii iii IV V vi vii° in major, i ii° III iv V VI vii° in minor — in whatever order you want, up to eight chords. Each numeral shows its own spelling in the current key before you add it. Sevenths beside them turns the same seven buttons into seventh chords, spelling and all: V⁷, ii⁷, viiø⁷ in major, and in minor the raised leading tone gives a proper vii°⁷ and V⁷. Triads and sevenths mix freely in one progression.
Choose the time signature. Time signature, under the progression and above the note lengths: 4/4 or 3/4: four crotchets to the bar, or three. The signature is drawn on both staves after the key signature, each figure filling half the staff as an engraved one does, and a bar line runs through both staves wherever a bar is full. The builder shows the same bars as you add chords, and says how many there are and by how much the last falls short — six crotchets in 4/4 are a bar and a half, in 3/4 two bars exactly. Changing the time signature re-bars what is already written and moves nothing: it is the same progression and the same notes, so they stay, and so does the undo history. It is saved with the session and written into Export, bars and all. Play makes the metre heard: the first beat of each bar is at full strength and the others are brought down under it, with the third beat of a 4/4 bar — the lesser accent — sitting between the two, so a bar of four goes strong, weak, medium, weak and a bar of three goes strong, weak, weak; a chord that starts between the beats is quieter than any beat, and one on a semiquaver's place quieter again. The downbeat is not pushed up over the rest, since four voices at full strength are already as loud as the samples go. A chord sounded on its own, from its chip or while choosing among Assist's answers, is not part of a bar and is played at full strength as before. One rule in the checklist reads the beat: a cadential six-four has to stand on a stronger beat than the dominant it resolves to, so the same two chords can be right in one time signature and wrong in the other. It reads where a chord starts in its bar, not which chord in the row it is, so lengths move it. Nothing else in the checklist reads the beat yet.
Give chords lengths, and rests. A chord need not last a beat. Under the progression, Length chooses a note value — whole, half, quarter, eighth or sixteenth — and Dotted makes it half as long again. Whatever is added next takes that length: a chord, from the numerals, or a rest, from Add rest. Each chord in the builder carries its length as a small note beneath it, and pressing that note gives the chord the length currently chosen, so a progression can be re-timed without being rebuilt. All four voices of a chord share its length — this is block-chord writing, where the harmony has a rhythm and the parts move together — and a rest silences all four. On the staff a whole note is a hollow head with no stem, a half a hollow head on a stem, a quarter a black one, and eighths and sixteenths carry one flag and two when they stand alone. Those that fall in the same beat are beamed together instead, which is how the eye is shown where the beats are: a pair of eighths under one beam, four sixteenths under two, a dotted eighth and a sixteenth under one with a stub of a second on the sixteenth, pointing at the note it belongs with. A rest breaks a beam and so does the end of the beat — except that in 4/4 plain eighths are beamed across the two beats of a half-bar, four under one beam, or three beside a rest. They are never beamed across the middle of the bar, which the eye needs to find, and not where there are sixteenths among them, which read more easily a beat at a time; 3/4 is beamed by the beat. One beam needs its stems to point one way, and stems here otherwise belong to single notes and point by their own height, so within a beam the notes of a chord that are on one staff share a stem, as a pianist's hand would, and each staff is beamed on its own — above the treble and below the bass, where the stems have somewhere to run that the narrow space between the staves does not give them. The beam leans the way the notes do, by no more than a space, and stops short of the tone letters above and the numerals below, the stems simply being shorter for it and the beam lying flat along the limit, having no room left to lean. A short stem is better than a beam driven through the other staff's notes, so it turns and goes between the staves only where staying out would leave a stem with nothing to it at all. A dot stands in a space, the one above where the note is on a line. Rests are drawn on both staves. The shapes are Bravura's, like the clefs. Longer notes are given more room than shorter ones, though not in proportion, and Play holds each chord for as long as it is written and is silent for as long as a rest is, the tempo being the quarter note's.
Bars fill by length. The builder draws a bar line where one is full and says so in words: 2 bars, the last 1 beat short. A chord that is longer than what is left of its bar is tied over the bar line: it is written as a note up to the line tied to a note after it, the two joined by a curve on each of its four notes, and it sounds once, for its whole length. A half note that starts on the fourth beat of a bar of four is a quarter tied to a quarter; a whole note in 3/4 is a dotted half tied to a quarter. Where a length is not one note it is written as several: from the start of a bar the biggest that fits goes first, and coming up to a bar line the small ones go first, so that each finishes a beat and the last lands squarely on one — five sixteenths before the line are a sixteenth and then a quarter, not the reverse. A tie curves over the upper notes on a staff and under the lower ones, and a tied-to note does not repeat its accidental. The numeral and the tone letters stand under the first part only, since it is one chord, and a press anywhere on either part is a press on that chord. The builder marks a tied chord with a dashed edge and the words , and says how many there are. A rest that runs over a bar line is simply divided there. Ties are made for you at bar lines and only there: there is no way yet to tie two chords together by hand, or to write a length that is not one of the note values. Two lengths are left out because they fit nowhere: a dotted whole note is six beats, more than any bar here holds, and a dotted sixteenth needs a thirty-second to finish the beat it starts. Lengths and rests are the progression's and not the staff's: changing them moves nothing you have written, they are saved with the session and written into bar by bar, and Undo on the staff does not touch them. The checklist and Assist read the chords exactly as before — a rest takes no place among them, so the move from the chord before a rest to the chord after it is still checked.
Let a voice move inside its chord. A chord can still be written as it always has been, four notes each the length of the chord, but it does not have to be. Pick a note value in the Note row under the staff — Whole, Half, Quarter, Eighth or 16th, and Dotted to make it half as long again, just as under the progression — and press the staff where a note of that value should go. A faded preview follows the pointer, snapped to that value's steps inside whichever chord you are over; it carries no label, and which voice it will go to is the one described below. The value stays armed until you press it again or press Esc, and with the arrow keys the cursor steps by it inside a chord and Enter writes.
In a chord that is already whole — four voices — the note goes to the voice whose note is sounding there and is nearest in pitch to where you are pointing, and is written over whatever that voice had in its time: a longer note is cut around it, a shorter one is taken over, and what is left at either end stays as it was, written as tied notes where it is not itself one note value. In a chord that is still being written, a note never goes over one that sounds. It joins a voice that is resting at that moment if it is within a fifth of that voice's own notes, and otherwise it is a new voice, which rests until its first note and again after its last, drawn as rests on its staff. So a chord can be written voice by voice and in time: a soprano of eighths, then a bass of two half notes under it, with nothing else decided. A voice taken down to nothing but rests is removed. A press with a value as long as the chord writes the chord's own notes as it always did. Chord lengths are set under the progression and the staff never changes them, so a value longer than the chord is refused: with Half armed over a quarter chord the preview turns red, a press writes nothing, and the note row then says why and where the length is changed. The same goes for making a selected note longer than there is time for after it. Dotted with nothing armed arms the last value you chose, dotted.
Any note can still be cut by hand. Press a note and it is selected — it wears a ring. Choosing a value in the Note row gives it that length as well as arming the value, and Dotted dots it. Made shorter, the note keeps the length you chose and what it gave up becomes a rest after it, which you can then write notes into. Made longer, it takes the time from what comes after it, a rest first. Join left and Join right take the selected note out and give its time to the neighbour on that side; a double click on one note of several does the same, where on a whole note it takes the note off as before. Whatever is done, a voice's notes fill its chord exactly, so the chord's length never changes and the other voices are not disturbed. With the arrow keys, left and right now stop at each note inside a chord as well as at each chord, and the note under the cursor is the one selected.
Generate a progression. Generate progression, beside Sevenths, writes one for you in the key you have chosen, and pressing it again deals another. It is built from functional harmony, which sorts the chords of a key by what they do rather than what they are: tonic chords are home (I, and vi and iii standing in for it), predominant chords lean away from it (ii and IV), and dominant chords make the tension home resolves (V, and vii°, which is V without its root). Each chord in the builder now says which it is. A progression opens on the tonic and closes on a dominant and the tonic — an authentic cadence — and what lies between is a walk over the moves that are really made, weighted by how often: tonic to predominant to dominant is the ordinary journey, a tonic may be prolonged by its substitutes, and V to vi, the deceptive cadence, is allowed because it is the one dominant resolution that is the point. What is never made is going back, a dominant to a predominant, which undoes what it has just done; nor does any chord stand twice running, or any one chord crowd the rest. Walks that break the grammar are thrown away and drawn again. Four to eight chords; in minor the ii° is weighted down against the iv, being the lesser predominant there. With Sevenths on, the dominant is always a V⁷ and the chord on the leading tone always a seventh, the predominants and tonic substitutes take one more often than not, and the tonic stays a plain triad, being the chord nothing is left owing. Sixteen hundred generated across major and minor, triads and sevenths broke none of those rules, and 240 of them were each written out with Assist without it once finding nothing that fits.
It picks up where you left off. A refresh, a closed tab or a phone that decides on its own to reload the page costs you nothing. The working state is kept in the browser: the key and the progression, every note, the ticks above the staff, and the tempo. Come back and the staff is as you left it, halfway through the chord you were on. The checklist is not kept — it is a reading of the staff rather than a part of it, and it comes back the moment you press Check, rather than being restored as a verdict that might no longer describe what is written. Nothing leaves the browser, and nothing is kept but the one progression in front of you. What comes back is checked before it is trusted, in every particular — the key exists, the chords are degrees, no chord holds five voices, no pitch holds three notes — and a session that cannot answer for itself is dropped whole rather than picked over. If the browser will not store anything at all — a private window, site data turned off, a full disk — the app carries on exactly as before and simply starts fresh each time.
Undo and redo. Undo, in the staff toolbar or with Ctrl or ⌘ + Z, takes back the last thing you did on the staff, and the one before that, as far back as you like (two hundred steps). Redo, beside it or with Ctrl or ⌘ + Shift + Z (Ctrl + Y also works), puts back what you took back. Whatever changed the staff is a step: a note placed, dragged or taken off, a chord cleared, Clear notes, a tick above the staff, an answer from Assist. A drag is one step however far the note travels, and the voices go back with the notes, so a chord comes back labelled as it was. The steps ahead of you last until the next thing you do on the staff, which makes them a different history, and they are dropped — the usual rule, so going back three steps and then writing something new cannot be redone. The checklist is a reading of the staff rather than part of it, so going back or forward clears it, as any edit does. Changing the key or the progression starts a different piece and both histories go with the old one; coming back to the same piece keeps them. Neither is saved with the session, so a reload begins with nothing to undo or redo.
Nothing sounds as you write. Placing a note, dragging one and clearing the staff are all silent. A chord is heard when you ask for it — Play, or its chip in the readout — on a sampled grand piano.
Inversions are read off the staff. Any tone of the chord may stand in the bass, and whichever one does is figured under the numeral as you write: a triad takes nothing, a 6 or a 6/4; a seventh chord takes 7, 6/5, 4/3 or 4/2. The figure appears only once the chord is right — until then the numeral reads as it was chosen, and the checklist says what is missing. Two rules come with the freedom. An inverted seventh chord has a voice for each of its four tones and none to spare, so the fifth may no longer be dropped from one. And a six-four has conditions: its bass is held under the chord either side of it — the pedal and cadential kinds — or approached and left by step, which is the passing kind and its neighbouring cousin. A bass that leaps into or out of a six-four is a caution naming the three, and the ▶ beside it plays the bass through those three chords so you can hear what it is doing. Nothing is said until the next chord is there to decide it, and a six-four over a held bass is only called cadential when it is the tonic standing in front of the dominant. That one is made to resolve, which is what it is for. Above its bass — the fifth of the tonic, which is the root of the dominant — stand the tonic's root, a fourth up, and its third, a sixth up. Neither is a tone of the dominant, and each falls by step onto one that is: the fourth onto the dominant's third (C to B over G), the sixth onto its fifth (E to D). A voice that rises instead, or leaps, is an error naming the voice and where it should have gone, with a ▶ to hear it; a voice that simply holds its note is already told it is no tone of the chord it is in, and is not told twice. It is the same with a V⁷, where the sixth falling to the fifth is still the rule and rising to the seventh is not. And it has to stand on the stronger beat of the two. A cadential six-four leans on the dominant it resolves to, and a thing that leans comes first and heavier; on the weaker beat it is heard the other way about, as the dominant arriving early with the tonic dangling off the front of it. In 4/4 that means the first or third beat, resolving on the second or fourth; in 3/4 the first or second, since the second beat of a bar of three outweighs the third. One that stands on a weak beat and resolves on a stronger — the second onto the third in four, or the last beat of any bar onto the first of the next — is an error that names both beats; one that is rightly placed is told which beat it is on. Any other six-four over a held bass is described as exactly that and is not asked to resolve this way. A 4/3 is exempt: a seventh chord in second inversion is an ordinary chord, dissonant already and resolving like the rest.
Wrong notes are marked red when you check. A note that is none of the chord's tones, and that nothing about its line excuses, draws in red — but only once the checklist has run, and the checklist names it too: which voice, which note, and what the chord's tones actually are. A note outside the chord that the checklist has named as a passing tone, a suspension or any other figure stays in ordinary ink. Until then the staff is plain notation and the marking is yours to do. Editing anything clears the report and the red with it.
Tick the tones off yourself. Each chord's three tones are listed above its column on the staff, and nothing marks them for you. Each chord's tones sit on a ground of their own, so a row of them reads as one group to a chord rather than a line of letters. The row is measured rather than guessed at — E♭ is half again as wide as G, and four letters carrying accidentals want room four bare ones do not — so the letters stand apart, the ground closes around them with nothing hanging over its edge, and a real gutter is left before the next chord. Where a progression cannot have all of that at the larger letter, every chord in it takes the smaller one together, rather than some printing bigger than others. Press a letter and it lights: that tone is spoken for. Press it again and a dot appears over it: that is the one you are doubling. A third press clears it. It is the note you make on paper before writing a chord out, and keeping it by hand is the point — the app will not tell you what you have played until you ask it to check. Clear notes empties the staff back to the beginning — the ticks go with the notes. Clearing a single chord from its chip clears that chord's ticks only and leaves the frontier where it is; a new key, a new progression or a rerolled exercise starts a fresh sheet.
The opening chord fixes the voices. Once the first chord is right — four notes, every one of them a tone of the chord, its root and third both there — they are read top down as Soprano, Alto, Tenor and Bass, and those four voices hold for the rest of the progression. Nothing is drawn beside the chord to say so; the readout under the staff names each note's voice, which is where you look. Every later chord takes its voices when it first fills up, by the assignment that moves each line least, and then keeps them. So a note dragged past another inside a later chord stays the voice it was — a real crossing, named as one — while the opening chord always re-reads top down, since it is the chord the others are fixed to. Lose a note and that chord unfixes until it is whole again. Every check below follows these voices rather than the pitch order, so a crossing is plain in the readout too.
Hear it back. Play sits in the staff toolbar, there throughout, so a part-written progression can be heard as you go. It walks the chords one at a time — whatever voices are in each sounding together, the column lit and the chord's own notes warming to the accent colour over a quarter of a second and cooling back when it passes, an empty chord passing as a silent beat. Tempo next to it sets how long each chord is held, from 40 to 168 to the beat — a chord a second at the default 60. Moving it mid-playback takes effect from the next chord, and during playback a note is cut to the beat rather than ringing its full two and a half seconds, so the chords stay distinct when the tempo is fast. Press Play again to stop. A single chord can be heard on its own from the readout: click its chip and that chord's voices sound together, the chip and its column lit while they ring. Only a chord that is right can be clicked — three notes or four, every one a tone of the chord — so a chip for a chord still being built sits there inert. Pressing Play takes over from a chip, and the chips light in turn as it walks the progression.
Checking draws what it found. When the checklist catches a parallel fifth or octave, a red line strokes itself along each of the two voices that moved in lockstep, from the one chord to the next — so the fault is on the staff, not just described. A run with nothing to fix draws the opposite: all four voices in green, chord to chord the length of the progression, so the shape of the lines just written is there to be looked at — which is the thing four-part writing is really teaching the eye. Either way the lines belong to the report, so editing any note takes them away with it.
Export it to be read. Export in the staff toolbar copies the whole exercise as plain text: the key and its signature, the progression, every voice of every chord by name, and whatever the checklist last said, with a closing line asking what the voice leading is like. It is meant to be pasted into a conversation with Claude, or anything else that can read music and be asked for a second opinion — so it is written to be read rather than parsed, and a chord that is not yet four voices says so instead of pretending. If the browser refuses the clipboard the text appears in a box under the toolbar to be copied by hand.
Up to four voices to a chord. Each chord takes at most four notes, SATB, and three is enough for it to count as written. Once it has them the ghost preview stops offering a fifth and a note dragged in from elsewhere is turned away. A cross sits under any chord you have written a note into — one note is enough — and clicking it empties that chord, so a voicing can be restarted without clearing the whole staff. It sits below the chord's spelling rather than above the staff, where a stray click would land on a soprano pitch and take the chord with it. Cleared notes drift up and fade rather than blinking out, whether they go one chord at a time or all at once.
On a phone. Under 600px the app changes shape. Every control comes up to a finger's size — the tempo slider grows a real hit area rather than a 3px rail, and the circle of fifths reaches out through the panel's padding so the inner ring of relative minors can be hit. The staff keeps a half-step at 8–12 pixels, takes as much height as the screen allows, and pans sideways instead of shrinking. A finger drawn across it pans the staff and a finger drawn up or down scrolls the page, as it would anywhere else. The trade is dragging: once the browser takes a moving finger the gesture is gone, so by touch a note is placed and removed rather than dragged — hold it to take it off and tap where it should go instead. Touch gets its own gestures, since it has no hover to build on: press and the preview appears straight away, above your fingertip and named, so you can see the pitch before you commit it; lift to place it; hold a note to take it off, where a mouse double-clicks. Clearing a chord moves to a ✕ on its chip in the readout, which needs no hover at all — the one on the staff stays for the mouse.
Place notes directly on the staff. Hover near the correct system and a faded preview snaps to the nearest line or space; click to drop it in. Drag a placed note to move it — to another pitch or another chord — and double-click it to take it off. Dragging one voice onto another's pitch writes a unison: the two share a notehead with a stem each way, as a chorale prints it. A third voice cannot join them, and clicking an occupied position still means take hold of what is there, so a unison is made by moving a voice rather than by placing one twice. The cursor turns to a hand over a note so you can see what is draggable.
The staff is as wide as the music. Every chord gets the same room — 108 units of canvas, the spacing a short progression has always had — so a long progression makes a longer staff rather than a more crowded one. Where the window cannot show all of it without printing a half-step smaller than about seven and a half pixels, the staff pans sideways instead of squeezing: four chords look exactly as they always have, eight scroll. It was the squeezing that ran one chord's tone letters into the next one's.
Real notation. Engraved treble and bass clefs and the correct key signature for whichever key you picked. The half of the system you are hovering decides the staff: the treble covers C4 up to C6, the bass E2 up to C4, so between them every SATB pitch has a home and none of them piles up ledger lines. Middle C belongs to both — written below the treble staff or above the bass, at its own height in each, the way a widely spaced grand staff actually reads.
Check whenever you like. Nothing is withheld. Check is there from the first note you write, and it reads whatever is on the staff — a chord with two of its four notes, a third chord written before the second, a progression with a hole in the middle. Any chord takes a note in any order; there is no frontier to earn and no chord that waits for the one before it. It runs the checklist from the opening chord to the last chord you have put a note in. A chord that is part written is held only to what can already be seen: a note that is no tone of the chord is flagged however few notes there are, but a missing third is not a fault in a chord still being written, so it says what the chord still wants and that it was checked for stray notes only, and does not call the voices by name. A complete chord — four voices, or three where the only tone left out is the fifth — gets the whole checklist, and the moves between two complete chords are checked as before. What could not be looked at is said so, under So far: Chords 4 and 5 are not written yet, or Chord 2 has nothing written yet, so the moves into and out of it are not checked. A clean report on part of a progression reads All clear so far rather than All clear, so it cannot be mistaken for a clean report on all of it. Editing any note clears the last report. A chord full of wrong notes still counts as written: being wrong is what the checklist is for. A later chord written in three parts is allowed — it simply says so, since spacing, crossing and the parallel checks all want a fourth voice. Even the opening chord is checked on its own: its doubling, spacing and crossing are better known before anything is written against it. Voices come from the opening chord as described above — the report marks what to fix in red, what to watch in amber, and what is merely worth noting in green:
Assist. Beside Check, Assist offers valid voicings for the next chord, lets you hear and compare them, and writes the one you choose. The next chord is the first one that has not got all its notes: an empty chord is voiced whole, and one that is half written is completed around the notes already in it. Everything on the staff stays exactly where it is — chords already written are not replaced, right or wrong, and the notes in a half-written chord are built around rather than over. (To start a chord again, clear it and ask.)
There is usually more than one valid answer, and which is best depends on what you want the line to do, so none is written until you say. Pressing Assist shows the first answer on the staff in the accent colour — a proposal, not yet written — and sounds it. Next and Previous step through the rest, round and round, each sounding as you reach it; Hear plays the one you are on after the chord before it, which is how the choice will actually be heard. The line beside the buttons says which answer of how many it is, its notes, its position, and anything the checklist would say about it: Answer 2 of 37 for chord 2: F2 A3 C4 F4 — root position. Nothing to watch. It also says where an answer leads nowhere — No valid chord can follow it. Use this writes the one showing, as a single step that Undo takes back whole. Cancel, or Esc, leaves the staff as it was, and so does anything you do on the staff yourself: an offer is withdrawn the moment the staff changes under it. On a narrow screen the staff pans to the chord on offer.
The answers come in an order meant to be stepped through. The one the search itself would choose is first. After it come the rest that draw no caution, and then those that do; and within each, an answer whose soprano and bass have not been shown yet comes before another inner voicing of a pair that has, so the first few are different chords to the ear rather than the same chord with its alto moved. An empty opening chord has a couple of hundred valid voicings and a chord hemmed in on both sides may have three; a chord with only one says it is the only one.
An answer is valid or it is not offered. Valid means it adds no error that was not already there: every candidate is put on the staff and run past the same checklist that marks you, with the chords on either side included, so what is offered leads from the chord before into the chord after if that has been written. If there is none — the notes in the chord cannot be completed without a fault, or one of them is no tone of the chord, or the chord after cannot be reached from any voicing — it says so in words beside the buttons and changes nothing, and the message stays until you change something. When every chord has its notes the button goes away. After an answer is written it is checked, like anything else written here.
It says which voice it means. When the checklist reports a crossing, an overlap or a unison, it is talking about which line each note belongs to — and the staff does not otherwise say, since a voice is a line rather than a position in the chord. So for as long as that report stands, the notes it is about wear their voice's letter in red beside them. It is the one thing the eye cannot work out for itself, and the whole complaint in those findings is that the lines and the pitch order have come apart.
Hear the fault. A sentence about parallel octaves is a sentence; the two voices sounded on their own, collapsing into one colour as they move, is the thing itself. Every finding that knows which notes it is about carries a small play button. For something between two chords — a parallel, an overlap, a leading tone or a seventh that does not resolve — it plays those voices alone, the chord before and then the chord after; then, where the app can write that chord without the fault, a breath and the same move again with it corrected, so the difference is heard rather than read. For something inside one chord — a gap too wide, a crossing, a unison — it plays the chord and then the two voices in question. The column lights as it goes, so the eye follows the ear.
And then it reads your lines. Everything in the checklist is vertical: two voices at a moment, or two moments of a pair. None of it follows one voice from end to end, so a voicing can keep every rule and still be four parts of nothing — an alto that never leaves a third, a bass standing on one note, a soprano with no shape to it. So when the whole progression is written and checked, a second list appears under the checklist: Lines, one block a voice, saying what each one actually did. Soprano climbs to C5 at chord 3 and comes away from it: one high point, reached and left. That is what gives a line its shape. Alto repeats C4 three times running. Tenor never leaps — 2 steps, 1 third and 1 held across the whole progression. That is what an inner voice is for. Each of those is something you can count off the staff yourself, followed by why it matters; there are no scores, no grades and no adjectives, and a voice with nothing worth saying about it is passed over in silence — which is what keeps the rest worth reading. None of it counts towards the verdict: All clear goes on meaning no rule broken. Each observation carries a ▶ that plays that voice alone, all the way through, which is the quickest way to find out whether you wrote a line or wrote filler. It waits for four chords, and a chord written in three voices leaves a gap in every line, so nothing is said about any of them.
Keyboard or choral. The same four parts can be written for two different sets of hands. In keyboard style the three upper voices are one right-hand chord over a left-hand bass, so they are as compact as the chord allows: no tone of the chord could be slipped in between soprano and alto, or between alto and tenor. The gap from tenor down to the bass is free. In choral style the voices are a choir's, and open position — the soprano more than an octave over the tenor — is as ordinary as close. From the second chord on, a Style list under the checklist says which you have written, reading each chord as one of three things: tight (nothing could fit between the upper voices), close but loose (within an octave, but a chord tone has been stepped over — C4–E4–C5 is exactly an octave wide and still skips the G) or open. Keyboard style means every chord is tight. Close, but not tight names the chords that step over a tone. Choral style means every chord is open, and Mixed spacing names which chords are open. It tells them apart by spacing and nothing else, so it says nothing about range, which the app deliberately does not check. Tight spacing is both keyboard style and one kind of choral writing, so it says so rather than claiming to know what you meant. Mixed is not a fault — choral writing moves between close and open freely — but it does mean no single right hand could play the open chords. Like the lines it is an observation: it counts towards no verdict and holds nothing shut, and chords written in three voices are left out, having no tenor to measure to.
The checklist reports in prose, with the parallels it finds also drawn on the staff.
Triads and seventh chords on any of the seven degrees, mixed as you like. All seven diatonic degrees are available; in minor, V and vii° raise the leading tone and the rest stay diatonic to the natural minor scale. A progression is built from plain degrees; which inversion each chord is written in is decided on the staff rather than chosen beforehand, and read back as a figure under the numeral.
The harmony is always the one you chose. A voice may move inside a chord and may leave its tones, and what it does is read against the chord you named: the app does not work out a harmony from the notes, so it cannot be used to write free counterpoint and be told what the chords are. Figuration is diatonic, since there is no way to write an accidental. A suspension resolves inside the chord it is held into; one that waits for a further change of chord to resolve is not read. Ties are placed by hand between a note and the same pitch after it, and automatically where a note crosses a bar line.
Single self-contained HTML file. No build step, no external services, and nothing stored anywhere but your own browser — just open it in a browser, or visit the published page, which GitHub Pages serves straight from index.html on main: a push is a deploy. Everything is drawn as SVG: staff lines, stems, ledger lines and the brace are generated in code, while the clefs, accidentals and noteheads are real engraved outlines. All the theory (scales, chord spelling, the rule checks) is plain JavaScript with no external libraries.
The clefs, accidentals (sharp, flat, natural, double sharp), noteheads (black, half and whole), flags, rests, the augmentation dot and the time-signature figures were extracted from Bravura, Steinberg's reference SMuFL font, and inlined as SVG path data — about 11KB for the twenty-one glyphs — so the page loads no font and makes no network request, but the notation is the genuine engraved shapes. Bravura is © Steinberg Media Technologies GmbH, licensed under the SIL Open Font License 1.1.
The note sounds are five samples from the Salamander Grand Piano by Alexander Holm (CC-BY 3.0) — C2, C3, C4, C5 and C6, trimmed to their first 2.4 seconds at MP3 frame boundaries and embedded as base64, about 84KB in total. A pitch plays whichever sample is nearest, resampled by no more than six semitones, so it still sounds like a piano rather than a tape effect. Like the notation, this means no network request at runtime.
Tie in the same row ties the selected note to the same pitch where it leaves off — the next note of its voice inside the chord, or the note on that pitch that begins the next chord — so that it is held and not struck again. It is drawn as a curve between the two, the second does not repeat its accidental, and Play sounds the note once for the length of both. The button is there only while there is such a note to tie to, and a tie whose notes have been moved apart is simply gone. This is how a common tone is held across a change of chord, and how a suspension is tied over.
Once a voice moves, the notes on its staff no longer share a rhythm, so in that chord they are stemmed apart the way a chorale prints them: the upper voice's stems up and the lower voice's down, each voice's eighths and sixteenths beamed to each other by the beat, and its ties curving the way its stems point. A staff where nothing moves is drawn exactly as before. A note that starts inside a chord takes its own place across the staff, a little closer to its neighbours than a chord is, and the staff is set out again around it. Play sounds every note when it begins and for as long as it lasts, and a chord's chip plays what its voices do inside it.
The checklist reads a chord by one note in each voice, the first of its notes that is a tone of the chord, and reads the move to the next chord from the last of them, which is where the voice has got to by then. Around that it reads the moving voice itself: each step it takes is held to the same rules about melodic intervals as a move between chords, any two voices that arrive on new notes at the same moment inside a chord are read for parallel fifths and octaves, the notes either side of a change of chord are read again where they are not the chords' own, and the voices are read for crossing at every moment.
Notes outside the chord. A note that is no tone of its chord is not thereby wrong. The harmony is the one you chose, so the app knows the note is outside it without having to guess; what it asks is whether the line carries it, which is a matter of how the voice reaches the note and how it leaves. A figure it recognises is named in the checklist and passed, drawn in ordinary ink, with a ▶ that plays the notes either side of it:
A passing tone is reached by step and left by step in the same direction. One that falls on a stronger part of the beat than the note it goes to is called an accented passing tone. Several can follow one another, filling a fourth.
A neighbour is a step away from a note and straight back to it, upper or lower.
A double neighbour is the two together: a step to one side of a note, across to the other side, and back.
A suspension is a note that belonged to the chord before, held over into this one where it does not, and then resolved down by step to a note that does. It is named for what it stands above the bass and what it resolves to there: 4–3, 7–6, 9–8, or 2–3 when it is the bass that is held under a second. Held over and resolved up it is a retardation. A suspension has manners, and each is a caution where it is not kept: it stands on a stronger place than its resolution, since it is the note that leans; it is prepared by a note at least as long as itself; and the note it resolves to is kept out of the other voices until it gets there, the bass apart.
An anticipation is the note the next chord is going to give the voice, sounded before the chord arrives. It may be tied over. It is a light note, and draws a caution on a stronger place than the note it anticipates.
An appoggiatura is leapt to and resolved by step, on a stronger place than its resolution: it leans as a suspension does, without having been prepared. The same shape on the weaker place is named an incomplete neighbour.
An escape tone is a step away from a note, left by a leap the other way.
A pedal is a voice that stays where it is while the harmony moves off its note and comes back: the same pitch throughout the chord, a tone of a chord before it and of the chord after. It is the one figure that needs no cutting, since the whole of the voice's part in the chord is the held note — write the bass's C under a V between two tonic chords and it is read as a pedal and not as a wrong note, in the bass or in an upper voice. The other three voices are then the chord, and are not asked for a fifth they have no voice for.
A note outside the chord that fits none of them is an error and is drawn in red, and the checklist says how it was reached and how it was left, so that it can be seen why nothing excuses it. A pedal apart, a voice has to touch the chord somewhere in it: a voice whose every note in a chord is outside it is marked wrong as before, so a suspension has to resolve inside the chord it is held into. Where the last chord you have written ends on a note outside it and the next chord is not there yet, nothing is said against it until there is something to read it by. The same goes for a chord that has not got its four voices: a note outside it is noted as one that will be read as a figure once all four are written, not marked wrong, and a voice is not read across the rests it comes in after. Notes outside the chord take the key signature like any others; there is no way to write an accidental, so in minor the raised sixth degree of the melodic scale is not available as a passing tone.
The first answer is the best by the search's own lights: the one that moves least from the chord before, keeps the upper voices near each other, sits where each voice usually sits, leaves the fifth in rather than out, and stands on its root — the plainest right answer is the one to hand somebody who is stuck, so an inversion has to earn its place by saving a good deal of movement and a six-four has to earn a great deal more. It holds back on the two faults it cannot yet see — a six-four, which is judged by what stands after it, and a diminished leap, which is judged by whether the next note steps back inside — and takes either only when nothing plainer will do. It avoids cautions as well as errors where it can, and it looks ahead: it first tries the chords that follow, the smoothest voicing of each, backing out the moment one would draw an error or a caution it did not have, so the chord it gives you is the first of a path that is clean to the end, and where there is none it puts up with one caution and then two. Where the chords after it have been written already they are not searched, only met. A failed search is remembered, so a press does not pay for it twice. Failing that it looks one chord ahead, so it will not hand you something legal that nothing can follow — nor something whose only continuation the checklist would then tut at, such as a six-four approached by a leap. A bass that stands in octaves with the soprano on one chord is the usual cause, since both then have to move to the next chord together; the search sees that coming and writes the chord before it differently.