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
- Open the Text Chord Player tool.
- 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:beatslike| Am:2 D:2 |. - Set "Tempo", "Meter" and "Accompaniment pattern". Changing any of them rebuilds the score and backing track.
- 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.
- 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).
- 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
:beatsto 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:beatssplit 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:beatsand the total doesn't fill the bar, the last chord is adjusted. - Bar limit: 64 bars. Anything beyond is ignored.
- Root:
A–G(upper or lower case).#/♯raises a semitone,b/♭lowers one,xis 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# plusC# E Ain 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 / CΔ |
| Minor 7th | Cm7 / Cmin7 / C-7 |
| 6th / m6 | C6 / Cm6 |
| sus2 / sus4 | Csus2 / Csus4 / Csus |
| dim / dim7 / m7♭5 | Cdim / Cdim7 / Cm7b5 / C° / Cø |
| 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/onabstiro.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).