'Z:/studio/eJay/Samples/', 'J:/musique/Samples/' => 'X:/musique/Samples/', 'J:/Samples/' => 'X:/Samples/', 'G:/eJay/MusicDirectorPro/musicdirector/Import/' => 'X:/musique/Files/MusicDirector/Import/', ); // INTERNAL ROUTINE // Each 10 samples (?) $line_sequence = chr(1) . chr(128) . chr(86) . chr(64); // Each sample (we ignore 8*NUL bytes here) $sample_sequence = chr(240).chr(191); // Samples list begins at byte 340 $begin_pos = 339; $songs = array(); $files = array(); $view = true; foreach ($_SERVER['argv'] as $key=>$arg) { if ($key == 0) continue; if ($arg == '--replace') { $view = false; continue; } if (!file_exists($arg)) die("File '$arg' doesn't exists.\n"); if (is_dir($arg)) continue; $files[] = $arg; } if (empty($files)) die("Syntax: ".$_SERVER['argv'][0]." /home/me/MD_files/*\n"); foreach ($replace_paths as $old=>$new) { unset($replace_paths[$old]); $old = str_replace('/', '\\', $old); $new = str_replace('/', '\\', $new); $replace_paths[$old] = $new; } echo "Extracting samples path from MDX files...\n"; foreach ($files as $file) { if (!preg_match('!\.mdx$!i', $file) || preg_match('!\.replaced\.mdx$!i', $file)) continue; $songs[$file] = array('samples' => array()); $fp = fopen($file, 'rb'); $songs[$file]['begin'] = fread($fp, $begin_pos); $content = fread($fp, filesize($file) - $begin_pos); fclose($fp); // Cut after the last sample $songs[$file]['offset'] = strrpos($content, $sample_sequence); $line = substr($content, 0, $songs[$file]['offset']); if (!$view) $songs[$file]['end'] = substr($content, $songs[$file]['offset']+2); $current = ''; $chars = unpack("C*0", $line); foreach ($chars as $idx=>$char) { if ($char == 0 || $char == 19) continue; $current .= chr($char); if (substr($current, -4) == $line_sequence) { if ($current) $songs[$file]['samples'][] = substr($current, 0, -4); $current = ''; continue; } elseif (substr($current, -2) == $sample_sequence) { if ($current) $songs[$file]['samples'][] = substr($current, 0, -2); $current = ''; continue; } } if ($current) $songs[$file]['samples'][] = $current; } if ($view) { echo "I'll replace those paths :\n\n"; foreach ($songs as $file=>$song) { echo $file . "\n"; foreach ($song['samples'] as &$sample) { echo "\t" . $sample . "\n"; echo "\t => ".strtr($sample, $replace_paths)."\n"; } echo "\n"; } die("Nothing done. Use --replace to replace paths in MDX files.\n"); } else { foreach ($songs as $file=>&$song) { $new_file = str_ireplace('.mdx', '.replaced.mdx', $file); $fp = fopen($new_file, 'wb'); fwrite($fp, $song['begin']); foreach ($song['samples'] as &$sample) { fwrite($fp, strtr($sample, $replace_paths)); // 8 * NUL + sample sequence fwrite($fp, chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).$sample_sequence); } fwrite($fp, $song['end']); fclose($fp); echo "$file -> $new_file\n"; } } ?>