← All posts

Common RTTTL syntax mistakes (and how to fix them)

· rtttl · syntax · debugging

If you hand-edit RTTTL strings, you'll trip on the same quirks over and over. Here are the seven most common mistakes I see in user submissions, and what they should look like instead.

RTTTL is a tiny format, but it's a fiddly one. When people copy songs from blog posts or write them by hand, the same mistakes show up repeatedly. Here's the seven that come up most often when I look at user submissions for our song library.

1. Forgetting the name segment

Wrong: d=4,o=5,b=120:c,e,g,c6

Right: mytune:d=4,o=5,b=120:c,e,g,c6

A valid RTTTL string has three colon-separated sections: name, defaults, notes. Without the name, most configurators reject the string with a generic "parse error" that doesn't tell you what went wrong. Add any name (up to 10 ASCII chars).

2. Spaces between notes

Wrong: mytune:d=4,o=5,b=120:c, e, g, c6

Right: mytune:d=4,o=5,b=120:c,e,g,c6

Some parsers tolerate the spaces, some don't. Bluejay's configurator is strict. Strip the spaces.

3. Mixed octave numbering

Wrong: mytune:d=4,o=5,b=120:c,e3,g7,c6 (e3 below the playable range, gets clamped to e4)

Right: pick an octave range that fits inside 4–7 and stay there. Use o=5 as default and write octave numbers only when you depart from the default.

4. Dotted notation in the wrong place

Wrong: mytune:d=4,o=5,b=120:c.4,e,g

Right: mytune:d=4,o=5,b=120:4c.,e,g

The duration comes first, then the note, then the dot. Some configurators accept c.4 and some don't. Always write [duration][note][.][octave] for safety.

5. Forgetting the p for rests

Wrong: trying to insert a pause with 0 or - or r

Right: use p. For example, mytune:d=4,o=5,b=120:c,e,p,g plays C, E, rest, G.

6. Using sharp notation that doesn't exist

Wrong: cs5 (C-sharp using "s" notation, from some non-standard tools)

Right: c#5 (RTTTL uses #)

There's no flat notation in RTTTL — only sharps. If your source uses flats (Db, Eb, Gb, Ab, Bb), translate them to enharmonic sharps (C#, D#, F#, G#, A#).

7. Notes outside the playable range

Wrong: mytune:d=4,o=5,b=120:c8,d8,e8 (octave 8 is above the playable top)

Right: drop down an octave. Bluejay clamps anything above C7 (or thereabouts depending on the build) and you'll hear the song an octave lower than intended in the high parts.

The lower limit is around C4. Anything below clamps up. If you hear weird "wrong octave" jumps in your tune, this is almost certainly why.

Debugging strategy

If your RTTTL string isn't parsing, try this:

  1. Strip it down. Take just the first 3 notes and see if those parse. If yes, add notes back in batches until you find the offending one.
  2. Compare to a known-good example. Copy one from our library, swap your notes into the same structure.
  3. Use the converter. Paste your RTTTL into the textarea of a converted motor output. The token-strip view above the textarea will highlight each note — anything weird shows up visually.

What configurators do silently

Some configurators silently fix small errors instead of telling you what's wrong:

  • esc-configurator trims trailing whitespace and lowercases note letters. Forgiving.
  • BLHeli_Suite rejects almost anything with a parse error and gives no detail. Strict.
  • AM32 Configurator behaves like esc-configurator. Forgiving.

If you're hand-writing RTTTL for distribution to other pilots, write to BLHeli_Suite's strictness — that way it'll work everywhere.

← All posts