Zum Inhalt springen

Morsecode JavaScript-Bibliothek

Die Engine hinter dieser Seite, als eine Datei für dein eigenes Projekt.

Alles auf dieser Seite läuft auf einer Engine: Kodieren, Dekodieren, das Zeitraster, der Ton, die Bilder. Diese Engine ist hier als einzelne Datei ohne Abhängigkeiten veröffentlicht. Mit einem Skript-Tag eingebunden, steht MorseEngine zur Verfügung.

Einbinden

<script src="https://www.morse-code.info/lib/morse-engine.js"></script>
<script>
  MorseEngine.encode('SOS');            // "... --- ..."
  MorseEngine.decode('... --- ...');    // "SOS"
</script>

Es gibt zusätzlich eine festgeschriebene Fassung unter /lib/morse-engine-1.0.0.js. Nimm die für alles, was du nicht laufend beobachtest, damit eine spätere Änderung hier dein Verhalten nicht verändern kann. Die Datei ohne Versionsnummer folgt immer dem aktuellen Stand.

Sie funktioniert als gewöhnliches Skript, mit require aus CommonJS und mit AMD. Ein npm-Paket gibt es nicht, weil es nichts zu installieren gibt: Es ist eine Datei.

Was sie kann

Text und Code

MorseEngine.encode('Hallo')          // Text zu Morse
MorseEngine.decode('.... ..')        // Morse zu Text
MorseEngine.detect('... ---')        // "morse", "text" oder "leer"
MorseEngine.translate('SOS')         // { art, text, morse } - waehlt die Richtung
MorseEngine.validate('A€B')          // { art, gueltig, unbekannt: ['€'] }

Zeitraster

MorseEngine.timing.unit(20)                       // 0.06 Sekunden je Einheit
MorseEngine.timing.schedule('... ---', {wpm: 20}) // [{an, dauer}, ...]
MorseEngine.timing.figures(20, 10)                // Farnsworth: alle Dauern in ms

Der Zeitplan ist eine Liste aus An- und Aus-Abschnitten in Sekunden. Alles, was Ton oder Licht erzeugt, arbeitet daraus. Genau deshalb können Ton und Blinken nie auseinanderlaufen.

Ton

const audio = MorseEngine.audio.create();
audio.abspielen(MorseEngine.timing.schedule('... ---', {wpm: 18}), {hz: 600});
audio.stoppen();

// oder eine WAV-Datei ohne Web Audio, das laeuft auch in Node
const {puffer} = MorseEngine.audio.wav(zeitplan, {hz: 600});

Bilder

MorseEngine.graphic.svg('... ---', {stil: 'balken'})  // { svg, breite, hoehe }
MorseEngine.graphic.beads('... --- ...')             // Perlenzahlen fuer Schmuck
MorseEngine.graphic.styles                           // die vier Darstellungen

Eigenes Alphabet

Das internationale Alphabet ist eingebaut, die Engine nimmt aber jede Tabelle an. So ergänzt du den amerikanischen Morsecode, einen erfundenen Code für ein Spiel oder einen abgespeckten Satz für den Unterricht:

const eigene = MorseEngine.create({
  letters: { A: '.-', B: '-...' },
  digits: {}, punctuation: {}, extended: {}, prosigns: {}
});
eigene.encode('AB');   // ".- -..."

Die eingebaute Tabelle steht als MorseEngine.alphabet bereit, wenn du sie erweitern statt ersetzen willst.

Was du wissen solltest

  • Zwei Zeichen teilen sich einen Code. Å und À sind beide .--.-, Ö und Ø beide ---.. Beim Dekodieren gewinnt das erste, und MorseEngine.collisions sagt dir, welche das sind.
  • Gross- und Kleinschreibung geht verloren. Morsecode kennt sie nicht. Das ß wird gesondert behandelt, denn Grossschreiben würde daraus zwei Buchstaben machen und seinen eigenen Code zerstören.
  • Niemals Netzzugriff. Die Bibliothek stellt keine Anfragen. Was du hineingibst, bleibt im Prozess.

Frei verwendbar, auch gewerblich. Ein Hinweis auf die Herkunft ist willkommen und keine Bedingung. Wer lieber einen fertigen Übersetzer einbindet, als selbst zu bauen, nimmt das Widget.

Häufige Fragen

  • Gibt es ein npm-Paket?

    Nein. Es ist eine einzelne Datei ohne Abhängigkeiten, ein Installationswerkzeug hätte also nichts hinzuzufügen. Lad sie herunter oder verlinke sie direkt.

  • Gibt es stattdessen eine REST-Schnittstelle?

    Nein, und zwar mit Absicht. Morsecode zu übersetzen braucht keinen Server: Es ist eine Nachschlagetabelle und ein wenig Rechnen. Eine Schnittstelle brächte Wartezeit, ein Nutzungslimit und die Abhängigkeit davon, dass diese Seite läuft - und dafür keinen Gegenwert.

  • Wie gross ist sie?

    Rund 25 kB unkomprimiert, samt vollständiger Zeichentabellen. Etwa ein Drittel davon sind Kommentare.

  • Läuft sie in Node?

    Ja, über require. Alles ausser der Wiedergabe über Web Audio funktioniert dort; besonders der WAV-Schreiber ist reine Rechnerei und läuft überall.

  • Kann ich sie selbst ablegen?

    Ja, und für alles Produktive solltest du das auch. Kopier die Datei auf deinen eigenen Server, damit deine Seite nicht von dieser abhängt.