Benutzer:Rene/PlayMP3: Unterschied zwischen den Versionen

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon
Zur Navigation springen Zur Suche springen
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==Beschreibung==
==Beschreibung==
PlayMP3 ermöglicht das Einbinden des [http://emff.sourceforge.net/ EMFF Players]. Mit diesem Flash Player ist es möglich MP3 Audiodateien so in Mediawiki Projekte einzubinden das die Dateien ohne externen Player abgespielt werden können.
PlayMP3 ermöglicht das Einbinden des [http://emff.sourceforge.net/ EMFF Players]. Mit diesem Flash Player ist es möglich MP3 Audiodateien so in Mediawiki Projekte einzubinden das die Dateien ohne externen Player abgespielt werden können.
Ist keine Datei angegeben bzw. die angegebenen Dateien existieren nicht so wird der Player nicht angezeigt. Dieses Verhalten kann mit dem Parameter show verändert werden.
==Einsatz==
==Einsatz==
===Befehl===
===Befehl===
Um eine MP3 Datei abzuspielen wird das Tag '''<nowiki><playmp3></nowiki>''' benutzt.
Um eine MP3 Datei abzuspielen wird das Tag '''<nowiki><playmp3></nowiki>''' benutzt.
<pre><nowiki><playmp3>ONeill.mp3,Sga_opening_s1.mp3</playmp3></nowiki></pre> <playmp3>ONeill.mp3,Sga_opening_s1.mp3</playmp3>
<pre><nowiki><playmp3>ONeill.mp3,Sga_opening_s1.mp3</playmp3></nowiki></pre> <playmp3>ONeill.mp3,Sga_opening_s1.mp3</playmp3>
 
===Dateien===
Sollen mehrere Dateien nacheinander abgespielt werden so können diese einfach durch ein Komma getrennt angegeben werden.
Die Dateien werden einfach innerhalb des Tags angegeben. Sollen mehrere Dateien nacheinander abgespielt werden so können diese einfach durch ein Komma getrennt angegeben werden. Der benutze FlashPlayer kann nur MP3's richtig abspielen die mit 44100 Hz aufgenommen wurden [http://emff.sourceforge.net/faq/#q1 EMFF-FAQ].


===Parameter===
===Parameter===
* autostart - Der Player startet automatisch mit der ersten Datei
* autostart - Der Player startet automatisch mit der ersten Datei
* autoload - Die erste Datei wird sofort eingelsen
* repeat - Der Player wiederholt die Dateien
* repeat - Der Player wiederholt die Dateien
* shuffle - Die Dateien werden in zufälliger Reihenfolge abgespielt
* shuffle - Die Dateien werden in zufälliger Reihenfolge abgespielt
* show - Der Player wird auch angezeigt wenn keine Dateien angegeben bzw. vorhanden sind
* noerror - Es wird keine Fehlermeldung für nicht existierende Dateien ausgegeben.
* groupname="name" - Ordnet den Player einer Gruppe zu. Nur ein Player einer Gruppe kann aktiv sein
* volume=0..100 - Anfangs Lautstärke
* balance=-100..100 - Rechts / Links - Verteilung des Tons
* skin="name" - Auswahl des Playersskins. Mögliche Werte:
* skin="name" - Auswahl des Playersskins. Mögliche Werte:
:easy_glaze, easy_glaze_small,position_blue,old,old_noborder,lila,lila_info,silk_button,silk,wooden,stuttgart
:easy_glaze, easy_glaze_small, position_blue, old, old_noborder, lila, lila_info, silk_button, silk, wooden, stuttgart, standard
<pre><nowiki><playmp3 skin="name" autostart repeat shuffle>datei1.mp3,datei2.mp3</playmp3></nowiki></pre>
<pre><nowiki><playmp3 skin="name" autostart repeat shuffle>datei1.mp3,datei2.mp3</playmp3></nowiki></pre>
===Skins Übersicht===
===Skins Übersicht===
* easy_glaze <playmp3 skin="easy_glaze">Captain Samantha Carter.mp3</playmp3>  
{| width="100%" class="wikitable"
* easy_glaze_small <playmp3 skin="easy_glaze_small">Captain Samantha Carter.mp3</playmp3>  
! easy_glaze !! easy_glaze_small !! old !! old_noborder
* position_blue <playmp3 skin="position_blue">Captain Samantha Carter.mp3</playmp3>  
|-
* old <playmp3 skin="old">Captain Samantha Carter.mp3</playmp3>  
| <playmp3 skin="easy_glaze" groupname="sg">Captain Samantha Carter.mp3</playmp3>
* old_noborder <playmp3 skin="old_noborder">Captain Samantha Carter.mp3</playmp3>  
| <playmp3 skin="easy_glaze_small" groupname="sg">Captain Samantha Carter.mp3</playmp3>
* lila <playmp3 skin="lila">Captain Samantha Carter.mp3</playmp3>  
| <playmp3 skin="old">Captain Samantha Carter.mp3</playmp3>
* lila_info <playmp3 skin="lila_info">Captain Samantha Carter.mp3</playmp3>  
| <playmp3 skin="old_noborder">Captain Samantha Carter.mp3</playmp3>
* silk <playmp3 skin="silk">Captain Samantha Carter.mp3</playmp3>  
|-
* silk_button <playmp3 skin="silk_button">Captain Samantha Carter.mp3</playmp3>
! lila !! lila_info !! silk<br />[[Vorlage:Audio]] !! silk_button<br />[[Vorlage:Audio]]
:Wird von der '''Vorlage:Aussprache''' benutzt
|-
* wooden <playmp3 skin="wooden">Captain Samantha Carter.mp3</playmp3>  
| <playmp3 skin="lila">Captain Samantha Carter.mp3</playmp3>
* stuttgart <playmp3 skin="stuttgart">Captain Samantha Carter.mp3</playmp3>  
| <playmp3 skin="lila_info">Captain Samantha Carter.mp3</playmp3>  
 
| <playmp3 skin="silk">Captain Samantha Carter.mp3</playmp3>
===Anmerkungen===
| <playmp3 skin="silk_button">Captain Samantha Carter.mp3</playmp3>  
* Die Erweiterung bietet momentan den von EMFF angeboten Parameter groupname nicht. Alle Player werden automatisch der Gruppe sg zugeordnet, somit kann immer nur ein Player aktiv sein.
|-
! position_blue !! wooden !! stuttgart !! standard<br />Default Skin
|-
| <playmp3 skin="position_blue">Captain Samantha Carter.mp3</playmp3>  
| <playmp3 skin="wooden">Captain Samantha Carter.mp3</playmp3>
| <playmp3 skin="stuttgart">Captain Samantha Carter.mp3</playmp3>
| <playmp3 skin="standard">Captain Samantha Carter.mp3</playmp3>
|}


==Probleme, Ideen==
==Probleme, Ideen==
* Aktuell kann die Erweiterung nur eine einzelne Datei verarbeiten. Die nächste Version wird auch mehrere Dateien als Playliste verarbeiten (hoffentlich).
* Playlisten werden bis auf weiteres nicht unterstützt.
* Nicht alle möglichen Fehler werden behandelt. Nicht vorhandene Dateien werden einfach ignoriert.
* Nicht alle möglichen Fehler werden behandelt.
* Variablen <nowiki>{{{1}}}</nowiki> werden nicht ersetzt. In Vorlagen sollte die Erweiterung daher so benutzt werden: <nowiki>{{#tag:playmp3|Datei|Parameter1|Parameter2...}}</nowiki>
* Variablen <nowiki>{{{1}}}</nowiki> werden nicht ersetzt. In Vorlagen sollte die Erweiterung daher so benutzt werden: <nowiki>{{#tag:playmp3|Datei(en)|Parameter1|Parameter2...}}</nowiki>
* Probleme wenn <nowiki></playmp3></nowiki> fehlt
* Probleme wenn <nowiki></playmp3></nowiki> fehlt


Zeile 68: Zeile 84:
  *  <playmp3 skin="name" autostart repeat shuffle>mp3</playmp3>
  *  <playmp3 skin="name" autostart repeat shuffle>mp3</playmp3>
  *
  *
* Parameters :
*  skin="name" - define skin (look EMFF for skin names)
*  autostart - player will start after page is loaded
*  autoload - load the first file after page is loaded
*  repeat - play loop
*  shuffle - mix the playlist
*  shortcuts - enable key shortcuts
*  volume=0..100 - initial volume
*  balance=-100..100 - initial balance
*  groupname="name" - name of the group
*  show - show player if playlist is empty
*  noerror - do not show error message on missing file
  * Example:
  * Example:
  *  <playmp3>music.mp3</playmp3>
  *  <playmp3>music.mp3,music1.mp3</playmp3>
*
  */
  */


Zeile 75: Zeile 105:
$wgExtensionCredits['parserhook'][] = array(
$wgExtensionCredits['parserhook'][] = array(
   'name' => 'PlayMP3',
   'name' => 'PlayMP3',
   'description' => 'Plays mp3-files in an embedded Flash-player',
   'description' => 'Plays mp3-files with embedded [http://emff.sourceforge.net Flashplayer EMFF]',
   'author' => 'René Raule',
   'author' => 'René Raule',
   'url' => 'http://www.stargate-wiki.de/index.php/Benutzer:Rene/PlayMP3',
   'url' => 'http://www.stargate-wiki.de/index.php/Benutzer:Rene/PlayMP3',
   'version' => 'v0.2'
   'version' => 'v0.32'
);
);


// Parameters
//Default Skin. Used if no skin defined
define("SKIN","silk_button");
define("SKIN","standard");
define("EXPATH","/extensions/EMFF");
define("PLAYERDIR",'/extensions/EMFF/'); // dirname(__FILE__).'/'; - better but did not work
define("DEFPARA","&amp;groupname=sg");


// Init
// Add function to MediaWiki
function wfPlayMP3() {
function wfPlayMP3() {
   global $wgParser;
   global $wgParser;
Zeile 93: Zeile 122:


// The callback function for converting the input text to HTML output
// The callback function for converting the input text to HTML output
function renderPlayMP3($input, $args) {
function renderPlayMP3($input, $args, &$parser) {
global $wgScriptPath;
  global $wgScriptPath;
    
 
  // Place where EMFF Player is stored 
  $player_path = PLAYERDIR;  
   // Parameters for the skins
   $player= array(
   $player= array(
     'easy_glaze'=>array('name'=>'emff_easy_glaze.swf','width'=>32,'height'=>32),
     'easy_glaze'=>array('name'=>'emff_easy_glaze.swf','width'=>32,'height'=>32),
Zeile 107: Zeile 139:
     'silk'=>array('name'=>'emff_silk.swf','width'=>84,'height'=>32),
     'silk'=>array('name'=>'emff_silk.swf','width'=>84,'height'=>32),
     'wooden'=>array('name'=>'emff_wooden.swf','width'=>120,'height'=>60),
     'wooden'=>array('name'=>'emff_wooden.swf','width'=>120,'height'=>60),
    'standard'=>array('name'=>'emff_standard.swf','width'=>110,'height'=>34),
     'stuttgart'=>array('name'=>'emff_stuttgart.swf','width'=>140,'height'=>30)
     'stuttgart'=>array('name'=>'emff_stuttgart.swf','width'=>140,'height'=>30)
   );
   );
   $parameters = array('autostart'=>'autostart=yes','repeat'=>'repeat=yes','shuffle'=>'shuffle=yes');
   $bool_para = array('autostart','repeat','shuffle','autoload','shortcuts');
  $text_para = array('groupname');
  $digit_para = array('volume'=>array(0,100),'balance'=>array(-100,100));
  $command_para = array('show','noerror');
  $error_out = '';
   $add = '&amp;';
   $add = '&amp;';
  $file_path = $wgScriptPath.EXPATH;
  $player_path = $wgScriptPath.EXPATH.'/';
    
    
   $params = explode("|", htmlspecialchars($input));
   // Check for commands
   $files = explode(",", array_shift($params));
  foreach($command_para as $value) {
    ${$value} = isset($args[$value]);
  }
  // Check for tag parameters
  $player_para = '';
  foreach($bool_para as $value) {
    if(isset($args[$value])) {
      $player_para .= $add.$value.'=yes';
    }
  }
  foreach($text_para as $value) {
    if(isset($args[$value])) {
      $player_para .= $add.$value.'='.$args[$value];
    }
  }
   foreach($digit_para as $value => $minmax) {
    if(isset($args[$value])) {
      $digit = $args[$value];
      if(is_int($digit)) {
        if($digit >= $minmax[0] and $digit <= $minmax[1]) {
          $player_para .= $add.$value.'='.$args[$value];
}
      }
    }
  }
    
    
  // Create playlist if more then one file
  if(count($files) > 1) {
    // TODO: create playlist
    $play_name = getMP3Title($files[0]);
  } else {
    $play_name = getMP3Title($files[0]);
  }
   // Use default skin if no skin defined
   // Use default skin if no skin defined
   if(!isset($args['skin'])) {
   if(!isset($args['skin'])) {
Zeile 132: Zeile 184:
     $args['skin'] = SKIN;
     $args['skin'] = SKIN;
   }
   }
   // copy skin parameters
   // Copy skin parameters
   $player_name = $player[$args['skin']]['name'];
   $player_name = $player[$args['skin']]['name'];
   $player_width = $player[$args['skin']]['width'];
   $player_width = $player[$args['skin']]['width'];
   $player_height = $player[$args['skin']]['height'];
   $player_height = $player[$args['skin']]['height'];
   // player parameters
 
   $player_para = DEFPARA;
  // Get files as array
   foreach($parameters as $key => $value) {
  $files = explode(",", htmlspecialchars($input));
     if(isset($args[$key])) {
 
       $player_para .= $add.$value;
   // Create list of files for the player
   $fpath = ''; $comma = '';
   foreach($files as $value) {
     if($fpath = getMP3Title($value)) {
       $play_name .= $comma . $fpath;
      $comma = ',';
    } else {
      if(!$noerror) {
        $error_out = '<div class="noprint error">Datei nicht gefunden: '.$value.'</div>';
      }
     }
     }
   }
   }
   // generate code
   // generate code
   $output = '<object type="application/x-shockwave-flash" data="';
   $output = $error_out;
  $output .= $player_path.$player_name.'" width="';
  if(strlen($play_name) > 0 or isset($args['show'])) {
  $output .= $player_width.'" height="';
    $output .= '<object type="application/x-shockwave-flash" data="';
  $output .= $player_height.'">';
    $output .= $player_path.$player_name.'" width="';
  $output .= '<param name="movie" value="';
    $output .= $player_width.'" height="';
  $output .= $player_path.$player_name.'" />';
    $output .= $player_height.'">';
  $output .= '<param name="FlashVars" value="src=';
    $output .= '<param name="movie" value="';
  $output .= $play_name.$player_para.'" />';
    $output .= $player_path.$player_name.'" />';
  $output .= "</object>\n";
    $output .= '<param name="FlashVars" value="src=';
    
    $output .= $play_name.$player_para.'" />';
    $output .= "</object>\n";
   }
   return $output;
   return $output;
}
}


// Get Wiki URL - TODO: does not work with parametrs {{{}}}
// Get Wiki URL - TODO: does not work with parametrs like {{{1}}}
function getMP3Title($file) {
function getMP3Title($file) {
   if(!$title = Title::makeTitleSafe("Image",$file)) {
 
     return '';
   if(!$fh = wfFindFile($file)) {
     return false;
  } else {
    return Image::imageUrl($file);
   }
   }
  $img = new Image($title);
  $path = $img->getViewURL(false);
  return $path;
}
}
</nowiki></pre>
</nowiki></pre>

Aktuelle Version vom 8. November 2009, 20:57 Uhr

^Beschreibung[Bearbeiten]

PlayMP3 ermöglicht das Einbinden des EMFF Players. Mit diesem Flash Player ist es möglich MP3 Audiodateien so in Mediawiki Projekte einzubinden das die Dateien ohne externen Player abgespielt werden können.

Ist keine Datei angegeben bzw. die angegebenen Dateien existieren nicht so wird der Player nicht angezeigt. Dieses Verhalten kann mit dem Parameter show verändert werden.

^Einsatz[Bearbeiten]

^Befehl[Bearbeiten]

Um eine MP3 Datei abzuspielen wird das Tag <playmp3> benutzt.

<playmp3>ONeill.mp3,Sga_opening_s1.mp3</playmp3>

<playmp3>ONeill.mp3,Sga_opening_s1.mp3</playmp3>

^Dateien[Bearbeiten]

Die Dateien werden einfach innerhalb des Tags angegeben. Sollen mehrere Dateien nacheinander abgespielt werden so können diese einfach durch ein Komma getrennt angegeben werden. Der benutze FlashPlayer kann nur MP3's richtig abspielen die mit 44100 Hz aufgenommen wurden EMFF-FAQ.

^Parameter[Bearbeiten]

  • autostart - Der Player startet automatisch mit der ersten Datei
  • autoload - Die erste Datei wird sofort eingelsen
  • repeat - Der Player wiederholt die Dateien
  • shuffle - Die Dateien werden in zufälliger Reihenfolge abgespielt
  • show - Der Player wird auch angezeigt wenn keine Dateien angegeben bzw. vorhanden sind
  • noerror - Es wird keine Fehlermeldung für nicht existierende Dateien ausgegeben.
  • groupname="name" - Ordnet den Player einer Gruppe zu. Nur ein Player einer Gruppe kann aktiv sein
  • volume=0..100 - Anfangs Lautstärke
  • balance=-100..100 - Rechts / Links - Verteilung des Tons
  • skin="name" - Auswahl des Playersskins. Mögliche Werte:
easy_glaze, easy_glaze_small, position_blue, old, old_noborder, lila, lila_info, silk_button, silk, wooden, stuttgart, standard
<playmp3 skin="name" autostart repeat shuffle>datei1.mp3,datei2.mp3</playmp3>

Skins Übersicht[Bearbeiten]

easy_glaze easy_glaze_small old old_noborder
<playmp3 skin="easy_glaze" groupname="sg">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="easy_glaze_small" groupname="sg">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="old">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="old_noborder">Captain Samantha Carter.mp3</playmp3>
lila lila_info silk
Vorlage:Audio
silk_button
Vorlage:Audio
<playmp3 skin="lila">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="lila_info">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="silk">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="silk_button">Captain Samantha Carter.mp3</playmp3>
position_blue wooden stuttgart standard
Default Skin
<playmp3 skin="position_blue">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="wooden">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="stuttgart">Captain Samantha Carter.mp3</playmp3> <playmp3 skin="standard">Captain Samantha Carter.mp3</playmp3>

Probleme, Ideen[Bearbeiten]

  • Playlisten werden bis auf weiteres nicht unterstützt.
  • Nicht alle möglichen Fehler werden behandelt.
  • Variablen {{{1}}} werden nicht ersetzt. In Vorlagen sollte die Erweiterung daher so benutzt werden: {{#tag:playmp3|Datei(en)|Parameter1|Parameter2...}}
  • Probleme wenn </playmp3> fehlt

^Copyright[Bearbeiten]

Die Erweiterung unterliegt der GPL (Version 2). Das bedeutet der Einsatz in anderen MediaWikis ist erlaubt solange der Hinweis auf den Author und die GPL erhalten bleibt. Dazu genügt, in diesem Falle, bereits der von der Erweiterung selbst erzeugte Link auf der System Seite Spezial:Version. Natürlich kann die Erweiterung auch in anderen System benutzt werden, unter Beachtung der GPL.

Über einen kleinen Hinweis (auf der Diskussionsseite) in welchem Wiki die Erweiterung eingesetzt wird würde ich mich freuen, ist aber keine Pflicht.

^Installation[Bearbeiten]

^Erweiterung[Bearbeiten]

  • Erzeuge ein neues Verzeichnis EMFF im extensions Verzeichnis.
  • In dem neuen Verzeichnis den unten angegebenen Code in die Datei player.php speichern.
  • An das Ende der Datei LocalSettings.php die folgende Zeile anfügen
require_once("$IP/extensions/EMFF/player.php");

^EMFF[Bearbeiten]

  • Das aktuelle Paket des Players von der Homepage holen.
  • Das Archiv entpacken und die *.swf Dateien aus dem Verzeichnis skins in das Verzeichnis der Erweiterung (extensions/EMFF) kopieren.

^Code[Bearbeiten]

<?php
if(!defined('MEDIAWIKI')) die();

/**
 * player Extension by René Raule to embed a flash player with mp3-files
 * http://www.stargate-wiki.de/index.php/Benutzer:Rene/PlayMP3
 *
 * This extension uses the Audio Player EMFF plugin from Marc Reicheltt
 *
 *   http://emff.sourceforge.net
 * 
 * Tag :
 *   <playmp3 skin="name" autostart repeat shuffle>mp3</playmp3>
 *
 * Parameters :
 *   skin="name" - define skin (look EMFF for skin names)
 *   autostart - player will start after page is loaded
 *   autoload - load the first file after page is loaded
 *   repeat - play loop
 *   shuffle - mix the playlist
 *   shortcuts - enable key shortcuts
 *   volume=0..100 - initial volume
 *   balance=-100..100 - initial balance
 *   groupname="name" - name of the group
 *   show - show player if playlist is empty
 *   noerror - do not show error message on missing file
 *   
 * Example:
 *   <playmp3>music.mp3,music1.mp3</playmp3>
 *
 */

$wgExtensionFunctions[] = 'wfPlayMP3';
$wgExtensionCredits['parserhook'][] = array(
  'name' => 'PlayMP3',
  'description' => 'Plays mp3-files with embedded [http://emff.sourceforge.net Flashplayer EMFF]',
  'author' => 'René Raule',
  'url' => 'http://www.stargate-wiki.de/index.php/Benutzer:Rene/PlayMP3',
  'version' => 'v0.32'
);

//Default Skin. Used if no skin defined
define("SKIN","standard");
define("PLAYERDIR",'/extensions/EMFF/'); // dirname(__FILE__).'/'; - better but did not work

// Add function to MediaWiki
function wfPlayMP3() {
  global $wgParser;
  $wgParser->setHook('playmp3', 'renderPlayMP3');
}

// The callback function for converting the input text to HTML output
function renderPlayMP3($input, $args, &$parser) {
  global $wgScriptPath;

  // Place where EMFF Player is stored  
  $player_path = PLAYERDIR; 
  // Parameters for the skins
  $player= array(
    'easy_glaze'=>array('name'=>'emff_easy_glaze.swf','width'=>32,'height'=>32),
    'easy_glaze_small'=>array('name'=>'emff_easy_glaze_small.swf','width'=>22,'height'=>22),
    'position_blue'=>array('name'=>'emff_position_blue.swf','width'=>100,'height'=>50),
    'old'=>array('name'=>'emff_old.swf','width'=>120,'height'=>55),
    'old_noborder'=>array('name'=>'emff_old_noborder.swf','width'=>91,'height'=>25),
    'lila'=>array('name'=>'emff_lila.swf','width'=>200,'height'=>55),
    'lila_info'=>array('name'=>'emff_lila_info.swf','width'=>200,'height'=>55),
    'silk_button'=>array('name'=>'emff_silk_button.swf','width'=>16,'height'=>16),
    'silk'=>array('name'=>'emff_silk.swf','width'=>84,'height'=>32),
    'wooden'=>array('name'=>'emff_wooden.swf','width'=>120,'height'=>60),
    'standard'=>array('name'=>'emff_standard.swf','width'=>110,'height'=>34),
    'stuttgart'=>array('name'=>'emff_stuttgart.swf','width'=>140,'height'=>30)
  );
  $bool_para = array('autostart','repeat','shuffle','autoload','shortcuts');
  $text_para = array('groupname');
  $digit_para = array('volume'=>array(0,100),'balance'=>array(-100,100));
  $command_para = array('show','noerror');
  $error_out = '';
  $add = '&';
  
  // Check for commands
  foreach($command_para as $value) {
    ${$value} = isset($args[$value]);
  }
  // Check for tag parameters
  $player_para = '';
  foreach($bool_para as $value) {
    if(isset($args[$value])) {
      $player_para .= $add.$value.'=yes';
    }
  }
  foreach($text_para as $value) {
    if(isset($args[$value])) {
      $player_para .= $add.$value.'='.$args[$value];
    }
  }
  foreach($digit_para as $value => $minmax) {
    if(isset($args[$value])) {
      $digit = $args[$value];
      if(is_int($digit)) {
        if($digit >= $minmax[0] and $digit <= $minmax[1]) {
          $player_para .= $add.$value.'='.$args[$value];
	}
      }
    }
  }
  
  // Use default skin if no skin defined
  if(!isset($args['skin'])) {
    $args['skin'] = SKIN;
  }
  // Use default skin if wrong skinname
  if(!isset($player[$args['skin']])) {
    $args['skin'] = SKIN;
  }
  // Copy skin parameters
  $player_name = $player[$args['skin']]['name'];
  $player_width = $player[$args['skin']]['width'];
  $player_height = $player[$args['skin']]['height'];

  // Get files as array
  $files = explode(",", htmlspecialchars($input));

  // Create list of files for the player
  $fpath = ''; $comma = '';
  foreach($files as $value) {
    if($fpath = getMP3Title($value)) {
      $play_name .= $comma . $fpath;
      $comma = ',';
    } else {
      if(!$noerror) {
        $error_out = '<div class="noprint error">Datei nicht gefunden: '.$value.'</div>';
      }
    }
  }

  // generate code
  $output = $error_out;
  if(strlen($play_name) > 0 or isset($args['show'])) {
    $output .= '<object type="application/x-shockwave-flash" data="';
    $output .= $player_path.$player_name.'" width="';
    $output .= $player_width.'" height="';
    $output .= $player_height.'">';
    $output .= '<param name="movie" value="';
    $output .= $player_path.$player_name.'" />';
    $output .= '<param name="FlashVars" value="src=';
    $output .= $play_name.$player_para.'" />';
    $output .= "</object>\n";
  }
  return $output;
}

// Get Wiki URL - TODO: does not work with parametrs like {{{1}}}
function getMP3Title($file) {

  if(!$fh = wfFindFile($file)) {
    return false;
  } else {
    return Image::imageUrl($file);
  }
}