2025/04/10 00:42 Enhancing Your MIDI Devices: Round II

やあ、ロボ子。今回のITニュースはMIDIデバイスの強化についてじゃ。

MIDIデバイスの強化ですか、博士。具体的にはどのような内容なのでしょう?

ふむ、記事によると、CPANパッケージの`MIDI::RtController`などを使って、キーやパッドの押下で単一のノートをトリガーする以外の方法でMIDIデバイスを機能させるらしいのじゃ。

`MIDI::RtController`ですか。これはどのような役割を果たすのでしょう?

`MIDI::RtController`は、入力と出力の属性が必要で、これらは`MIDI::RtMidi::FFI::Device`のインスタンスに変換されるのじゃ。非同期的に動作するために、`IO::Async::Loop`と`IO::Async::Channels`を使用するらしいぞ。

`IO::Async::Channels`はMIDI入力として機能し、入力デバイスからのメッセージを処理し、フィルタを適用して送信するのですね。

その通り!フィルタを使うことで、MIDIデバイスをリアルタイムに制御できるのがミソじゃ。記事では、`add_filter`、`send_it`、`delay_send`、`run`の4つのメソッドが紹介されているぞ。

独自のフィルタを作成することも可能なのでしょうか?

もちろんじゃ!`MIDI::RtController::Filter::Math`を参考例として使えるぞ。これは"stair-step"フィルタを実装しているらしい。

"stair-step"フィルタですか。具体的にどのような動作をするのでしょう?

`feedback`属性でステップ数を設定できて、`up`と`down`属性に基づいてノートを計算するのじゃ。各ノートは`up`の値でインクリメントされ、次のノートは`down`の値でデクリメントされる。`feedback`の値によってステップ数が決まるらしい。

なるほど、面白いですね。MIDIデバイスの確認方法についても触れられていますね。

`MIDI::RtMidi::FFI::Device`ディストリビューションのサンプルプログラムや、クロスプラットフォームプログラム`ReceiveMIDI`を使うと良いらしい。例えば、`receivemidi list`を実行すると、システムに認識されているMIDIデバイスが表示されるぞ。

記事には`fluidsynth`の起動例も記載されていますね。`-a coreaudio -m coremidi -g 2.0 ~/Music/soundfont/FluidR3_GM.sf2`というコマンドですね。

そうじゃ。`-a coreaudio`はオーディオドライバとしてcoreaudioを、`-m coremidi`はMIDIドライバとしてcoremidiを使用することを意味する。`-g 2.0`はゲインを2.0に設定している。MIDI再生が静かな場合に便利なのじゃ。

CPANには、`MIDI::RtController::Filter::Tonal`と`MIDI::RtController::Filter::Drums`というトーンおよびドラムフィルタも存在するのですね。

その通り!これらのフィルタにはサンプルプログラムも含まれているから、すぐに試せるぞ。さらに、`curry`関数を使うと、オブジェクト指向メソッドをCODEリファレンスとしてスムーズに参照できるらしい。

今回の記事は、MIDIコントローラーを強化するための様々な方法を紹介していて、大変勉強になりました。

じゃろ?より完全な実世界の例として、`rtmidi-callback.pl`のコードを参照すると良いらしいぞ。…ところでロボ子、MIDIコントローラーで肩も揉めるように改造できないかの?

博士、それはもはやコントローラーではなく、ただのマッサージ機です!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
