STed2上の演奏と独自インターフェースについて(VirMIDIとrcpplayを使用した例・後半)
「STed2上の演奏と独自インターフェースについて(VirMIDIとrcpplayを使用した例・前半)」の続き。
STed2上の設定
問題がなければ、STed2の設定ファイルの外部プレーヤの設定を更新し、他の「player」行があれば、行頭に「*」を付けてコメントにする。ファイル名: ~/.sted2rc
#player=1,rcpplay --dev0 /dev/snd/midiC2D0 --dev1 /dev/snd/midiC2D1
「#player=1」の数字部分はプレーヤの種類を知らせるのに必要で、パッチ済みTiMidity++ 1と同様、「3」ではうまくいかず、「1」指定で動作した。コマンド名はrcpplayにする。
STed2上の操作
再生位置の表示はできたが、一時停止はできなかった。音色テストなども、TiMidity++ 1と同様に機能していない。ここまでの作業を行えば、TiMidity++ 2を使用してSTed2上で
- 2ポートまでの演奏
- 演奏位置表示
- 演奏モニタ
- リアルタイムでのトラックミュート/ミュート解除
が全て行える。
ポート接続の他の形(好みの問題)
もし、下のようにASeqView経由でTiMidity++に接続するのが気に入らなければ、その代わりに
- VirMIDIの0番 > TiMidity++の0番
- VirMIDIの1番 > TiMidity++の1番
というポート接続を行い、下のように、「VirMIDIの出力ポートからTiMidity++とASeqViewへ分岐する」形にすることもできる。
更にASeqViewが不要なら、ASeqViewを起動せずに、ポート接続を上の2つのみにすればよい(画像は割愛)。
ポート接続の手動操作はaconnectというコマンドで行うこともできるが、作業を自動化するのでなければ、GUIのQjackCtl(http://qjackctl.sourceforge.net/)を使用するのが分かりやすくておすすめ。
注意点(仕様)
以下の動作は仕様となる。- TiMidity++上の音の鳴りと画面上の表示には少し「ずれ」が起こる。
- TiMidity++のポートがどこか*1と接続している間は「データ再生中」扱いで、音を出さなくてもTiMidity++がCPUを使用し続ける。
ALSA MIDI(実)デバイスを使用する場合の覚え書き
実デバイスを使用している場合、/dev/midi[カード番号]か/dev/snd/midiC[カード番号]D0が直接使用できるが、(手元のSC-8820では)これらのデバイスを使用中には$ aplaymidi -l Port Client name Port name 20:0 SC-8820 SC-8820 Part A 20:1 SC-8820 SC-8820 Part B 20:2 SC-8820 SC-8820 MIDI $ aplaymidi -p 20:0 [midファイル] Cannot connect to port 20:0 - Resource temporarily unavailable
上のように、ALSAのポートが一時的に使えなくなるため、これが問題になる場合、
「VirMIDI > 音源」という接続を作成し、Raw MIDIデバイスを指定する側が/dev/snd/C[カード番号]D[デバイス番号]を指定することで、ALSAのポートも使用できるようになる。
複数ポートを同時に使用する演奏に関しては、提供されるデバイスファイルが1つ(下の例では/dev/snd/midiC1D0)なのでできないようにも見えたが、
$ smfplay --dev0 /dev/snd/midiC1D0 --dev1 /dev/snd/midiC1D0 [midファイル]
のように、同一のデバイスファイルを指定することでできた*2ため、複数ポート演奏目的でVirMIDIを使用する必要はなさそう。
なお、
$ smfplay --dev0 /dev/midi1 --dev1 /dev/midi1 [midファイル]
ではうまくいかなかった。
使用したバージョン:
- ALSA 1.0.15, 1.0.16
- TiMidity++ 2.13.2(2.13.2-r5)
- ASeqView 0.2.8