Musikdateien aus Ordnerstruktur einlesen

Hallo Leute!

Ich hatte gestern mal angefangen mit dem Mediaplayer im IPS rumzuspielen und sah mich dann vor dem Problem mit dem Einbinden von Musikdateien in die Playlist der Instanz. Da ich nur grobe Kenntnisse von PHP besitze und mir der Code anderer Leute sowieso immer sehr verschleiert wirkt, bin ich aus der Funktion die in der Doku (guckstu hier) zu finden ist nicht schlau geworden und sie machte auch nicht das, was ich wollte. :smiley:

Also hab ich mich mal hingesetzt und mir eine eigene Funktion gebastelt, die mir aus einem Ordner und allen seinen Unterordnern die mp3- und wma-Dateien ausliest und in meine Playlist packt. Das Ganze sieht dann wie folgt aus:


<?
// Hier gibt man den Ordner an, in dem die Musik-Dateien liegen:
$path = "C:\\Beispiel";

$playlist = array();

// Diese Funktion durchsucht den Ordner und überprüft, dann ob es sich um 
// einen Unterordner oder eine Datei handelt.
// Ist es ein Unterordner, so ruft sich die Funktion selbst wieder auf und prüft 
// innerhalb von diesem weiter, ist das gefunden Objekt eine Datei, so wird
// geprüft, ob diese ein zugelassenes Dateiformat hat und fügt diese, sollte das
// der Fall sein in das Playlist-Array ein.
function getDirectoryTree($path, $playlist)
{
	$content = scandir($path);
	$maindata = array_diff($content, Array(".",".."));
	
	// Hier gibt man die Dateitypen an, welche in die Playlist eingelesen werden sollen:
	$allowed = Array("mp3", "wma");

	foreach($maindata as $d)
	{
		$actpath = $path . "\\" . $d;
		if(is_dir($actpath))
		{
			getDirectoryTree($actpath, &$playlist);
		}
		else
		{
			$ext = pathinfo($actpath, PATHINFO_EXTENSION);
			if(in_array(strtolower($ext), $allowed))
			{
				$playlist[] = $actpath;
			}
		}
	}
}

getDirectoryTree($path, &$playlist);

$id = 12345 /*Mediaplayer ID*/;

// Leeren der vorher bestehenden Playlist:
WAC_ClearPlaylist($id);

// Durchlaufen des Playlist-Arrays und anhängen an die Mediaplayer-Instanz-Playlist
foreach($playlist as $data)
{
		WAC_AddFile($id, $data);
}
?>

Da ich auch gerne wissen will, wie groß meine Playlist ist, habe ich bei mir auch noch eine eigene Variable angelegt, in der ich die Anzahl der Lieder in der Liste speichere. Damit diese immer aktuell ist, hab ich noch folgenden Codeschnipsel an das Script angehängt:


$pl = WAC_GetPlaylistLength(12345 /*Mediaplayer ID*/);
SetValueInteger(54321 /*Playlist-Länge Datei*/, $pl);
?>

Ein Teil des Codes habe ich dem Script aus der Doku entnommen, hier nochmal einen herzlichen Dank an den Ersteller von diesem (weiß leider grad nicht wer das war).

Eventuell kann ja der ein oder andere mein Script gebrauchen, wenn nicht ist auch nicht schlimm, ich benutz es auf jeden Fall. :smiley:

Mit freundlichen Grüßen,

Markus

PS: Sollte der Code arg grausig sein, so bitte ich um Entschuldigung, bin wie gesagt nur mit groben PHP-Kenntnissen gesegnet. :wink:

Danke, läuft super.

Grüße Mirco

Hallo Marco,

hört sich recht gut an! Ich werds am WE bei mir auch mal testen.
Der Hit wäre, wenn man das zu durchsuchende Verzeichnis über dasDashboard eingeben könnte. Ich denk mal drüber nach.

Danke erstmal!!

Ciao
Andrge

Da ich das Dashboard nicht einsetze/noch nie eingesetzt habe, kann ich dazu leider nichts sagen, musst du mal selbst probieren. :wink:

Kein Problem, werd ich mal machen.

Grüße
Andrge

P.s: Dashboard kann ich empfehlen:)

Hallo Markus,

danke für die Idee, läuft prinzipiell bei mir … aber es klappt noch nicht mit der Anzeige im Webfront.

Kannst du vielleicht einen Screenshots vom entsprechenden Ausschnitt des Objektbaumes und einen Hinweis auf die ev. Einstellung der Variablen für’s WebFront dranhängen ?

Besten Dank !

Michael

Hi Michael!

Ich hab da eigentlich nur eine stinknormale Mediaplayer Instanz angelegt und dazu nur noch eine Integer Variable in der ich die Länge der Playlist speichere.

Gruß

Markus

Im Anhang ist mein Objektbaum.

Hallo Markus,

o.k., danke, das läuft bei mir auch, hatte gedacht du könntest die Playlist auch irgendwie komplett anzeigen.

Mit welchem Event startest du das Script ? Die Playlist müßte doch beim der Anwahl des Mediaplayers gefüllt werden, sonst greift der Play Button ins leere ?

Ich hab allerdings noch ein Problem - ist wohl eher ein PHP Problem meinerseits: Ich habe meine Musikdateien auf einem Server liegen und würde gerne den Netzwerkpfad im Script eingeben (z.B: \HOMESERVER\Musik). Das kriege ich nicht hin, er kennt den Pfad nicht obwohl ich ihn über den Dateiexplorer problemlos erreiche.
==> falls mir da jemand auf die Sprünge helfen könnte …

Gruß, Michael

Ich starte das Script manuell und les die Daten einmalig in die Playlist.

Man könnte sich natürlich überlegen, dass man sich die Playlist jedes Mal, wenn man den Mediaplayer Status auf „Play“ setzt, neu lädt, das könnte aber bei großen Musikbibliotheken und öfteren Play/Pause etwas nervig sein. :wink:

Wie du die Musik von deinem Homeserver lesen kannst weiß ich leider nicht. Habs eben mal selbst probiert, konnte aber auch nichts erreichen. Auch wenn man sich die Serverfestplatte als Netzlaufwerk eingehängt hat, kann IPS/PHP die Daten nicht auslesen. Vielleicht hat da jemand anderes ne Idee, ansonsten wirst du wohl erstmal nicht drumrum kommen, die Musik auf deinem IPS-Server zu speichern.

Gruß

Markus

Bei PHP müsst ihr aus „“ ein „/“ machen. :wink:

Habe alle (mir bekannten) Tricks probiert (\ und / etc.) … leider keinen Erfolg gehabt.

Vielleicht hat jemand noch eine geniale Idee was ich da falsch mache …

Zum Thema Playlist laden: wenn man prüfen könnte ob schon eine Playlist geladen ist könnte man das nachladen doch entsprechend steuern, oder ?

Gruß, Michael

Moin moin,

in PHP müssen Backslashes mit einem Backslah „angekündigt“ werden, versuch mal folgendes format „e:\Sven\09 Finanzen\“

Oder verwende einfache Anführungszeichen (die Dinger über der #-taste) die schalten nämlich diese vermalledeite „PHP-Intelligenz“ ab die alle Strings heimlich im Hintergrund und mit Gewalt auf Browsertauglichkeit formatiert. :rolleyes:

Toni

Die brauchen dann aber zur Darstellung von ’ trotzdem noch das ’ ;).

kommt in Pfaden ja nicht so oft vor… :rolleyes::smiley:

Toni

… hab alle eure Tipps probiert … auf dem lokalen Rechner kann ich mich problemlos bewegen, nur auf den Server komme ich nicht …:mad:

Gruß, Michael

Ich glaube das könnte ein Rechteproblem sein, da gabs galube ich auch schon im Zusammenhang mit opendir und anderen PHP Befehlen wie eben auch scandir die auf Dateiebene arbeiten Beiträge dazu.

Genau, das Problem hatte ich auch schon.
Wenn Du ein Serverlaufwerk mappst und über x:\Ordner zugreifst geht es nicht:mad:. Wenn Du aber direkt über \server\Ordner zugreifst funktioniert es:D.

Danke ,das ist ja Super. Alles läuft super, bis auf…

Ich habe IPS auf einen Server am laufen. Ich rufe den MediaPlayer über WebFront per Laptop auf. Ich kann leider nur die Ausgabe hören, wenn ich am Server bin. Ist es möglich die Ausgabe auch per Internet zu hören, wo ich gerade bin. Ob von zuhause oder unterwegs per laptop. Anzeigen kann ich mir unterwegs alles, nur ich höre nichts. :mad:

Danke für deine Arbeit.:slight_smile:

Gruß mkass

Der Mediaplayer ist kein Streaming Client, es können keine Audiodaten vom Server geholt werden. Lokale Audio Daten würden über eine Krükenlösung, z.B. zweites IPS auf dem Notebook gehen.