Morsecode in Sounddateien
Bernd Kernbaum, DK3WX

Delphiversion
Lazarus als Delphi unter Linux
Lazarusversion für Windows
Lazarusversion für Linux
Vergleich

Delphiversion

Top


Programm CWWave

Für eine Programmieraufgabe, die sich mit dem Umgang von Sounddateien beschäftigt, wurde natürlich ein Beispiel mit Amateurfunkbezug gesucht und programmiert.

Das Programm wandelt ASCII-Texte in Morsetexte um, die als *.wav Datei abgespeichert werden.
Über ein Soundprogramm können diese dann abgespielt werden. Eine interessante Variante für unterwegs, ist die Umwandlung des WAV Formates in ein MP3 Format und Wiedergabe mittels eines MP3 Players. Hierzu ist aber ein Konvertierungsprogramm erforderlich.


Bildschirm CWWave

Einstellungen

Im Feld Einstellungen können die Lautstärke, das Morsetempo und die Tonhöhe über Schieberegler eingestellt werden.
Das Morsetempo wird nach der Formel Punktlänge in ms = 6000 / Buchstaben pro Minute berechnet und kann von anderen Messmethoden (Paris, Codex, ABCD... siehe [1]) abweichen.

Die Abtastrate kann in einem Auswahlfeld gewählt werden, 8000 Abtastungen pro Sekunde sind aber ausreichend und ergeben die kürzeste Dateilänge.
Höhere Abtastraten verbessern den Verlauf der Sinusfunktion, ergeben aber auch größere Dateien.

Als Nebenprodukt fiel mit der Taste Sinuston die Erzeugung einer WAV Datei mit einem konstanten Ton ab. Die Länge des Tones kann ebenfalls über einen Regler bestimmt werden. Dieser Ton kann dann zum Pegeln und Messen verwendet werden.

Zeichenkette

Im Feld Zeichenkette wird die im Eingabefeld eingetragene Zeichenkette in eine Morse-WAVE-Datei gewandelt. Groß/Kleinschreibung wird ignoriert.
Diese kurzen Morsetexte ersetzen auf meinem PC die sonst üblichen Windows-Klänge. Er begrüßt mich mit meinem Rufzeichen, eingehende E-Mails werden mit qtc signalisiert und mit einem qrt meldet er sich ab.
Sie können aber auch zum Üben und Erlernen bestimmter Zeichenkombinationen verwendet werden.

Textdatei

In diesem Feld wird eine ASCII Textdatei mit der Endung *.txt angefordert und in einen Morsespruch gewandelt. So entstehen recht umfangreiche Übungsdateien.
Wer also den DARC Rundspruch hören will, lädt den Rundspruch als ASCII Datei aus dem Internet und wandelt ihn auf diese Weise um.
Hier ist aber Vorsicht geboten. Der letzte Rundspruch hatte über 5 kByte Länge und das sind beim Morsetempo 100 Zeichen pro Minute immerhin 50 Minuten „Sound“ und eine Wave Datei mit über 50 MByte Größe.

Im Vordergrund bei der Entwicklung stand die Beschäftigung mit dem Wave Format und so sind im Programm sicher viele Wünsche nicht realisiert. Wer etwas mehr haben will kann die Quellen als Grundlage für die eigene Programmierung nutzen.

 

Lazarus als Delphi unter Linux

Top

Delphi ist ein exzellentes Entwicklungssystem für den Hobby Pascal Programmierer. Nach dem Umstieg auf Linux hatte ich ein Problem und wollte schon auf C umsteigen, da der Linux Pendant Kylix auf meinem System nicht richtig in Gang zu bekommen war. Glücklicherweise fand ich ein Open Source Projekt, das das gewohnte Delphigefühl auch für Linux bietet. Lazarus (www.lazarus.freepascal.org) sieht beinahe so aus und lässt sich in weiten Teilen auch so bedienen wie Delphi und so wird es recht einfach Programme für beide Betriebssysteme zu schreiben, da Lazarus auch unter Windows zur Verfügung steht. Ich habe meine ersten Schritte mit diesem CWWave Projekt gemacht und versucht ein Programm unter Windows und Linux zu erstellen. Nach einigen Anfangsproblemen ist es schon mal recht ordentlich gelaufen und ich werde dabei bleiben.

Zuerst meine Windowserfahrungen.

Lazarusversion für Windows

Top

Lazarus installieren

Vom Projektteam wird eine Windowsversion bereitgestellt, die, wie die meisten Windowsprogramme, mit einem Installer das Programm ins System bringen. Es gab keine Probleme, alles lief auf Anhieb.
Mittels Menüpunkt - Werkzeuge - wollte ich das fertige Delphiprojekt Übernehmen. Dies ging nicht gleich auf Anhieb. Ich habe dann das Form und den Quelltext einzeln Übernommen und die notwendigen Änderungen von Hand gemacht. Im Form waren einige Komponenten verrutscht und in der Unit mussten die „uses“ verändert werden. Alles keine großen Probleme.
Das fertige Programm geht wie gewohnt und alles funktioniert wie unter Delphi. Etwas überrascht war ich, als ich mir die entstandenen EXE angesehen habe, die mit 6 MB doch recht groß ist. Aber hier gibt es Abhilfe, die ich unter Vergleich beschreibe.

Das fertige Programm ist nicht von der ersten Variante zu unterscheiden.

Bildschirm LWave

Wer damit experimentieren möchte, findet hier die LWave Quellen.

Lazarusversion für Linux

Top

Lazarus auf mein Suse 10.2 zu installieren war etwas aufwändiger, aber lief auch ohne Probleme. Je nachdem welche Pakete schon installiert sind, kann die Reihenfolge etwas anders aussehen. Da ich alle Pakete mit Yast ins System bringe, kommt ggf. eine Meldung über eine Abhängigkeit zu einem benötigten Paket, welches dann erst einmal zu installieren ist. Alle Pakete gibt es im Internet eventuell auch in einer aktuelleren Version.

Für die grafische Darstellung

- gtk-devel-1.2.10-888.i586.rpm
- gtk+-devel-1.2.10-39.i386.rpm
- gdk-pixbuf-devel-0.22.0-72.i586.rpm

Der freie Pascal Compiler fpc

- fpc-src-2.0.4-0.i386.rpm
- fpc-docs-2.0.4-0.i586.rpm
- fpc_crosswin32-2.0.4-060910.i386.rpm
- fpc-2.0.4-0.i586.rpm

und die IDE Lazarus

- lazarus-0.9.20-0.i386.rpm



Das Projekt wurde dann von der Windowsversion übernommen.

Bildschirm LWave_Lin

Mit dem installierten Lazarus geht dann das Programm ohne Probleme, auf einem anderen Rechner muss aber das gtk System installiert sein. Hier die Linux Quellen.

Vergleich

Top

Als naiver Nutzer war ich anfangs über die Größe des Programms überrascht. Der Lazarus Windows Compiler erzeugte eine riesige Datei. In den Internetforen fand ich die Erklärung - Im Programm stecken noch eine Menge Debuggerinformationen, die man in den Projekteinstellungen abschalten kann, oder mittels eines kleinen Hilfsprogrämmchen aus der fertigen EXE entfernen kann. Da mir viele Einstellungen in der IDE noch nicht bekannt sind und sinnloses Rumklicken nicht der richtige Weg ist, wählte ich die zweite Variante.

- Projektgröße nach dem Übersetzen --> 6 641 176 Byte.

- mittels strip --strip-all project1.exe waren es dann noch --> 1 609 216 Byte.

- und nach dem Komprimieren mittels upx project1.exe ist die EXE doch recht handlich --> 448 512 Byte.

Die alte Delphiversion brachte es auf 334 336 Byte. Der Unterschied ist unbedeutend, damit kann ich gut Leben.

Unter Linux sieht es ähnlich aus.

- Projektgröße nach dem Übersetzen --> 7 761 576 Byte.

- mittels strip --strip-all project1 waren es dann noch --> 3 258 396 Byte.

- und nach dem Komprimieren mittels upx project1 ist die binäre Datei doch recht handlich --> 1 062 960 Byte.



Vielen Dank an die Programmierer dieser guten Werkzeuge.