Text Chord Player — Manual

What it does

Type a chord progression and play a simple backing track to sing along to, right in the browser. Choose an accompaniment pattern, tempo and meter; a score is generated to match, and a cursor follows it as it plays. Click a note in the score or drag the slider to start from anywhere. You do not enter a melody or specific accompaniment notes — just chords and a few settings. The sound is piano only (switching instruments is a possible future paid feature). Everything runs in your browser; nothing you enter is uploaded or stored. The piano sounds are served from this site too, so playback makes no third-party requests.

How to use it

  1. Open the Text Chord Player tool.
  2. Type chords into the "Chord progression" box (e.g. D A/C# Bm7 Asus4). Space-separated means one chord per bar; put | between bars to place several chords in one bar. A newline starts a new line in the score. To change chord mid-bar, add :beats like | Am:2 D:2 |.
  3. Set "Tempo", "Meter" and "Accompaniment pattern". Changing any of them rebuilds the score and backing track.
  4. Press "Play" above the score to hear the accompaniment and watch the cursor move. Press again to pause; "Stop" returns to the start. Use the "Volume" slider to adjust playback volume.
  5. Click a note in the score, or drag the seek bar, to play from that point (the first play takes a few seconds to load the piano sound).
  6. Settings are reflected in the URL. "Copy link" copies the current URL to the clipboard; "Share" hands the URL and text to your device's share sheet (shown only where the Web Share API is available). Share or bookmark that URL to reopen with the same settings.

Spec

Chord progression syntax

  • Separators: a newline starts a new score line. If a line contains |, bars are split on | and a bar may hold several space-separated chords. Without |, each space-separated chord is its own bar.
  • Beats within a bar: append :beats to a chord to set how many beats it takes in its bar (decimals allowed, e.g. | C:3 G:1 | is C for 3 beats, G for 1). Chords without :beats split the remainder of the bar evenly (e.g. | C:2 G Am | is C for 2 beats, G and Am for 1 each). If every chord has :beats and the total doesn't fill the bar, the last chord is adjusted.
  • Bar limit: 64 bars. Anything beyond is ignored.
  • Root: AG (upper or lower case). #/ raises a semitone, b/ lowers one, x is a double sharp.
  • Slash chords: write a bass note after /, e.g. C/G. The named bass note sounds in the left-hand (low) register and the right-hand chord stays a compact one-octave voicing (e.g. A/C# is a left-hand C# plus C# E A in the right hand).
  • No melody or rhythm input — the accompaniment shape comes entirely from the "Accompaniment pattern" choice.

Accompaniment patterns

There are two patterns, "Pattern 1" and "Pattern 2". The right hand is the same in both: a full chord on every beat (chord tones folded into one octave, C4–B4). Only the left-hand rhythm differs. The left hand always plays an octave — the bass note (the chord root, or the note after / for a slash chord) plus the note one octave below it, roughly C2–B3.

Pattern 1 (struck at each chord and bar)

The left-hand octave is restruck every time the chord changes and every time the bar changes, then held for that chord. Even if the bass note (root) is the same as before, it is played again at the chord or bar boundary — it is never tied across. This is the plainest backing, good as a guide for singing or as a bed under a vocal.

  • Example (4/4, C | C | F | G7): the left hand strikes the octave at the start of every bar and holds it for that bar. Bars 1 and 2 are both "C", but bar 2 is struck again on its downbeat. The right hand plays four quarter-note chords in every bar.

Pattern 2 (anticipated bass at chord changes)

Same as Pattern 1 (struck at each chord and bar, then held), except that on the last eighth note (off-beat) of every chord it restrikes the same octave, pushing into the downbeat of the next chord (usually the next bar). This gives a "daa—dat, daa—dat" forward lean, with more drive than Pattern 1. It happens even when the next chord's bass note is unchanged (progressions like C | C | G7 | C).

  • Example (4/4, C | F | G7 | C): in each bar the left hand holds the downbeat octave for three and a half beats, hits again on the "and" of beat 4, and carries straight into the next bar's bass note. Only the very last chord of the progression has no off-beat — with nothing to push into, it is just struck on the downbeat and held.
  • If a chord occupies fewer than two beats (short allocations like | C:1 F:1 C:1 G:1 |), there is no room for the off-beat, so that chord behaves like Pattern 1.

Supported chord types

Add one of these after the root (common notation variants are also accepted).

Type Examples
Major C / CM / Cmaj
Minor Cm / Cmin / C-
7th C7
Major 7th Cmaj7 / CM7 /
Minor 7th Cm7 / Cmin7 / C-7
6th / m6 C6 / Cm6
sus2 / sus4 Csus2 / Csus4 / Csus
dim / dim7 / m7♭5 Cdim / Cdim7 / Cm7b5 / /
aug Caug / C+
9ths C9 / Cmaj9 / Cm9 / Cadd9
11th / 13th C11 / C13
Altered tensions C7b9 / C7#9 / C7#5 / C7b5 / C7#11
Power chord C5

If a chord can't be understood, that bar is skipped, the rest still plays, and the unrecognized chords are listed on screen.

Input ranges

Field Range
Tempo (BPM) 30–300 (out-of-range is clamped; non-numeric falls back to 90)
Meter choose 4/4 / 3/4 / 6/8
Accompaniment pattern Pattern 1 (struck at each chord and bar) / Pattern 2 (anticipated bass); see "Accompaniment patterns"
Volume 0–100 (default 50); 50 is unity gain, 100 is roughly 2×

URL parameters

The current settings are reflected in the URL; opening that URL restores them.

Parameter Format Description
c chord progression string (may contain |, newlines and :beats) e.g. ?c=D A/C# Bm7 Asus4
t integer BPM clamped to 30–300; 90 if invalid
m 4/4 / 3/4 / 6/8 otherwise 4/4
p 1 (Pattern 1) / 2 (Pattern 2) otherwise 1
v integer 0–100 (volume) clamped; 50 if invalid

If c is absent, the default progression (a simple "Twinkle, Twinkle, Little Star" accompaniment: C | F C | G7 C | G7 C | / C G7 | C G7 | C G7 | C G7 | / C | F C | G7 C | G7 C | on three lines) is used. No title or song name is ever put in the URL.

Privacy

  • Input and settings are processed only in your browser; nothing is sent to a server.
  • The piano sound (soundfont) is served from /assets/soundfont/ on abstiro.com. Playback makes no requests to third-party domains.
  • The URL is updated with history.replaceState, so it does not clutter your browser history.
  • "Copy link" and "Share" send nothing to a server: the former writes the current URL to the clipboard, the latter passes it to the device share sheet (navigator.share).

Notes

  • Each chord is voiced as a left-hand bass octave (C2–B3: the bass note plus the note an octave below) and a right-hand chord (chord tones folded into one octave, C4–B4). The bass note is the chord root, or the named bass for a slash chord. Even with tensions, the right-hand shape never leaps wildly up or down. The score writes the two hands on a piano grand staff: right hand in treble clef, left hand in bass clef. The right hand always plays a full chord per beat; only the left hand changes with the pattern (see "Accompaniment patterns").
  • The score shows the chosen accompaniment pattern as notes, not a melody. Use it as a stand-in for a seek bar to see where playback is.
  • Volume changes apply in real time while playing (the score and backing track are not rebuilt).