Donnerstag, 21. Februar 2019

8.Teil iRadio: Skalensimulationen für X11 und DRM

Skalensimulationen für X11 und DRM

Autor: Bernhard


Die Simulationen wurden auf der SDL2-Bibliothek codiert, mit der eigentlich Spiele programmiert werden. Diese Bibliothek hat einen etwas höheren Ressourcenanspruch, kann dafür aber sowohl mit X11, als auch DRM-Unterstützung gebaut werden. Sprich, man kann auf X11 im Rendering verzichten und dafür den DRM Support der Raspberries nutzen.

Die Installation:

sudo apt-get install libsdl2-

danach 2x Tab drücken und es werden alle verfūgbaren Pakete angezeigt. Man kann gleich alle Pakete installieren,  gebraucht wird eigentlich nur dev, image und ttf.

Alternativ kann man mit der Anweisung:

sudo apt-get install libsdl2-*

ebenfalls alles zu SDL2 in einem Rutsch installiert werden.

Unterhalb der Ordner /home/pi/iRadio/display/x11 liegen schon einige Beispiele für Skalensimulationen. Eine Beschreibung über deren Eigenschaften und wie man sie auf eigene Bedürfnisse abändert folgt am Ende dieser Anleitung. Erst möchte ich die grundsätzliche Installation am Beispiel der Simulation skale1 abhandeln.

Es sind noch Vorarbeiten notwendig damit x11-Skalensimulation auf die Beine kommt:

- in der sdlskale.cxx im Ordner /home/pi/iRadio/display/x11/skale1 (um beim Beispiel zu bleiben, das gilt auch für die anderen x11-Ordner) müssen die Bilddateien skale.png und zeiger.png mit den absoluten Pfaden eingetragen sein, falls noch nicht geschehen. Aus den Zeilen:

textur_skale = IMG_LoadTexture(renderer, "skale.png");
textur_zeiger = IMG_LoadTexture(renderer, "zeiger.png");


wird dann:

textur_skale = IMG_LoadTexture(renderer, "/home/pi/iRadio/display/x11/skale1/skale.png");
textur_zeiger = IMG_LoadTexture(renderer, "/home/pi/iRadio/display/x11/skale1/zeiger.png");


 - nächstes Problem:

mit der Demo-playlist wird das Radio grundsätzlich spielen. Bevor X11 mit der Skalensimulation starten kann muss aber zwangsweise eine eigene playlist entweder per USB-Stick oder über den /boot Ordner eingespielt werden.

Mit der Anweisung sudo ./build.sh  im entsprechenden skale-Ordner wird die Skalensimulation gebaut.
Danach muss das Binärfile natürlich noch bei Rechnerstart zusammen mit X11/DRM gestartet werden. Hierzu wird der Start von X11 mit dem absoluten Pfad zu Simulation sdlskale in der Datei /etc/rc.local eingetragen:

startx /home/pi/iRadio/display/x11/skale1/sdlskale

So könnte die rc.local dann aussehen. Der Aufruf von displayd ist auskommentiert, weil die x11-Animation die Grafik übernimmt:

#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

/usr/bin/vlcd &
# /usr/bin/displayd &
/usr/bin/gpiod &
sleep 10
echo "play" | nc 127.0.0.1 9294 -N
echo "goto 0" | nc 127.0.0.1 9294 -N

#amixer -M set PCM 85%
startx /home/pi/iRadio/display/x11/skale1/sdlskale
&
exit 0


Kommen wir nun zu den einzelnen Typen der Simulation.

Die Simualtion 1 stellt eine Linearskala im Breitformat dar, wie Sie viele Röhrenradios haben. Das sähe dann so aus:


In Simulation 2 haben wir es mit einer Rundskala zu tun.




Man kann diesen Democode für das iRadio durchaus mit eigenen Skalen abändern. Es müssen nur neue Skalenfotos aufgenommen, bearbeitet und als PNG abgespeichert werden.

Hier eine kleine Anleitung für Simulation 1:

Nachdem ein qualitativ ausreichendes Foto oder Scan eines Skalenglases angefertigt wurde, lädt man dieses in eine Bildbearbeitung, welche Alpha-Kanal und PNG-Format unterstützt. Ich benutze mal das kostenlose und unter Unix weit-verbreitete GIMP.

Dann skaliert man das Foto in die native Auflösung des später benutzen Panels:



Diese Auflösung trägt man im Simulationscode an der gezeigten Stelle ein.


Jetzt ermittelt man die Pixelwerte des linken und rechten Zeigeranschlages. Auch diese Werte werden in den Simulationscode eingetragen.


Anschließend fügt man dem Foto einen Alphakanal hinzu. Den Menüpunkt sieht man im Bild.

Danach fängt die Fummelarbeit an. Da wo der Skalenzeiger durchscheinen soll, muss man den Bildinhalt auf dem Skalenfoto löschen.


Mit dem "Zauberstab-Tool" kann man ähnliche Bereiche automatisch selektieren und löschen. Das macht die Sache etwas weniger fummelig. Eine Nachbearbeitung ist jedoch meist dennoch nötig.

Ist man damit fertig, dann speichert man das Skalenglas als PNG-Datei ab.


Natürlich benötigt man auch einen Zeiger. Auch dieser wird als PNG abgespeichert. Idealerweise füllt der Skalenzeiger das gesamte Bild aus. Wenn nicht, dann sind auch hier Alphakanal hinzuzufügen und Freistellungen vorzunehmen. Diese Freistellungen sind wichtig wenn man eine dahinterliegende Skalenbeleuchtung simulieren möchte, was aber in dieser Version nicht der Fall ist.

Ähnliches Spiel betreibt man bei Simulation 2 mit einer Rundskala.



Panelgröße und Zeigeranschläge werden erfasst und im Simualtionscode eingetragen. Ein Alphakanal und Freistellung ist in dem Fall nicht nötig, denn es gibt keine Simulation der Beleuchtung und die Skale liegt als unterste Schicht im Renderer. Den Mehraufwand hat man dann beim Zeiger, der in diesem Fall ja nicht hinter, sondern vor der Skale zu Liegen kommt.


Für beide Simulationen liegen sämtliche Dateien natürlich schon fertig in den Verzeichnissen vor. Die Bilder sollen nur den Weg zur eigenen Simulation verdeutlichen.

Damit wirklich jede Station einen Platz auf der Skala zugeordnet bekommt, muss man auf ein Detail bei der Erstellung der Programmliste achten. Es dürfen dort nur URLs eingetragen sein, bei der die Radiostation kein URL-Redirection verwendet! Auf Grund eines Bugs in vlc, der bis dato nicht vom Entwicklerteam beseitigt wurde, kann die eingestellte Radiostation nur über Ihre URL eindeutig zugeordnet werden! Wird diese jedoch durch URL-Umleitung verändert und stimmt somit nicht mehr mit der URL in der Senderliste (Playlist.m3u) überein, kann eine Identifizierung der Station (noch!) nicht erfolgen. Der Zeiger bleibt in dieser Situation einfach auf der vorhergehend eingestellten Station stehen.

Wie erkennt man eine URL-Umleitung?

Ganz einfach. Man lädt das Radio einfach mit der erstellten Playlist und wechselt per Taster/Drehencoder/what ever auf die suspekte Station. Dann loggt man sich über das Netzwerk per Remote-Interface beim iRadio ein und setzt ein status-Kommando ab.


Stimmt die in netcat angezeigte URL nicht mit der URL in der Playlist überein, wird eine URL-Umleitung genutzt!
In der Regel kann man sich die m3u-Datei des Senders herunterladen, in einem Texteditor öffnen und findet dann darin eine dauerhafte bzw. fixe URL! Oder man nutzt einfach die URL, die netcat direkt anzeigt.

Keine Kommentare:

Kommentar veröffentlichen