これは、もう純粋に楽しい機能でした。ここ数週間、プレーヤーを眺めながら「20年前の深夜の Winamp セッションで味わったような、フルスクリーンの映像的な気晴らしがあってもいいのでは」と考えていたのですが、この週末、ついに考えるのをやめて実装しました。
Zenteek に Milkdrop Visualizer が追加されました。内部では、オリジナルの Milkdrop エンジンのオープンソース継承版である projectM-4 が動いています。昔からオンラインでやり取りされてきた .milk のプリセットファイルをそのまま読み込み、Zenteek は音声サンプルのストリームと描画先のウィンドウを渡すだけです。
起動は Window -> Visualizer, から行えます。昔ながらのショートカットを指が覚えている方は、もちろんそちらでも大丈夫です。
下部には細いステータスバーがあり、前後移動の矢印とプリセットピッカーが並びます。名前をクリックすると利用可能なものがすべてスクロール可能な一覧で表示され、現在のプリセットはアクセントカラーでハイライトされます。ウィンドウにフォーカスがある状態なら、矢印キーでも切り替えられます。
同梱セットは少数精鋭です。projectM プロジェクトから選び抜いた、いわばよりすぐりのセレクションです。さらに追加したい場合は、MilkdropPresets フォルダへご自身の .milk ファイルを Application Support 内に置いていただければ、次回ピッカーを開いたときに表示されます。再起動も再スキャンボタンも不要です。同じファイル名の別バージョンをお持ちなら、同名で同梱プリセットを上書きすることもできます。
ひそかに気に入っている点が二つあります。
- まず、audio tap は DSP chain と volume knob の手前に置いてあるため、どれだけ小音量で聴いていても、低音のアタックは低音のアタックのままです。音量を下げたからといって、映像だけが平坦になってしまうことはありません。
- 次に、visualizer ウィンドウが非表示、または完全に他のウィンドウに隠れている場合は、audio tap を停止し、レンダリングも一時停止します。誰も見ていない絵のために GPU のサイクルを消費することはありません。
すべてが順調だったわけではありません。世の中の凝ったプリセットの中には、ビットマップテクスチャ--ランダムノイズやフラクタルパターンなど--を参照するものがあり、しかもそれらはプリセット本体に埋め込まれていません。projectM がそれを見つけられないと、レンダーループがクラッシュしてしまいます。そこで、保険を二重三重にかける形にしました。問題のあるプリセットは次回起動時に自動で隔離され、ピッカーからも消えるため、クラッシュループに閉じ込められることはありません。テクスチャ依存のものをきちんと動かしたい場合は、MilkdropTextures フォルダに必要な素材を追加していただけます。
今回は、半分は地味な配線作業、もう半分は私が1時間ほどうねうねした映像を眺めて「これは研究です」と言い張っていた、そんな週末プロジェクトでした。