home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Aplikacje_64-bitowe / Mixxx / mixxx-1.9.0-win64.exe / midi / convertToXMLSchemaV1.php < prev    next >
Text File  |  2010-12-02  |  3KB  |  109 lines

  1. #!/usr/bin/env php
  2. <?php
  3. /***************************************************************************
  4.  * This small script converts Mixxx MIDI Presets from the 1.6.X XML format *
  5.  * to the new schema v1 format introduced in Mixxx 1.7.0.                  *
  6.  *                                                                         *
  7.  * The changes applied are thus:                                           *
  8.  *    1) Add MixxxMIDIPreset tag                                           *
  9.  *    2) Add info tag and children                                         *
  10.  *    3) convert midichan and midino values to hexadecimal                 *
  11.  *                                                                         *
  12.  * Contributed to Mixxx by Mad Jester (Phillip Whelan)                     *
  13.  *      pwhelan <at> exis.cl                                               *
  14.  *                                                                         *
  15.  **************************************************************************/
  16.  
  17. /* Indent the XML file for readability */
  18. function indent($xml)
  19. {
  20.     $doc = new DOMDocument('1.0');
  21.     
  22.     $doc->preserveWhiteSpace = false;
  23.     $doc->loadXML($xml->asXML());
  24.     $doc->formatOutput = true;
  25.     
  26.     return $doc->saveXML();
  27. }
  28.  
  29.  
  30. function fileToControllerName($file)
  31. {
  32.     $name = substr($file, 0, strpos($file, '.'));
  33.     
  34.     return preg_replace('/_/', ' ', $name);
  35. }
  36.  
  37.  
  38. /* Carry out the actual conversion */
  39. function convert_xml($file)
  40. {
  41.     ($old = simplexml_load_file($file)) || die("Unable to Load MIDI XML File: $file\n");
  42.  
  43.     // Create the file with default values
  44.     $new = simplexml_load_string(
  45.     "<MixxxMIDIPreset schemaVersion=\"1\" mixxxVersion=\"1.7.0+\">
  46.       <info>
  47.         <name>{$file}</name>
  48.         <author>Auto-converted by madjesta's PHP script</author>
  49.         <description>Auto-conversion of the file {$file}</description>
  50.       </info>
  51.       <controller id=\"".fileToControllerName($file)."\" port=\"\">
  52.       </controller>
  53.     </MixxxMIDIPreset>
  54.     "
  55.     );
  56.  
  57.     
  58.     // Add Controls to Controller Node
  59.     $controls = $new->controller->addChild("controls");
  60.     
  61.     // get the control children
  62.     $oldControls = $old->children();
  63.  
  64.     // Here we perfom the actual conversion and moving of the values to the
  65.     // new file.
  66.     foreach( $oldControls->children() as $oldControl ) {
  67.         $control = $controls->addChild("control");
  68.         
  69.         foreach($oldControl->children() as $k => $v) {
  70.             if ((($k == "options"))) {
  71.                 $options = $control->addChild("options");
  72.                 
  73.                 foreach($v as $ko => $vo) {
  74.                     $options->addChild($ko, $vo);
  75.                 }
  76.                 
  77.                 continue;
  78.             }
  79.             
  80.             if ((($k == "midino") || ($k == "midichan")) && !preg_match('/0x\d*/', $v))
  81.                 $v = sprintf("0x%02x", (integer)$v);
  82.             
  83.             $control->addChild($k, $v);
  84.         }
  85.     }
  86.     
  87.     if ( isset($old->lights)) {
  88.         // Add outputs to the new XML file
  89.         $outputs = $new->controller->addChild("outputs");
  90.         
  91.         $lights = $old->lights->children();
  92.         
  93.         foreach ($lights as $light) {
  94.             $output = $outputs->addChild("output");
  95.             
  96.             foreach($light as $k => $v)
  97.                 $output->addChild($k, $v);
  98.         }
  99.         
  100.     }
  101.     
  102.     return indent($new);
  103. }
  104.  
  105. // Print out the files conversion
  106. print convert_xml($argv[1]);
  107.  
  108. ?>
  109.