Z-MUSIC3.0本に付属のPCMデータをWindowsで利用しやすいように変換する
今からおよそ12年前に発売された、X68k用ミュージックドライバZ-MUSIC Ver.3.0の本に付属のCD-ROMには、多数のPCMデータが収録されています。(このPCMデータは、Z-MUSIC3.0本を持っていない方でもZ-MUSIC Home Pageのダウンロードページから入手できます。)
これを使ってみようかと思い立ったのですが、そのままではWindowsで使いにくい形式のため、Windows標準のWAVファイル形式に変換してみました。
まず、件のCD-ROM収録のPCMデータは、拡張子によって以下のような形式に分かれます。
- *.PCM
- X68k形式 15625Hz 4bit ADPCM
- *.P16
- 15625Hz 16bit(有効12bit) PCM (ビッグエンディアン)
- *.M30
- 30000Hz 16bit(有効12bit) PCM (ビッグエンディアン)
- *.M44
- 44100Hz 16bit PCM (ビッグエンディアン)
すべてモノラルです。16bit(有効12bit)となっているものは、データ形式としては16bitだが、そのうち12bit分しか有効なデータが入っていないということです。
これらをWindows標準のWAVファイルにするため、Vectorで公開されているPCMCONVを使用させていただきました。
ただ、数が多いため手作業で逐一変換していると大変なので、Rubyでスクリプトを組みました。
その際、Rubyからsystem()でPCMCONVをそのまま呼び出すと、なぜか途中で動作が固まってしまいました。どうも、PCMCONVの終了をRuby側が検知できていないような雰囲気だったので、試しにバッチを1段噛ましてみたところ、うまくいきました。
この他、PCMCONVを使う際の注意点として、DOS汎用の実行ファイルのためかロングファイルネームに対応していないようです。Z-MUSIC3.0本のPCMデータはすべて8+3文字以内のファイル名になっているので大丈夫でした。
月刊電脳倶楽部に収録されていた(AD)PCMデータなどは8+3文字を超えるファイル名の場合があるので、これらを変換する際はいったんリネームするなど、工夫が必要になります。
なお今回は、サンプリングレートはすべて元ファイルと同じままにしました。(どうせ実際の使用時にはサンプリングレートを変えると思うので) もしこの段階で変えたい場合は、PCMCONVに与える-orオプションの値を変えればいいです。
PCMtoWAV.rb
#!/usr/local/bin/ruby -Ks ######## *.PCM / *.P16 / *.M30 / *.M44形式のファイル → *.WAV形式に変換 ######## ※ActiveScriptRuby1.8.7-p72にて動作確認 require 'fileutils' if ARGV.length < 2 printf("ruby %s srcBaseDir/ dstBaseDir/\n", $PROGRAM_NAME) exit(1) end def convert(batchName, srcBaseDir, dstBaseDir, srcExt, dstExt) ## 変換元ファイル群を求める srcFilePaths = Dir.glob(srcBaseDir + '**/*.' + srcExt) ## 各変換元ファイルに対して… srcFilePaths.each { |srcFilePath| ## 変換先ファイルパスを求める dstFilePath = srcFilePath.sub(srcBaseDir, dstBaseDir) dstFilePath.sub!(Regexp.new(srcExt + '$', Regexp::IGNORECASE), dstExt) ## 変換先ディレクトリを作る dstDir = File.dirname(dstFilePath) FileUtils.makedirs(dstDir) ## 変換を実行する commandLine = "#{batchName} #{srcFilePath} #{dstFilePath}" puts commandLine ret = system(commandLine) unless ret puts "エラー発生" break end } end convert('convPCM.bat', ARGV[0], ARGV[1], 'PCM', 'WAV') convert('convP16.bat', ARGV[0], ARGV[1], 'P16', 'WAV') convert('convM30.bat', ARGV[0], ARGV[1], 'M30', 'WAV') convert('convM44.bat', ARGV[0], ARGV[1], 'M44', 'WAV')
convPCM.bat
PCMCONV.EXE -ir15625 -or15625 -if8 -of2 %1 %2
convP16.bat
PCMCONV.EXE -ir15625 -or15625 -if3 -of2 -lv16/1 %1 %2
convM30.bat
PCMCONV.EXE -ir30000 -or30000 -if3 -of2 -lv16/1 %1 %2
convM44.bat
PCMCONV.EXE -ir44100 -or44100 -if3 -of2 %1 %2
使い方:
1. PCMCONV.EXE, PCMtoWAV.rb, convPCM.bat, convP16.bat, convM30.bat, convM44.batを同じディレクトリに置く。
2. そのディレクトリに適当なディレクトリ("PCM"など)を作り、その中にZ-MUSIC3.0本付属のPCMデータを置く。
3. コマンドプロンプトで1.のディレクトリに行き、以下のコマンドを実行する。
ruby PCMtoWAV.rb PCM/ WAV/
4. WAVディレクトリの中に変換されたデータができる。