Skip to content

Latest commit

 

History

History
161 lines (135 loc) · 5.33 KB

README.md

File metadata and controls

161 lines (135 loc) · 5.33 KB

RTTTL Player

Beschreibung

RTTTL steht für Ringing Tones Text Transfer Language und ist ein relativ altes und primitives, von Nokia entwickeltes, Dateiformat für kurze Musik Melodien, in erster Linie Handy Klingeltöne.

Motiviert durch ein Geburtstagsgeschenk, dass eine "Happy Birthday"-Melodie piepsen sollte, habe ich vor einiger Zeit dieses Klingeltonformat für den Atmel Mikrocontroller implementiert. Damit ist es möglich auf einem Atmel mit einem gewöhnlichen Buzzer oder anderem Lautsprecher, sehr einfach Musik abzuspielen. Die Melodien haben diverse Einschränkungen (z.B. kann immer nur ein Ton gleichzeitig gespielt werden, d.h. keine Akkorde, etc.), dafür ist das Format aber sehr kompakt. So ist es etwa möglich zehn Weihnachtslieder in nur knapp 2 Kilobyte Flash Speicher unterzubringen.

Benutzt habe ich das ganze wie gesagt für ein Geburtstagsgeschenk für meine Cousine, die damals 22 Jahre alt wurde und für einen Weihnachtsstern (siehe Videos). Der "22-Piepser" war übrigens meine erste selbst geätzte Platine (Tonertransfermethode).

Fotos

Weihnachtsstern:

22:

22 ätzen:

Schaltpläne

22:

22

Weihnachtsstern:

Stern

Software

Die Software besteht aus zwei Teilen. Ein kleines Perl Skript, dass die RTTTL Klingeltöne in ein noch platzsparenderes Binärformat umwandelt und den Interpreter, der auf dem Mikrocontroller ausgeführt wird und auf diesem das Binärformat interpretiert und den Lautsprecher entsprechend anspricht.

Ich bin mir fast sicher, dass in der Software noch diverse Bugs vorhanden sind. Das ganze war mehr ein "Quick and Dirty" Projekt. Für mich hat es aber gut funktioniert. Getestet habe ich auf einem Atmel ATMega 88 und auf einem ATTiny 45 Mikrocontroller. Es sollte die gcc Compileroption "-Os" aktiviert sein und keine weitere Optimierung, da sonst eventuell von mir benutzte Festkommaoperationen (die Atmels haben keine FPU!) "wegoptimiert" werden (keine Ahnung warum, ist mir aber schon passiert!). Falls trotzdem Probleme auftreten (man hört nichts oder nur sehr kurze abgehackte Töne), dann sollte man versuchen die Festkommaoperationen durch Gleitkommaoperationen zu ersetzen (das wird die Codegröße aber vermutlich um mehrere Kilobyte (!!!) erhöhen, da die komplette Gleitkommaarithmetik per Software vom Compiler emuliert werden muss!).

Download:

Output:

$ perl rtttl2hex.pl

Generating frequency tables ...

Generating 15 melodies...

  • Jingle Bells (254 byte)
  • Silent Nights (155 byte)
  • Alle Jahre wieder (202 byte)
  • Ihr Kinderlein kommet (162 byte)
  • Little Drummer Boy (161 byte)
  • We wish you a merry christmas (165 byte)
  • Oh Tannenbaum (174 byte)
  • Kling Gloeckchen (98 byte)
  • Oh du Froehliche (70 byte)
  • Schneefloecken Weissroeckchen (39 byte)
  • Morgen kommt der Weihnachtsmann (75 byte)
  • Leise rieselt der Schnee (73 byte)
  • Lasst uns froh und munter sein (180 byte)
  • Wie schoen, dass du geboren bist (415 byte)
  • Happy Birthday (40 byte)

(Total sound data: 2264 bytes)

Data saved to rtttl_data.h

Tools

Es gibt im Internet ein paar nette Tools um MIDI Files in RTTTL Klingeltöne zu konvertieren, was sehr praktisch ist, da man MIDI Files wie Sand man Meer findet (im Gegensatz zu Klingeltönen in diesem Dateiformat). Man muss allerdings beachten, dass nur einspurige Midi Files benutzt werden können und immer nur ein Ton gleichzeitig (keine Dreiklänge, Akkorde, etc.) auftreten! Dafür gibt es aber kostenlos MIDI Editoren, um sowas in den Griff zu bekommen.

Links: