FluidSynth/QsynthでサウンドフォントをリアルタイムなALSAのMIDI音源として使用
TiMidity++とFluidSynth
サウンドフォントはTiMidity++から使用することができるが、FluidSynthというツールを用いることで、ALSA上で使用可能なソフトウェアMIDI音源として動作することもできる。
TiMidity++をALSAのMIDI音源として使用*1すると音が遅れて出るという問題があるが、FluidSynthは遅延が非常に短いのもメリット。逆に、過去のMIDI音源向けのデータを読ませたりすると、TiMidity++よりもひどい演奏になったりすることも多い。また、TiMidity++と違って、設定ファイルで音色単位で音量や左右の振りを調整するといったこともできない。
TiMidity++と比べると、再生よりもオーディオ作成用途に向いている気がする。
Qsynthについて
FluidSynth自体はCLIのツールとなっていて、対話シェル上でサウンドフォントを読み込んだり各種調整を行ったりするのだが、これでは使いにくいため、Qsynth(http://qsynth.sourceforge.net/)というGUIが存在する。これは、JACK Audio Connection KitのGUIであるQjackCtl(http://qjackctl.sourceforge.net/)の姉妹品っぽい。
以下はQsynthを使用した覚え書きとなっている。
PCMオーディオの出力
ALSA PCMもしくはJACK Audio Connection Kitのいずれかを利用できる。別のアプリケーションで録音したい場合なども含め、JACK Audio Connection Kitを推奨。
エンジンとバンク・音色
1つの「音源」として扱えるひとまとまりを「エンジン」といい、制御用のMIDIポートはエンジンごとにそれぞれ用意される。
各エンジンでは、「Setup...」ボタンからMIDI/オーディオ出力/サウンドフォントの設定が行える他、音量やリバーブ・コーラスの値も設定できる。
オーディオの設定では、サンプルレートの既定値が44100Hzになっているが、JACKを使用しているときに、このままだと音の高さが変わる現象が起きることがあり、その場合は、48000Hzにする。
ドラムが鳴らない?
既存のMIDIデータを再生したとき、ドラムパートが通常の楽器のパートとして演奏されてしまう場合がある。この場合、Qsynthの「Channels」ボタンを押すと出るチャンネル一覧から10チャンネルをダブルクリックしてバンク番号を「128」に指定すると、ドラムチャンネルとして使用できる。127番に独自のドラムを含むものもある。
同一エンジンに複数のサウンドフォントを含める場合の注意点
複数のサウンドフォントを1つのエンジンに含めることもできるが、バンク*2が衝突することがある。エンジン設定の「Soundfonts」タブでバンクのオフセットを指定することで、バンク番号をずらす*3ことはできるが、指定可能値が「128」までで、「128」にすると、前のフォントの128番(ドラム)と次のフォントの0番がぶつかることがあるため、ドラムを含んだタイプのものを複数使用することは難しいかもしれない。
また、バンク選択の命令*4をアプリケーションから送信する場合、アプリケーションからバンク指定できないことがある(128以上の値は送信できない)。
音色の指定について
プログラムチェンジの命令を送ることで音色を変えることもできるが、チャンネル一覧で音色のプリセットが作成でき、何番のチャンネルにどの音色を使用するかの割り当てを記憶することができる。
エンジンの設定でMIDIチャンネル数が多く(16チャンネル単位・256まで)確保できることや、上のバンク番号の指定方法(バンク番号がずれる*5/128以上のバンク番号を用いる場合がある/ドラムの指定が特殊?)などを合わせて考えると、曲ごとにプリセットを用意しておいて、MIDIデータの中ではバンクセレクトやプログラムチェンジは使用しない、という形での使い方が無難かもしれない。
ドラムに関しては、128未満のバンクのものに限り、アプリケーション側からバンクセレクトを送信すると変更できる。バンク128のものはバンクセレクトでは指定不可?
アプリケーションからの扱い
ALSA MIDIデバイスが使用できる環境上では普通にMIDIデバイスとして使用できる。Wineでも使用できるが、BGMを鳴らす用途には向かない気がする。
STed2上で音を鳴らすには、「STed2上の演奏と独自インターフェースについて(VirMIDIとrcpplayを使用した例(前半・後半)」のVirMIDIとrcpplayを使用する。外部プレーヤの設定方法もこの記事と同様。
関連記事:
- TiMidity++をWineのMIDIデバイスとして使用する
- 圧縮された形式のサウンドフォントを伸長
- TiMidity++でサウンドフォントを使用するための設定ファイルを自動生成するツール(cfgforsf)について
使用したバージョン:
- FluidSynth 1.0.8
- Qsynth 0.3.2