Morse-MP3-Files aus dem ARD-Teletext erzeugen

von Ralf Beesner

Elektronik-Labor  Projekte  Mikrocontroller  Raspberry     






Motivation

Der Covid-19-Lockdown geht zu Ende, und - da die meisten Leute wieder normal arbeiten - ist werktags auf den Telegrafie-Sub-Bändern nicht mehr viel los. Und am Wochenende toben die Conteste.... auch nicht jedermanns Sache.

Wenn man zu Übungszwecken oder aus Liebhaberei Telegrafie in seiner Wunschgeschwindigkeit hören möchte, kann man sich jedoch Morse-MP3-Dateien mit dem Programm "ebook2cw" von DJ1YFK erzeugen.

"Ebook2cw" wurde eigentlich dafür entwickelt, längere Texte in Kapitel zu unterteilen und diese Schnipsel in MP3-Dateien zu encodieren. Kurze, täglich wechselnde Nachrichten finde ich jedoch als Hörmaterial interessanter.

Im Internet hatte ich mal eine englischsprachige Seite gefunden, die Meldungen einer Nachrichtenagentur in CW umwandelte und im Webbbrowser als NF-Signal ausgab.

So etwas ähnliches habe ich mir nun "selbst gebastelt": Ein Linux-Skript, das auf dem Raspberry Pi oder einem anderen Linux-Rechner läuft, automatisch einige ARD-Teletext-Seiten herunterlädt, umformatiert und mit "ebook2cw" in MP3-Dateien wandelt.


Textquelle

Ich gucke schon seit Jahren keine TV-Nachrichten mehr, weil ich die Politik-Darsteller nicht mehr sehen und deren inhaltsleere Statements nicht mehr hören mag. Die ganze Tagesschau-Linie ist mir auch zu regierungsnah und USA-treu. Drehtür-Karrieren wie Regierungssprecher Seibert, Bayern-Intendant Wilhelm, Leute wie ARD-Intendant und Atlantkbrücken-Mitglied Buhrow und weitere (es lohnt sich, bei Wikipedia "Atlantik-Brücke ARD" einzugeben) scheinen mir nicht gerade für jurnalistische Neutralität zu stehen - eher für das Vermitteln von "journalistischer Haltung", die darin besteht, dass wir in der "besten aller möglichen Welten" leben, obwohl auch hierzulande ein paar Super-Reiche immer reicher und die Armen immer ärmer werden.

Aber ich lese regelmässig den ARD-Teletext, damit ich weiss, was gerade für wichtig erachtet wird ;)

Den ARD-Teletext gibt es auch im Internet. Ich nutze die Version für Mobilgeräte , weil die bilderfrei ist und sich so auf das Wesentliche beschränkt. Diese Website stellt eine nette Quelle kompakter Nachrichtentexte dar.


Details

Das Linux-Skript "ardtt2mp3s" lädt zunächst automatisch mit dem Textbrowser "links" einige Internet-Teletext-Seiten herunter. Mit dem Parameter "-dump" aufgerufen, entfernt "links" alle HTML-Elemente. Die Meldungen werden als einfacher Text in die Dateien "*-a.txt" geschrieben ( * = Seiten-Nr. ).

Das Skript schneidet dann alle Menüs und allen Schnickschnack mit "awk" weg. Die Erkennung der Meldungstexte erfolgt durch Suchen des Strings ":Nachrichten", der zu Anfang jedes Meldungstextes steht. Das Ende der Meldung wird aufgrund des Strings ">>" erkannt, der den Link auf die nächste Teletextseite einleitet.

Kleiner Schönheitsfehler: die letze Meldung einer Gruppe weist keinen Link auf die nächste Seite und daher keinen String ">>" auf. Solche Meldungen werden abgefangen, denn sonst würde der "Müll" nicht korrekt weggeschnitten.

Die extrahierten Meldungstexte landen in den Dateien "*-b.txt".

Mit dem Zeileneditor "sed" und mit "tr" wird dann noch etwas an ihnen herumformatiert: Mehrfache Leerzeilen werden entfernt, Gross- in Kleinbuchstaben umgewandelt, überschüssige Leerzeichen entfernt und Zeilenumbrüche durch das Telegrafie-Trennungszeichen "-" ergänzt.

Dann wird noch ein Meldungskopf mit Überschrift, Datum und Uhrzeit vorgeschaltet.

Damit es übersichtlicher bleibt, werden die Schritte jeweils in Textdateien zwischengespeichert. Das macht es leichter, das Skript anzupassen, falls die ARD mal das Format der Teletext-Mobilseiten ändern sollte.

Die Dateien "*-d.txt" sind das "gebrauchsfertige" Ergebnis, aus ihnen macht "ebook2cw" nun MP3-Dateien.

Deaktiviert (auskommentiert) ist die Erzeugung der Textvarianten "*-e.txt". In ihnen sind die Umlaute "äöü" und "ß" in "ae oe ue" und "ss" umgewandelt. Manche Telegrafisten mögen/können keine Umlaute, und einige Programme, die Telegrafie direkt als NF auf die Soundkarte ausgeben (z.B. "cw" aus dem "unixcw"-Paket), mögen sie auch nicht. Bei Bedarf kann man diesen Teil aktivieren und in den Sripten die Funktion "txt2cw" anpasssen.

Ein weiteres Skript "ardtt-encode" wandelt bereits heruntergeladene und extrahierte Textdateien in MP3-Dateien um. Man braucht sie also nicht erneut herunterzuladen, wenn man lediglich die Geschwindigkeit ändern möchte.


Gebrauchsanleitung

Zunächst im Terminal bzw. auf der Kommandozeile mit "sudo apt install links ebook2cw" die beiden kleinen Programme "links" und "ebook2cw" nachinstallieren (sofern man Raspbian/PiOS oder einen anderen Debian-Linux-Abkömmling einsetzt).

Dann mit root-Rechten "ardtt2mp3s" und "ardtt-encode" nach /usr/local/bin kopieren, damit sie im Suchpfad liegen, und ggf. ausführbar machen.

Als Normaluser kann man dann im Terminal z.B. "ardtt2mp3s 20" aufrufen, wenn man MP3-Dateien mit 20 WpM erhalten möchte. Sie werden im Ordner /tmp/a2m gespeichert.

Falls die Files zu umfangreich sind, kann man in "ardtt2mp3s" (ab Zeile 135) die Anzahl der heruntergeladenen Meldungen vermindern, denn die Texte dürften bei 20 WpM 2-3 h Hörmaterial ergeben ;)

Mit "ardtt-encode 15" kann man aus den Textfiles "*-d.txt" MP3-Files mit 15 WpM Geschwindigkeit erzeugen, sofern die Textfiles bereits vorliegen.

Die MP3-Dateien sollte man einem Player "zum Fraß vorwerfen", der den Inhalt ganzer Ordner automatisch abspielen kann. Ich verwende den Audio-Player "Audacious". Auf dem Raspberry Pi unter dem Raspbian-Betriebssystem (das neuerdings "Pi OS" heisst) werden MP3s standardmässig mit dem Videoplayer "VLC" wiedergegeben.


Quelltext

#!/bin/bash

# Programm lädt ARD-Teletext-Seiten fuer Mobilgeraete herunter, extrahiert die
# Nachrichten und formatiert sie fuer die CW-Wiedergabe
#
# Damit man das Programm leichter anpassen kann, falls das Format der 
# Teletext-Seiten mal geändert wird, erfolgt die Umwandlung in mehreren
# separaten Schritten und unter Zwischenspeichern der Text-Files

# Genutzt werden der Textbrowser links, ebook2cw, awk, grep, sed und tr
# Die letzten 4 sind Standard, die ersten beiden muessen unter Debian usw. mit
# "sudo apt install links ebook2cw" installiert werden



function getpages()

{
    # Der Browser "links" lädt html-Seite runter und wandelt sie in Text, dieser 
    # wird in die Datei "<Seitennr>-a.txt" geschrieben:

    links -dump "https://www.ard-text.de/mobil/"$page > /tmp/a2m/$page-a.txt
}

function txt2cw()

{
    echo "encoding mp3"

    # -w: Speed  -f: Frequenz  -p: unterdrueckt <BT>  -t: MP3-Tag  -a: Autor
    # -q 9: schlechteste mp3-Qualitaet  -u UTF8-Textcodierung  -o: Praefix Output-File

    ebook2cw -w $speed -f 600 -t $page -a ebook2cw -p -q 9 -u -o /tmp/a2m/$page-  /tmp/a2m/$page-d.txt   2>&1 > /dev/null
}


function extractmsgs()

{
    echo "extracting table" $page

# Pruefen, ob der String ">>" auf der Seite vorhanden ist: 

    if  ! grep -q ">>" /tmp/a2m/$page-a.txt ; then
        # wenn nicht vorhanden, page auf 800 setzen, damit die while-Schleife verlassen wird
        page=800
    fi


# "cat" listet das File und uebergibt es an "awk". "Awk" filtert die Textteile zwischen 
# ": Nachrichten" und ">>" heraus. Da diese beiden unerwuenschten Zeilen noch im 
# resutierenden Textblock  enthalten sind, werden sie mit "grep -v" gesucht und verworfen
# Ergebnis wird in "<Seitennr>-b.txt" geschrieben:

    cat /tmp/a2m/$page-a.txt | awk '/: Nachrichten/,/>>/' | grep -v ': Nachrichten' | grep -v '>>' > /tmp/a2m/$page-b.txt


# "cat -s" wandelt mehrfache Leerzeilen in genau eine Leerzeile
# der erste "sed"-Aufruf loescht Leerzeichen am Zeilenanfang
# der zweite "sed"-Aufruf loescht letzte Leerzeile
# "tr" wandelt Gross- in Kleinbuchstaben. Ergebnis wird in "<Seitennr>-c.txt" geschrieben:

    cat -s  /tmp/a2m/$page-b.txt |  sed 's/^ *//' | sed '$,1d' | tr A-Z a-z  > /tmp/a2m/$page-c.txt


# erster "sed"-Aufruf wandelt "ß" in "ss"  (leider nur 1 * pro Zeile, darum zwei Mal)
# zweiter "sed"-Aufruf wandelt "%" in "prozent"  (auch nur 1 * pro Zeile)
# dritter sed-Aufruf haengt an leere Zeilen Trennungszeichen an
# echo-Befehl hängt "+" an das File
# Ergebnis wird in "<Seitennr>-d.txt" geschrieben:

    cat /tmp/a2m/$page-c.txt | sed 's/ß/ss/' | sed 's/ß/ss/' | sed 's/%/ prozent/' | sed 's/^$/-/' > /tmp/a2m/$page-d.txt
    echo -n " +       " >> /tmp/a2m/$page-d.txt

# optional: Wandlung von Umlauten:
# Ergebnis wird in <Seitennr>-e.txt geschrieben:

#    cat /tmp/a2m/$page-c.txt | sed 's/ä/ae/' | sed 's/ö/oe/' | sed 's/ü/ue/' > /tmp/a2m/$page-e.txt

}



# Hauptprogramm

clear
echo
echo "ARD-Teletext-Downloader"
echo "-----------------------"

if [ $1 == ]; then
    echo
    echo "speed in WpM was not appended!"
    echo
    exit
fi

echo
echo "speed = " $1
speed=$1

# ggf. alte Files löschen

if [ -d /tmp/a2m ]; then
    echo "deleting old files"
    rm /tmp/a2m/*
fi

# falls der Ordner /tmp/a2m" nicht existiert: anlegen

if [ ! -d /tmp/a2m ]; then
    echo "mkdir /tmp/a2m"
    mkdir /tmp/a2m
fi


# neue Ueberschrift und Datum/Uhrzeit der Meldungen:
# Ergebnis wird als Meldungskopf in "4.txt" geschrieben

page=100
echo "printing headerfile"
echo -n "   <KA>  ard-teletext - " > /tmp/a2m/$page-d.txt
echo -n "datum  " >> /tmp/a2m/$page-d.txt
date +%d.%m. >> /tmp/a2m/$page-d.txt
echo -n " - uhrzeit  " >> /tmp/a2m/$page-d.txt
date +%H":"%M >> /tmp/a2m/$page-d.txt
echo -n " +   " >> /tmp/a2m/$page-d.txt
txt2cw

#Workaround, um Fehlermeldung abzufangen:

touch /tmp/a2m/800-a.txt


# nun werden die gewuenschten Seiten heruntergeladen:

echo "downloading tt-pages 104-119"
page=104
while [ $page -le 119 ]; do
    getpages
    extractmsgs
    txt2cw
    let page++
done


echo "downloading tt-pages 136-139"
page=136
while [ $page -le 139 ]; do
    getpages
    extractmsgs
    txt2cw
    let page++
done


echo "downloading tt-pages 156-159"
page=156
while [ $page -le 159 ]; do
    getpages
    extractmsgs
    txt2cw
    let page++
done


# temporäre Textfiles löschen

if [ -d /tmp/a2m ]; then
    echo "deleting tempfiles"
    rm /tmp/a2m/*-[a-c].txt
fi

echo "finished!"
echo "----------"
echo


Download der Skripte:  0620-ardtt2mp3s.tgz


Elektronik-Labor  Projekte  Mikrocontroller  Raspberry