Robbinaer

Das Technikblog aus dem Robbenradio

Airtime: Radioautomation auf Basis von Liquidsoap

Geschrieben von Steffen Schultz keine Kommentare

Auch wenn ich zum Jahresende meine Mitarbeit bei SLANG Radio aufgeben muss, habe ich mich in den vergangenen Wochen in einer Testumgebung mit der von Sourcefabric entwickelten und komplett Browser-basierten Radio-Automation Airtime befasst. Hierbei handelt es sich um eine All-in-one-Lösung, welche theoretisch ohne händische Eingriffe den kompletten Betrieb einer Radiostation realisieren kann. Man könnte Airtime auch als eine eierlegende Wollmilchsau für den Radiomacher bezeichnen. Doch wie so oft kommt es gerade bei Allround-Software auf die Details an, bei denen es an mancher Stelle noch Verbesserungsbedarf gibt - aber dazu später mehr.

Aufbau und Installation

Im Backend von Airtime kommt eine Playout-Engine zum Einsatz, welche auf Liquidsoap basiert, als Datenbank wird standardmäßig auf PostgreSQL gesetzt. Des Weiteren ist ein Media-Monitor enthalten, der automatisch neu hinzugekommene Dateien im Dateisystem überwacht und sie in die Bibliothek einliest. Das Frontend wurde in PHP realisiert und sollte problemlos auf einem Apache-Webserver lauffähig sein. Das Sendesignal kann an lokale oder externe Icecast- und Shoutcast-Server (vermutlich nur Shoutcast 1.X) gestreamt werden, lässt sich aber auch über eine vorhandene Soundkarte wiedergeben.
Airtime läuft unter Linux und kann je nach Distribution relativ einfach auch von Leihen installiert werden. Wem eine Standardkonfiguration ausreicht, kann sich für Debian-basierte Systeme einen Auto-Installer als Deb-Paket herunterladen, welcher dann alle weiteren benötigten Pakete herunterlädt und die Konfiguration anpasst. Natürlich lässt sich Airtime auch von Hand installieren, um bereits im System vorhandene Konfigurationen nicht zu gefährden oder um von der Standardkonfiguration abzuweichen. Diese Variante werden vor allem sicherheitsbewusste Administratoren vorziehen, da Airtime an einigen Stellen keine sehr restriktive Konfiguration aufweist und einige Dienste sogar unter dem Root-Benutzer laufen lässt. Begründet wird dies damit, dass man es den Nutzern so einfach wie möglich machen möchte, ihr eigenes Radio an den Start zu bringen. Möchte man sich aber gar nicht selbst mit der Pflege eines Airtime-Systems befassen, bietet Sourcefabric unter der Bezeichnung Airtime Pro auch eine Managed-Hosting-Lösung an.

Die Funktionen

Nach dem ersten Anmelden präsentiert sich der Startbildschirm als weitgehend inhaltslose Ansicht, da noch keine Sendungen geplant sind. Wurden bereits Sendungen eingetragen, sieht man hier die gerade laufenden sowie noch ausstehende Songs und kann letzte Änderungen von Hand vornehmen. Alle Optionen zum Planen einer Sendung sind schnell über das Menü im oberen Seitenbereich erreichbar und sinnvollerweise so angeordnet, dass sich alle Aufgaben nacheinander abarbeiten lassen. Zuerst Medien importieren, danach in der Bibliothek Playlisten, Smart-Blöcke oder Webstreams anlegen und schließlich im Kalender die gewünschte Sendung planen. Im Menü System lassen sich u. a. die Airtime-Einstellungen und Ausgabe-Streams bearbeiten sowie Benutzer und zusätzliche Medien-Ordner verwalten. Auch an die rechtliche Seite wurde gedacht, denn im Menü Verlauf können gespielte Songs nachvollzogen und z. B. als Report für Verwertungsgesellschaften ausgedruckt werden. Im Hilfe-Menü findet sich schließlich noch der Link zum Benutzerhandbuch, in welchem alle Optionen ausführlich beschrieben sind. Die gesamte Bedienung wird durch Javascript für Echtzeit-Aktualisierungen unterstützt, ist dabei aber auch von Screen-Reader-Nutzern weitgehend hervorragend nutzbar.

Airtime kann sowohl automatisierte als auch Live-Sendungen abwickeln. Dazu stellt das System 3 verschiedene Inputs bereit, deren Status im Seitenkopf angezeigt wird. Als geplante Wiedergabe wird die reine Sende-Automation bezeichnet, während Show-Source und Master-Source für externe Eingänge gedacht sind, also Live-Sendungen. Dabei ist die Master-Source der Sende-Eingang mit höchster Priorität und kann für spontane Live-Sendungen ohne Kalender-Planung verwendet werden, während die Show-Source ein geplantes Live-Streaming ermöglicht. Ein in den Einstellungen konfigurierbares Crossfading sorgt dafür, dass die Übergänge zwischen Live- und Automationsbetrieb sauber klingen und es zu keinen Knacksern kommt, wie etwa bei einer manuellen Icecast-Mountpoint-Konfiguration.
Der Automationsbetrieb lässt sich sehr variabel gestalten. Sind genügend Songs in der Bibliothek, lassen sich ohne großen Aufwand mit sogenannten Smart-Blöcken dynamische oder statische Playlisten erstellen, die nach verschiedenen Kriterien gestaltet werden können. Natürlich lassen sich Playlisten auch von Hand mit Songs füllen. Zu beachten ist, dass Airtime die ID3-Tags zur Verwaltung der Musik verwendet. Es sollte also nicht nur auf eine korrekte UTF8-Beschriftung der Dateien geachtet werden, sondern auch auf möglichst vollständige Tags, damit sich die Musikstücke schnell wiederfinden lassen. Wer seine Playlisten nach Themen anlegt, muss also die ID3-Tags nutzen, um vorher die Musik entsprechend zu kennzeichnen (Album, Genre, Kommentar etc). Stehen diese Informationen nach einmaliger Fleißarbeit aber zur Verfügung, lassen sich in Windeseile die gewünschten Playlisten erstellen.

Die kleinen Kleinigkeiten

Im Großen und Ganzen ist Airtime eine sehr gelungene Automationslösung, die es bei richtiger Konfiguration mit kommerziellen Produkten aufnehmen kann. Manche Funktionen lassen sich aber noch nicht in der Standardkonfiguration realisieren, sodass Airtime sicher nicht für jedes Radio geeignet sein dürfte. So fehlt z. B. die Möglichkeit, das Sendesignal mit einem Compressor/Limiter zu bearbeiten. Stattdessen setzt Airtime automatische Replaygain-Tags, um die Lautstärke der Songs auf gleichem Level zu halten. Was für den Automationsbetrieb durchaus in Ordnung klingt und ohnehin jeder matschigen Radio-Kompression vorgezogen werden sollte, stellt sich spätestens bei den Live-Sendungen als Problem heraus. Hier muss der Moderator selbst dafür Sorge tragen, dass sein Sendesignal angepasst wird. Anderenfalls könnte man das Signal durch einen externen Prozessor leiten, was jedoch bei niedrigen Bitraten zu Lasten der Klangqualität gehen kann, da Airtime ohnehin schon die eingehenden Streams intern neu kodiert.
Ein weiteres Problem ist der recht primitive Crossfader, der einen sauberen Übergang zwischen den Songs ermöglichen soll. Zwar können Crossfading, Fade-In und Fade-Out konfiguriert werden, doch fehlt ein sogenannter Gap-Killer, um Stille am Ende eines Tracks dynamisch durch Einblenden des nächsten Songs auszugleichen. Der integrierte Stille-Erkenner zum Setzen der Cue-Points wirkt leider nur unzureichend, sodass es schwer ist, die richtige Crossfading-Einstellung zu finden. In meinem Test hat sich aber eine Dauer von 3 Sekunden als die am saubersten klingende Lösung herausgestellt. Unter Umständen lässt sich mit einem Audio-Trimmer hier noch mehr herausholen, was ich allerdings nicht näher getestet habe.
Bislang noch nicht realisiert, aber laut eines Blogeintrags für zukünftige Versionen geplant sind wiederkehrende Shows mit Inhalten aus Smart-Blöcken, sodass nicht jeden Tag aufs Neue die Automation für Musikstrecken programmiert werden muss.

Alles in allem ist Airtime aber eine durchaus brauchbare Automationslösung, deren Entwicklung noch längst nicht abgeschlossen sein dürfte und sicher die ein oder andere Problemstelle noch beseitigt wird. Schade nur, dass ich meinen Testsender wohl nie in den Regelbetrieb schicken können werde.

Piespeakup: Neuer Sprachausgaben-Renderer behebt Soundprobleme beim Raspberry Pi

Geschrieben von Steffen Schultz keine Kommentare

Prinzipiell ist der Raspberry Pi auch für blinde Anwender nutzbar - entweder per Fernzugriff via SSH oder direkt per Tastatur, sofern ein entsprechender Screen-Reader installiert ist. Gerade die zweite Variante brachte allerdings bisher wenig Spaß bei der Arbeit mit der Himbeere. Zwar sind die benötigten Pakete (Speakup, eSpeak etc) bei Raspbian und auch Arch Linux verfügbar, doch in der Praxis sind sie bisher kaum nutzbar. Vor allem in Raspbian scheint es Probleme mit dem Soundtreiber zu geben und es kommt zu einem Stottern der Sprachausgabe oder sogar zu kompletten Abstürzen des Kernels.

Aus der Raspberry-VI-Community kommt jetzt allerdings Abhilfe für dieses Problem. Michael A. Ray, Betreuer der zur Community gehörenden Mailingliste, hat sich an die Arbeit gemacht und eine alternative Rendering-Engine für Speakup und dessen Sprachausgaben-Connector programmiert. Diese benutzt nicht mehr den instabilen Soundtreiber, sondern verarbeitet die Sprachausgabe im Grafikprozessor (GPU), ist also nicht auf Alsa, Pulseaudio oder andere Systeme angewiesen. Derzeit handelt es sich bei Piespeakup zwar nur um eine modifizierte Version des ursprünglichen eSpeakup-Connectors, doch sie erfüllt schon jetzt ihren Zweck.

Wer eine erste Alphaversion testen möchte, kann mit folgenden Schritten alle benötigten Komponenten herunterladen, kompilieren und installieren (Git muss installiert sein):
cd /usr/local/src

# Herunterladen der Quelldateien
git clone https://github.com/cromarty/ttsprojects.git

# Kompilieren und installieren der benötigten Bibliothek
cd ttsprojects/raspberry-pi/libilctts/build
sudo ./build.sh

# Piespeakup und dessen Abhängigkeiten einrichten
cd ../../piespeakup
sudo ./build.sh

Ist alles ohne Fehlermeldungen abgelaufen (bei mir kam es zu diversen Warnungen, die man aber ignorieren kann), kann der Raspberry Pi neugestartet werden und sollte bei angeschlossenem Lautsprecher die Bootnachrichten automatisch vorlesen. Möchte man die Sprachausgabe auf eine andere Sprache umstellen, muss noch die Datei /etc/default/piespeakup bearbeitet werden. Dort lässt sich auch konfigurieren, ob die Sprachausgabe über den HDMI-Anschluss gesendet werden soll. Nach einem weiteren Reboot oder mittels
service piespeakup restart
werden die Änderungen übernommen. Bei einer Änderung der Tonausgabe (Local oder HDMI) muss jedoch der Pi komplett neugestartet werden.

Das Projekt befindet sich noch in der Entwicklung. Geplant ist eine Unterstützung für Emacspeak sowie ein Modul für den Speech-Dispatcher, welches theoretisch dann auch die grafische Oberfläche mit Orca zugänglich machen würde.

Bootsektor einer Festplatte reparieren

Geschrieben von Steffen Schultz keine Kommentare

Wie kommt man eigentlich auf die blöde Idee, ein für DVD's und USB-Sticks bestimmtes Installations-Image mittels dd auf eine lokale Festplatte zu schreiben?
Das überlasse ich mal der Fantasie jedes einzelnen Lesers. Ich hatte es jedenfalls mit einer solchen Festplatte zu tun, die mit einem ISO-Image überschrieben wurde. Für die eigentliche Debian-Installation stellte dies kein größeres Problem dar - bis auf den letzten Installationsschritt, die Einrichtung des Grub-Bootloaders. Dieser Schritt schlug fehl, weil Grub der festen Überzeugung war, beim Zielmedium handele es sich um ein ISO-9660-Dateisystem, also eine CD oder DVD. Erneutes Anlegen der Partitionstabelle hatte darauf keinerlei Auswirkung. Seltsamerweise ließ sich die Installation dennoch abschließen, indem statt Grub der alternativ angebotene Bootloader Lilo gewählt wurde.

Um später dennoch Grub nachzuinstallieren, hilft dann nur noch das Löschen des kompletten Bootsektors. Dazu sollte man sich zunächst die Struktur der Partitionen einmal anschauen:
# fdisk -l /dev/sda

Disk /dev/sda: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e2a99

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 484243455 242120704 83 Linux
/dev/sda2 484245502 488396799 2075649 5 Extended
/dev/sda5 484245504 488396799 2075648 82 Linux swap / Solaris

Die erste Partition beginnt also bei Sektor 2048. Folgender Befehl überschreibt die ersten 2047 Sektoren mit Nullen:
# dd if=/dev/zero of=/dev/sda bs=512 seek=1 count=2047
Und schon lässt sich Grub wieder fehlerfrei installieren.

Firtz Podcast Publisher

Geschrieben von Steffen Schultz keine Kommentare

Viel braucht es ja eigentlich nicht, um einen selbstgehosteten Podcast zu veröffentlichen. Genügend Speicherplatz, einen RSS-Feed und eine Webseite drum herum. Firtz liefert genau das und noch einige Extras mehr, ohne dabei unnötig aufgebläht zu sein. An den Komfort eines ausgewachsenen Podcast-Publishers wie etwa in der Kombination mit Wordpress-Blogs kommt Firtz natürlich nicht heran. Aber gerade für kleinere Podcast-Projekte, deren technische Realisierung nach der Ersteinrichtung möglichst unaufwändig sein soll, ist der Firtz ideal geeignet.

Firtz kommt ohne ein Admin-Interface zur Verwaltung der Podcasts und deren Episoden aus. Stattdessen erfolgt sämtliche Konfiguration über Textdateien, in denen alle Variablen eines Podcasts notiert sind. Klingt kompliziert, ist es aber überhaupt nicht. Statt XML-Tags werden in einer Podcast-Konfigurationsdatei lediglich überschriftenartige Schlüsselwörter samt darunter notierter Werte verwendet, die das Script einliest und als korrekten RSS-Feed ausgibt. Ein Prinzip, das einfacher kaum sein könnte und auch nicht schwerer ist als das Ausfüllen von Formularen. Damit trotzdem nichts Falsches notiert wird, liegt dem Script eine umfangreiche Dokumentation bei, die alle nötigen und möglichen Optionen auflistet. Aber bei aller Einfachheit können auch die Profis aus dem Vollen schöpfen, denn Firtz bietet von anpassbaren Design-Vorlagen bis hin zu einer Integration mit dem Post-Production-Service Auphonic, der dem Podcaster noch einiges an Arbeit abnehmen kann, auch für gehobene Ansprüche genügend Anpassungsmöglichkeiten.
Natürlich darf auch eine kleine Webseite nicht fehlen, die alle Podcasts und Episoden übersichtlich präsentiert und auch die sozialen Netzwerke nicht zu kurz kommen lässt. Dank eines integrierten HTML5-Players, der übrigens auch die Screen-Reader-Nutzer begeistern dürfte, können Episoden außerdem direkt auf der Seite angehört werden.

Spannend ist ein unscheinbares Detail am Rande, welches die weitgehend problemlose Migration bestehender Podcasts ermöglicht. Durch die Option "Feedalias", die in einer globalen Konfigurationsdatei notiert werden muss, lassen sich alte Feed-Adressen auf das Firtz-Format umleiten. Lediglich das Erstellen der Episodendateien erfordert dann noch etwas Fleißarbeit. Wer trotzdem skeptisch vor dem Umzug ist, kann sich das Ergebnis sogar in einer begrenzt gültigen Demo-Installation auf der Projekt-Homepage anschauen und seinen alten Podcast-Feed in einen Firtz-Podcast umwandeln lassen. Ein nettes Extra wäre es, wenn man sich diese Installation dann noch als individuelles Paket herunterladen könnte.
Firtz ist ein imho rundum gelungenes Projekt, das sicher noch die ein oder andere Idee hervorzaubern wird.

Homepage mit allen Infos und Downloads: http://firtz.org

Kurztipp: GnuWin32-Tools in die Umgebungsvariablen eintragen

Geschrieben von Steffen Schultz keine Kommentare

Viele Unix-Tools gibt es bekanntlich beim Projekt GnuWin32 auch in einer Variante für die Windows-Kommandozeile, darunter der Downloader Wget oder das Vergleichswerkzeug Diff. Die bei Sourceforge angebotenen Setup-Pakete haben allerdings den Nachteil, dass während der Installation keine Umgebungsvariablen gesetzt werden. Soll heißen, man muss den Pfad zum gewünschten Werkzeug jedes Mal händisch eingeben, was auf die Dauer ziemlich nervtötend ist. Dieses Problem ist jedoch relativ einfach zu beseitigen:

  1. Im Suchfeld des Startmenüs "Umgebungsvariablen" eingeben und den ersten Treffer bestätigen. Alternativ erreicht man den sich öffnenden Einstellungsdialog auch mit einem Rechtsklick auf das Computer-Symbol (Win+Pause) -> Eigenschaften -> Erweiterte Systemeinstellungen -> Registerkarte Erweitert -> Schaltfläche "Umgebungsvariablen...".
  2. In der Liste der Systemvariablen sollte ein Eintrag namens "Path" vorhanden sein. Diesen auswählen und auf die Schaltfläche "Bearbeiten" klicken.
  3. Im Eingabefeld "Wert der Variable" wird nun einfach der Ordnerpfad zu den GnuWin32-Programmen eingetragen, indem der Cursor an das Ende der bestehenden Pfade positioniert und der Ordnerpfad mit einem Semikolon getrennt hinzugefügt wird. Die Zeile sollte dann in etwa so aussehen:
    %SystemRoot%\system32;%SystemRoot%;[...];C:\Program Files (x86)\GnuWin32\bin\
    Je nach System kann der Pfad abweichen, daher hier nur gekürzt dargestellt.
  4. Die Änderungen mit Klick auf OK bestätigen.

Jetzt sollte es möglich sein, in der Eingabeaufforderung jedes gewünschte Tool ohne vorangestellten Pfad aufzurufen. Ist die Eingabeaufforderung bereits geöffnet, muss der Interpreter zunächst beendet und neu aufgerufen werden.
Die oben genannten Schritte funktionieren übrigens auch bei anderen Werkzeugen wie etwa Python oder PHP, es muss lediglich der Programmpfad angepasst werden.

Artikel-Feed (RSS)