Media Player Modul

  • Bietet die Möglichkeit Soundfiles (Wav/Mp3…) abzuspielen.
  • In den Einstellungen kann die Soundkarte ausgewählt werden

Benutzung:


//*** Slash beachten! *** Kein Backslash verwenden
DXMedia_Open(19507, "D:/Musik/Klingel.mp3");
DXMedia_Play(19507);


 DXMedia_Stop(19507);
 

  DXMedia_Pause(19507);
  

//Dateilänge ausgeben
echo date("i:s", DXMedia_GetLength(19507));
   

//Position auslesen
$pos=DXMedia_GetPosition(19507);
    

//Position auf 1 Minute setzten
DXMedia_SetPosition(19507, 60);


 //Lautstärke auf 40% setzten
DXMedia_SetVolume(19507, 40);
//Achtung: Damit sich der MediaPlayer die Lautstärke für neue Files merkt muss die Status Variable für Volume eingestellt sein! (Beachten, dass die Variable beim erstellen auf 0 ist was Lautstärke 0% bedeutet! )
 

Möglichkeiten die Eingebaut werden könnten:

  • Videos abspielen? ( Wo soll das Ausgabefenster sein? Wie soll es aussehen? )
  • Eigene per Graphedit erstellte Graphen benutzten?
  • Mehr Befehle zum Steuern?

Wenn ihr Ideen habt, bauen wir die Features nach Möglichkiet gerne ein.

Grüße, paresy

Hallo,

super Sache mit dem Modul…
Folgende Dinge wären mir noch wichtig:
Abfrage der Position innerhalb einer Mediendatei, um z.B. eine Art Lesezeichen abzuspeichern, um später dort forzufahren, wo aufgehört wurde. Aber bitte darauf achten, dass dies auch mit großen Dateien funktioniert (höre gerne Hörspiele/Hörbücher, viele MP3-Auto-Radios können sich nur Position bei kleinen Dateien merken… :frowning: ).
Auch sollte dann entsprechend die Steuerung weiter aufgebohrt werden (Vorlauf, Anspringen einer Marke…)

besten Dank

Gruß
MarkusTC

So, ich habe 3 neue Funktionen eingebaut und 3 Status Variablen (Filename, FilePos, FileLen). Die sollten auch mit großen Dateien keine Probleme haben und man kann die gut im neuen Designer verwenden für einen MediaPlayer

Einfach das neuste Update runterladen.

Grüße, paresy

Hallo,

super, funktioniert alles.
Kann man vielleicht bei Gelegenheit noch ein Befehl für die Lautstärkenregelung implementieren…

Danke

Update, siehe oben

hat einer von Euch auch ein komischen Knacken oder Pochen beim abspielen von mp3’s mit dem DXMedia-Device?

Klingt so als wäre das immer beim Bass… habe schon die anderen möglichen Sounddevices gewählt, bringt aber wenig Erfolg.

Die Möglichkeit bereits erstellte Wiedergabelisten (Windows Media Player oder *.m3u) mit dem Modul abzuspielen, wäre auch noch eine super Sache…

Gruß
MarkusTC

Hallo zusammen,

noch mal ein Lob für euere Software, die sich ja stetig weiterentwickelt und mit der sich so gut wie alle Aufgabe realisieren lassen…

Für den MediaPlayer wäre noch die Möglichkeit Internet-Radio-Stationen abzuspielen eine Klasse Sache, so könnte morgens bei mir im Bad der gewünschten Radio-Sender mit den aktuellen News ertönen … :smiley:

Danke

Gruß
MarkusTC

Wenn du einen DirectShow Filter hast, der z.b. Shoutcase verarbeiten kann, kannst du im Open Befehl die Internet Adresse eingeben und es sollte funktionieren. Kann es leider gerade nicht testen, da ich unterwegs bin.

Grüße, paresy

Hallo,

ich möchte noch einmal nachfragen wie es mit der Unterstützung
von Playlists (m3u) aussieht.
Ist da in nächster Zeit etwas geplant.
Als Anregung wäre die Übergabe von iD3 Tag Infos wie
Artist, Album, Title…
Dann wäre die Umsetzung einer Haus-Musiksteuerung relativ einfach zu bewerkstelligen (läuft momentan noch mit Misterhouse).

Danke
Holger

Das kann man sich selber bauen :slight_smile:

Beschreibung M3U Format
http://hanna.pyxidis.org/tech/m3u.html

Klasse zum Auslesen von ID3 Tags
http://www.php-mag.de/itr/online_artikel/psecom,id,660,nodeid,62.html

Hallo paresy,

danke für die Links. Ist mal ne schöne Spielwiese um sich mit PHP
vertraut zu machen.
Playlisten kann ich schon einlesen, aber ich habe ein Problem
mit der Position im File.
Die Variable wird bis zur Liedlänge hochgezählt aber nicht mehr zurückgesetzt.
Weder das Anhalten über DXMedia_Stop noch das Schließen über DXMedia-close setzt die Variable zurück.
Auch ein auslesen über DXMedia_GetPosition bringt nicht den gewünschten Erfolg.
Dadurch kann ich leider nicht erkennen wann ein Lied zu Ende ist und das nächste geladen werden muss.

  1. Frage

Wie kann ich einen Stream von einer URL abspielen??
Hintergrund: bei mir läuft ein VDR-Server für TV-Aufnahmen, mp3 Datenbank und und und
Darüber bekomme ich auch meine Radiosender via Satelit. Der VDR-Server stellt dazu jedes beliebiege Programm per ES-Stream zur Verfügung. In Winamp oder XMMS kann ich diesen Stream per Aufruf von
http://192.168.0.103:3000(VDR-Server)/ES/52(Sendernummer)
abspielen.
Im DXMediamodul bekomme ich nur ein cannot open http:192.168…
das ist nicht sehr Aussagekräftig?

Gruss und vielen Dank für den sehr guten Support hier
Holger

Hallo Holger

vielen Dank für das Lob :slight_smile:
Der paresy macht mal eine kurze Pause (es ist fast 01:40) :wink:
Wir werden, nach einer Tasse Kaffee, uns der Sache morgen widmen…

Gute Nacht

MST

Lade dir mal das neuste Upate per LiveUpdate :slight_smile:

Hier ein schönes 1 Knopf JukeBox Script :slight_smile:

Verknüpfbar mit z.b. FS20 Taster :wink:

  1. Klick -> Spielt Lieder zufällig im angegeben Ordner ab
  2. Klick -> Stoppt die Wiedergabe


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File	 : MusicJukebox.ips.php
Trigger  : FileStatus
Interval : -
*/

//-- Configuration
$folder="D:/-- MUSIC --/"; //Keine Backslashes! Slash am Ende!
$instanceid=43239;
$rekursiv=true;

//-- Main Code
if($IPS_SENDER=="Variable" && $IPS_VARIABLE=="FileStatus") {
  if(GetValueString("FileStatus")=="COMPLETE") {
   RunNext();
 }
} else {
 if(GetValueString("FileStatus") == "PLAY") {
  DXMedia_Stop($instanceid);
 } else {
  RunNext();
 }
}

//-- Functions
function RunNext() {

 global $instanceid, $folder, $rekursiv;

 $newfile=random_file($folder, "mp3", $rekursiv);
 echo $newfile;
 DXMedia_Open($instanceid, $newfile);
 DXMedia_Play($instanceid);

}

function random_file($path, $extensions='', $recursive=true) {

 for($i=0; $i < 20; $i++) {
  $result=random_file_ex($path, $extensions, $recursive);
  if($result) {
   return $result;
   exit;
  }
 }

}

function random_file_ex ($path, $extensions='', $recursive=true) {

 if ($handle = opendir($path)) {
   while (false !== ($file = readdir($handle))) {
	   if ($file != "." && $file != "..") {
		 if(is_dir($path.$file)) {
		  if($recursive) {
		   $filearray[]=$file;
		  }
		 } else {
		  $ext = strrchr($file, '.');
		  if(!$extensions || strtolower(".".$extensions) == strtolower($ext)) {
		   $filearray[]=$file;
		  }
		 }
	   }
   }
   closedir($handle);
 }
 
 if(!isset($filearray)) {
  return FALSE;
 } else {
  srand((float)microtime() * 1000000);
  shuffle($filearray);
 
  if($recursive) {
   if(is_dir($path.$filearray[0])) {
	return random_file($path.$filearray[0]."/", $extensions, $recursive);
	exit;
   }
  }
  
  return $path.$filearray[0];
  
 }

}


Grüße, paresy

Wenn du die ID3 Tag Klasse eingebaut hast, wäre es nett, wenn du dein Script veröffentlichen würdest :slight_smile:

Hallo,

das nenn ich schnell, Danke nochmals.

Dein Script hat mir einen ganz anderen Weg aufgezeigt und die FileStatus Variable ist Super.

Jetzt möchte ich auch mal etwas zurückgeben.

Kurze Anleitung zum auslesen des ID3-Tags

ID3-Tag

-Variablen anlegen (string)
(Player1_)Filename
Titel
Artist
Album
Jahr
Genre
Track
Das Player1_ habe ich vorangestellt, da ich mit mehreren Playern arbeite.

-installieren von PEAR.php
http://pear.php.net/package/PEAR
in den scripts Ordner kopieren

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : ID3_Tag.ips.php
Trigger  : 
Interval : 
*/
require_once 'scripts/Id.php';

// Instanz erzeugen und Datei lesen
$pfad= GetValueString ("Player1_Filename"); //Statusvariable des DXMediaplayers
$pfad= "W:" . $pfad; //das W: muss ich vor den Pfad setzen (Netzlaufwerk) 
$id3 = &new MP3_Id();
$result = $id3->read($pfad);
if (PEAR::isError($result)) {
die($result->getMessage() . "
");
}

// Feldwerte lesen und in Variablen ausgeben
SetValueString  ("Player1_Titel", $id3->getTag('name'));
SetValueString  ("Player1_Artist",$id3->getTag('artists'));
SetValueString  ("Player1_Album", $id3->getTag('album'));
SetValueString  ("Player1_Jahr",$id3->getTag('year'));
SetValueString  ("Player1_Genre", $id3->getTag('genre'));
SetValueString  ("Player1_Track", $id3->getTag('track'));
?>
  • das Script ID3_Tag bei Bedarf aufrufen

Dann hat man alle relevanten Daten in den Variablen stehen und kann
sie überall benutzen. Ich lasse mir Sie im Webbrowser anzeigen.

Viel Spaß

Jetzt muss ich nur noch das abspielen von Streams in den Griff bekommen,
dann habe ich ein Super-komfortables Musiksystem.

Gruss
Holger

Hallo,

klasse Beitrag :slight_smile: .

@IPS-Team
Verschiebt ihr diesen Beitrag bitte in den Bereich „Anleitungen…“.

Danke, Keule

Moin Zusammen,
also manchmal scheint es mir so, als wenn mir irgendwelche Teile fehlen.
Jetzt wahr ich gerade auf der Suche nach einem Script, das die Lautstärke ändern kann und stosse dabei auf diesen Thread.
Natürlich gleich ein
DXMedia_Open(19507, „mp3datei.mp3“);
ins script geschrieben, ausgeführt und Fehlermeldung kassiert:
Call to undefined function DXMedia_Open() in Line 13.
Warum denn das jetzt?
Hab in der Hilfe von IPSymcon und dem PHP Handbuch geforscht, aber den Befehl nirgends gefunden. Muß hier erst noch mehr eingebunden werden?
Gruß (verzweifel…)
Florian
P.S. Liveupdate natürlich gemacht, Datei device.dxmedia.dll ist im modules Verzeichnis vorhanden.

Hallo wasserflo,

mit DXMedia kenne ich mich leider nicht aus… aber wenn du die Mastervolume deines Rechners steuern willst kann ich dir mir einem kleinen Trick helfen. Ich rufe dazu das externe Programm ‚nircmd‘ via IPS auf. Dadurch steuere ich per Fernbedienung der Lautstärke der Sprachausgabe (bzw. aller Audioausgaben) in 8 Stufen. Falls dein Problem bzgl. der Lautstärkesteuerung weiterhin besteht suche ich dir die entsprechenden Informationen raus und poste sie hier.

Grüsse,
Oliver

Du musst vorher natürlich eine Instanz des Device->DirectX Media Player Moduls erstellen. Dort kannst du dann die Soundkarte auswählen.

Dann sollte auch die Funktion vorhanden sein.

Grüße, paresy

Vielen Dank erstmal für die Antworten.
Mit dem nircmd funktioniert die lautstärke Regelung zwar prima, aber nachdem ich gesehen habe was das SXMedia ‚Ding‘ kann würde ich es auch gerne einsetzen.
Nach dem anlegen der Instanz und dem zuordnen der Variablen ging aber erstmal nichts.
Ich mußte erst das IPSymcon neu starten bevor es dann losging.

Danke

Florian