QMMP mit gnadenlos dummen Fehler

Mein Lieblingsaudioplayer…oh nein.. schon wieder.. 🙂 das ist wirklich Zufall 😀 Also mein Lieblingsplayer QMMP hat einen kleinen Logikbug: Wer wartet in einer Endlosschleife auf sich selbst 🙂

Gute CMD Befehle

QMMP bietet eine Menge von Optionen zur Steuerung von laufenden QMMP Instanzen an:

Optionen:
--------
-e, --enqueue Wiedergabeliste nicht löschen
-p, --play Aktuelles Lied abspielen
-u, --pause Aktuelles Lied pausieren
-t, --play-pause Wiedergabe pausieren oder fortsetzen
-s, --stop Aktuelles Lied stoppen
-j, --jump-to-file „Springe zu Titel“-Dialog anzeigen
-q, --quit Anwendung beenden
--volume <0..100> Lautstärke der Wiedergabe einstellen (Beispiel: qmmp --volume 20)
--toggle-mute Lautstärke stumm schalten/zurückstellen
--next Nächsten Titel in Wiedergabeliste abspielen
--previous Vorherigen Titel in Wiedergabeliste abspielen
--toggle-visibility Anwendung ein-/ausblenden
--show-mw Hauptfenster anzeigen
--add-file „Datei hinzufügen“-Dialog anzeigen
--add-dir „Verzeichnis hinzufügen“-Dialog anzeigen
--volume-inc Lautstärke Fünfer-Schritt erhöhen
--volume-dec Lautstärke in Fünfer-Schritt verringern
--pl-help Befehle zum Steuern der Wiedergabeliste anzeigen
--seek <time> Zu Position im derzeitigen Titel spulen
--seek-fwd <time> Vorwärts spulen
--seek-bwd <time> Rückwärts spulen
--status Wiedergabestatus ausgeben
--nowplaying <fmt> Namen des Titels formatiert ausgeben (Beispiel: qmmp --nowplaying "%t - %a")
--nowplaying-syntax Syntax von --nowplaying ausgeben
--no-start Die Anwendung nicht starten
--help Zeigt diesen Hilfetext an
--version Gibt die Versionsnummer aus

Einer davon ist „-q“, womit QMMP beendet werden sollte. Tut es auch, aber nur, wenn es auch läuft. Wenn es nicht läuft, dann wartet das gestartete QMMP und wartet bis zum Sanktnimmerleinstag auf einen anderen QMMP Prozess. Der kommt natürlich nicht. Also beendet sich das nichts tuende QMMP nicht mehr.

Bugreport ist erstellt worden 😀

#!/bin/bash 

RC=`ps auxf | grep -v grep | grep -c qmmp`
if [ $RC -gt 0]; then
       qmmp -q
fi

Kleines Script um das Problem zu vermeiden.

Wie man in Java die lokale IP ermittelt

Da das Ermitteln der lokalen IPs über alle Interface angeblich Voodoo ist, hier mal eine Lösung ohne Voodoo 🙂

import java.net.InetAddress;
import java.net.NetworkInterface;

                try {
 			Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();
 			while (networkInterfaces.hasMoreElements()) {
 		    	     NetworkInterface networkInterface = (NetworkInterface)networkInterfaces.nextElement();
 		    	     Enumeration ips = networkInterface.getInetAddresses();
 		    	     while ( ips.hasMoreElements() ) {
 		    		// InetAddress ipa = (InetAddress)ips.nextElement();
 		    		String ip = ((InetAddress)ips.nextElement()).toString();
 		    		ip = ip.replaceAll("/", "").replaceAll("%.*$","");
 		    		... HIER mit der IP was machen ... 
 		    	      }
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
		}

Eine kleine Anmerkung dazu. Das ist ja der Cast auf InetAddress, es werden an der Stelle aber IPv4 und IPv6 Objekte zurück gegeben, die sich eben ohne Cast-Fehlermeldung nur als InetAddress verarbeiten lassen. Wenn Ihr wissen wollt, was es ist, ohne eine RegEx über das Ergebnis zu legen, lest einfach die Klasse des Objekts aus:

InetAddress ipa = (InetAddress)ips.nextElement();
log( ipa.getClass().getName() );
String ip = ipa.toString().replaceAll("/", "").replaceAll("%.*$","");

Anstatt getName() kann man auch getSimpleName() oder getType() benutzen, ganz wie es Euch gefällt.

Alternative:

		Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
		while (networkInterfaces.hasMoreElements()) {
		   	NetworkInterface networkInterface = (NetworkInterface)networkInterfaces.nextElement();
		   	
		   	for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) {
		   	    String ip = address.getAddress().toString();
	   		    int netmask = address.getNetworkPrefixLength();
	   		    log( netmask + ip );
		   	    ip = ip.replaceAll("/", "").replaceAll("%.*$","");
	   		}
		}

Da bekommt man auch gleich die Netzwerkmaske mit, ist wohl der bessere Weg 🙂

Neues von LAHA

Kleines Update zum kleinen heimischen Audioverteilprojekt. Wie ich hier: Multi-Netzwerk-Lautsprecher mit Linux bereits nach einige Stunden zeigen konnte, klappt das mit dem latenzgleichen Abspielen von Audio im Netz bereits mit Linux Bordmitteln.

Endlich mal wieder was los…

In einer abendlichen Dauerprogrammiersession habe ich in wenigen Stunden eine Client-Server Testsuite gebaut, die bereits funktional ist. Wenn ich von Client rede meine ich die Abspieleinrichtung, die aber als Serverkomponente ausgelegt ist. Bitte merken um Verwirrungen vorzubeugen.

Die Kommunikationsarchitektur kommt auch mit einer rudimentären Anti-kaper-Funktion daher, so daß WLAN Gäste den Clienten nicht übernehmen können. Das beugt z.b. dem Problem vor, daß in einem Netz vielleicht mehr als eine Control-Anwendung läuft. Vielleicht wollen ja die Kinder was anderes hören als die Eltern 😉

Die Kontrolleinheit

Was jetzt noch neben einigen Funktionen fehlt, ist das Kontroll-Center. Das Kontroll-Center sollte ein ansprechendes Äußeres haben, aber ob das mit Swing was wird .. fraglich 😉 Ich lasse mich mal überraschen. Das war ein implizites Ja, wie in Java 😉 Kein rumpliges Python, kein PHP, NodeJs oder Ruby.. Java. Wieso?
A) machts was es soll und B) bekommt Ihr raus, wenn der Source released wird 😀

PS: Wofür LAHA steht, wird später verraten 😉