Wine上でgm.dls(MSGS)の音でMIDIデータを演奏したものを録音してオーディオデータとして保存する
MIDI形式のデータは演奏情報なので、音源データと組み合わせた上でTiMidity++のようなツールを用いることにより、オーディオデータへの変換処理を行うことができる*1のだが、WineでWindowsのソフトウェアMIDI音源gm.dls*2を用いてMIDIデータからオーディオデータを得ることはそのままではできないが、PulseAudioを用いることにより録音を行い、オーディオデータとして保存することはできる。
(2010/4/13)オーディオ出力をALSAにして「OpenGLアプリケーションが快適にキャプチャできるglcについて(概要/インストール/Mandriva Linux向けパッケージ)」「OpenGLアプリケーションが快適にキャプチャできるglcについて(キャプチャ、再生、エンコード)」のglcを用いてキャプチャ後WAVEオーディオを抽出する方法などもあり、そちらのほうが手っ取り早い気もする。
準備
Wineでgm.dls(MSGS)の音を鳴らせるようにする
この部分は以前書いたことがあるので詳しくは書かないが、Wineにはgm.dlsは含まれていないため別途用意する必要があり、Wineのバージョン1.1.23の時点ではWindowsネイティブ版DirectXも必要。*3
- DirectX 8の再配布可能パッケージからgm.dlsを取り出す(「Wine上でMicrosoft GS Wavetable SW Synth(MSGS・ゲイツシンセ)の音を鳴らす(gm.dlsの入手とDirectMusic対応プレーヤによる再生)」を参照)
- Windowsネイティブ版DirectXをインストール(「Wine上でMicrosoft GS Wavetable SW Synth(MSGS・ゲイツシンセ)の音を鳴らす(WindowsネイティブDirectXのDLLを使用)」を参照)
DirectMusic対応のMIDIプレーヤを入手
VectorのMIDIプレーヤのディレクトリなどからDirectMusic対応のMIDIプレーヤを探してダウンロードする。「Wine上でMicrosoft GS Wavetable SW Synth(MSGS・ゲイツシンセ)の音を鳴らす(gm.dlsの入手とDirectMusic対応プレーヤによる再生)」の追記に書いたように、DirectMusicのサンプリング周波数の既定値が22050Hzのためか、プレーヤによっては44100Hzで再生することができないため、22050Hzで録音/保存したい場合はどのDirectMusic対応プレーヤでもよいが、44100Hzで録音/保存したいのであればDMRPlayerを選択するのが良さそう。
WineでPulseAudioから音を鳴らせるようにする
WineのPulseAudioドライバがインストールされている必要があり、これについては「Wine上の音声をPulseAudioへ渡す」の追記を参照。なければ、その記事のようにALSAのプラグインを利用するように設定するか、別途ドライバをビルドして/usr/lib(32)/wine/以下に配置する。
winecfg設定ツールの「オーディオ」タブで「PulseAudio Driver」にチェックが入っていればPulseAudioから音声が出る。また、「Wine上の音声をPulseAudioへ渡す」の追記にも書いたように「ハードウェアアクセラレーション」の設定は「エミュレーション」を推奨。
録音
準備したMIDIプレーヤを起動して変換したいMIDIファイルを開いて再生し、PulseAudioのオーディオストリームを保存する。
方法は
- parecコマンドで録音した生オーディオストリームをsoxでWAVE形式に変換(http://bbs.archlinux.org/viewtopic.php?id=68706 などを参照)
- 「PulseAudioのWAVE保存ツールをパッケージ化」のPaRecWaveでWAVE形式に保存
などがある。
データ再生/録音をしている途中には音飛びが発生する可能性があるため
- 録音中は別のアプリケーションは動かさず、他の作業も行わない
- cpufreqが動いている場合、一時的に最大のクロック周波数になるようにする・cpufreqdを使用している場合は最大のクロック周波数で動作するプロファイルを(なければ用意して)手動で選択し、cpufreqに関するデーモンが動いていない場合はcpufreq-setで直接指定する
- PulseAudioやプレーヤのnice値を下げて高い優先度で実行する
などの工夫をするとよい。
加工
AudacityでWAVEファイルを開いて曲の前後の空白部分を切り取り*4、好きな形式に書き出して使用する。
関連記事:
- 動的にCPUクロックや電圧を変更するcpufreqの概要とcpufreqdデーモンについて
- Wine上でMicrosoft GS Wavetable SW Synth(MSGS・ゲイツシンセ)の音を鳴らす(WindowsネイティブDirectXのDLLを使用)
- Wine上でMicrosoft GS Wavetable SW Synth(MSGS・ゲイツシンセ)の音を鳴らす(gm.dlsの入手とDirectMusic対応プレーヤによる再生)
- Wine上の音声をPulseAudioへ渡す
- cpufreqdのプロファイル手動切り替え/モード切り替え用システムトレイツールをC言語のGTK+で作り直し
- PulseAudioのWAVE保存ツールをパッケージ化
- GNU/Linuxにおけるプロセスの優先度指定について
- OpenGLアプリケーションが快適にキャプチャできるglcについて(概要/インストール/Mandriva Linux向けパッケージ)
- OpenGLアプリケーションが快適にキャプチャできるglcについて(キャプチャ、再生、エンコード)
- RPGツクールXP/VX作品をWine上で動かす際のMIDIデータ(BGMとME)の再生に関する強引な対処
使用したバージョン:
- Wine 1.1.23
- PulseAudio 0.9.15