Ring Tone Text Transfer Language — a compact plain‑text format from the feature‑phone era, once responsible for those impressive, popular, and occasionally rather annoying ringtones — is used here to drive a piezo‑buzzer emulator in your browser. Below is a small collection of my own miniatures, ranging from Bach to early arcade themes. You can try your own in the playbox, and a short syntax guide follows for anyone curious about how these strings work.
I use the format to give my reTerminal’s e‑paper display — running ESPHome — something more interesting to do than emit a single, dutiful beep. These little fragments make it play brief, occasionally irritating tunes as hourly chimes or when events occur, such as the front door opening.
My collection
Bach, Fuga d‑moll
fuga-d:d=32,o=6,b=100:p,a,a5,g5,g,a,a5,f5,f,a,a5,e5,e,a,a5,d5,d,a,a5,c#5,c#,a,a5,d5,d,a,a5,e5,e,a,a5,f5,f,a,a5,a4,a5,a,a5,b4,b5,a,a5,c#5,c#,a,a5,d5,d,a,a5,c#5,c#,a,a5,d5,d,a,a5,e5,e,a,a5,f5,f,p;
This version of the exposition from Bach’s Fugue in D minor reimagines the subject through interlocking contrary-motion octaves: the alternating intervals remain instantly recognizable, translated into a rhythmic pseudo-polyphony tailored for embedded performance.
Bach, Inventio 8
inventio_8:d=16,o=5,b=160:p,f,p,a,p,f,p,c6,p,a,p,f6,p,e6,d6,c6,d6,c6,a#,a,a#,a,g,8f,p;
The opening bars of Bach’s Invention No. 8, pared down to their core melodic shape and delivered with the bright insistence typical of piezo buzzers. I use this miniature as my hourly chime — a polite, slightly anachronistic reminder of the passing time.
Bach, Toccata d‑moll
toccata-d:d=16,o=6,b=180:p,a,g,8a,8p,g,f,e,d,8c#,8p,4d,4p,a5,g5,8a5,8p,8e5,8f5.,32p,8c#5,4d5.,p;
The opening of Bach’s D‑minor Toccata, distilled to a brisk contour and delivered with the bright insistence typical of small embedded speakers.
Beep ascending
ascending:d=16,o=6,b=220:p,e,c,e,g,a#;
A brisk little arpeggio in C7, stepping upward with the earnest determination of a device trying its very best to start the day. If used as a startup tune, it gives an ESPHome‑driven buzzer a touch more personality than a solitary beep ever could.
Beep descending
descending:d=16,o=6,b=220:p,g,a#,g,e,c;
The inverse arpeggio in C7, politely walking itself back down the scale. If used as a shutdown cue, it provides a neat auditory full‑stop that feels more intentional than a perfunctory click or chirp.
Beep once
beep-once:d=16,o=6,b=180:p,32d#,e;
A single, tidy chirp — just enough to confirm a button press without pretending to be musical. If used for left and right navigation buttons, it’s the minimal acknowledgement a piezo buzzer can give while still sounding intentional.
Beep twice
beep-twice:d=16,o=6,b=180:p,32d#,e,p,32d#,e;
Two quick chirps in succession, typically used as a refresh‑button confirmation. It’s the same gesture as Beep Once, merely repeated, giving the device a faint sense of hierarchy in its button responses.
Pac‑Man
pacman:d=4,o=5,b=112:p,32b,32p,32b6,32p,32f#6,32p,32d#6,32p,32b6,32f#6,16p,16d#6,16p,32c6,32p,32c7,32p,32g6,32p,32e6,32p,32c7,32g6,16p,16e6,16p,32b,32p,32b6,32p,32f#6,32p,32d#6,32p,32b6,32f#6,16p,16d#6,16p,32d#6,32e6,32f6,32p,32f6,32f#6,32g6,32p,32g6,32g#6,32a6,32p,32b6.,p;
The unmistakable opening motif from Pac‑Man, rendered in compact form and unapologetically rooted in its 8‑bit origins. It announces itself each time my front door opens — a small burst of arcade cheerfulness at the threshold.
Pengo
Pengo:d=4,o=5,b=180:p,16e6,16p,16d6,16p,16e6,16p,16b,16p,16g,16p,16b,16p,8e,8p,16e6,16p,16d6,16p,16e6,16p,16b,16p,16g,16p,16b,16p,8e,8p,16e6,16p,16f#6,16p,16g6,16p,32f#6,32p,16g6,8p,16e6,16p,16f#6,16p,32e6,32p,16f#6,8p,16d6,16p,16e6,16p,16c6,16p,16g,16p,16c6,16p,16e6,16p,p;
The jaunty theme from Pengo, distilled into a brisk, buzzer‑friendly outline. Simple, bright, and unmistakably shaped by early arcade sound.
Small Ben
small_ben:d=4,o=5,b=360:f,a,g,2c,p,f,g,a,2f,p,a,g,f,2c,p,c,g,a,2f,p,16f,16g,16a,16c6,16e6,16c6,16a,16g,16f,p;
Small Ben is a compact RTTTL rendering of the Big Ben chimes — pared down, briskly paced, and with the unmistakable timbre of a piezo buzzer. It preserves the familiar Westminster contour while embracing the slightly metallic character that such hardware inevitably adds.
Snoopy
snoopy:d=4,o=5,b=220:8d,8d#,8e,c6,8e,c6,8e,2c6,8p,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,c6,p;
The lively opening strain of The Entertainer, known to me chiefly from Radarsoft’s Snoopy on the Commodore 64. A bright, compact fragment of ragtime refracted through early home‑computer sound.
Try it yourself
Paste or write your own RTTTL string below and give it a play. A brief disclaimer: experimenting with this may prove unexpectedly addictive and could test the patience of nearby housemates.
The syntax
An RTTTL string packs a whole melody into one line of plain text: a name, a few default settings, then the notes themselves.
name:d=4,o=5,b=125:notes
│ │ │
│ │ └─ tempo (BPM)
│ └────── default octave
└────────── default note length (4 = quarter)
note = [length]letter[#][octave][.]
1/4/8/16/32 → length
c d e f g a b → notes
p → rest (instead of a note)
# → sharp (flat not supported)
7 → octave
. → dotted ×1.5
length/octave omitted → uses the d / o defaults
Examples: 8g#6 = eighth G# octave 6
4c = quarter C (default octave)
8c6. = dotted eighth C6
16p = short rest
For a detailed explanation of the format as implemented in ESPHome, see the RTTTL component documentation.