久々にスキンをリリースしました。画像入りの完成形スキンのリリースはPictureBrowser以来です。
今回作成したのはWINAMPコントロールと曲情報に加え、アルバムジャケットの画像をネットより取得して表示するというものです。このようなWidgetは他に数多くあるものの、Rainmeterのスキンではあまり見ないので作ってみました。
実際作る前から分かっていたことですが、これはどう考えてもRainmeterだけでできることではありません。そこで最初は簡単なスクリプトを作って試してみたものの、うまくいきません。一番の問題は、曲が切り替わる毎にスクリプトを動かすコマンドを送って、それにあわせてスキンを更新という具合にしたいのですが、通常の場合のように一曲単位で分かれている場合は曲と曲の変わり目がRainmeter側で測定することができるため、このようなことが可能になるかもしれませんが、ネットラジオのように曲同士がつながっている場合には通用しません。そこでAMIPというWINAMPのプラグインの手を借りることにしました。
このAMIPは元々はWINAMPで再生中の曲をmIRCでIRCのコメントとして融合させるためのプラグインでしたが、曲の切り替えタイミングで任意のテンプレートを出力したり、バッチコマンドを送ったりと最近では汎用的なプラグインとして実装されています。今回のスキン作りに正に打ってつけのプラグインといえます。
今回のスキンの動作のカギとなるのがAMIPの機能のひとつで、AMIPの変数を仕込んだテンプレートをあらかじめ用意しておいて、曲の変わり目にその変数をアーティスト名や曲名などに置き換えて、指定したファイル名で出力するというものです。さらに出力後、スキンにコマンドを送ってリフレッシュさせることでこのスキンの機能が実現されるようになります。
これ以外にも、AMIPは実に多くの機能を備えていて、プレイヤー情報の取得から出力、コマンド送信と何でもやってこなす実力があります。どうせ外部プラグインの力を借りるなら、AMIPにできることは極力AMIP側に任せてた方が得策と思い、今回はプレイヤー情報の取得などはAMIPで取得したものをRainmeterで表示するというようにしています。
これはRainmeter側にはかなりの負担軽減になります。
RainmeterでWINAMPの情報を取得するには必然的にMeasureを作る必要がありますが、AMIPにそれを分担させればRainmeter側はそれを表示させるMeterだけで済んでしまいます。
プレイヤーの制御もAMIP側でできるよう(未確認)ですが、今回はボタン表示との兼ね合いもありRainmeter側でやった方が賢明と考え、そうするようにしました。
AMIPの多機能ぶりはさておき、特に出力に関する機能は強力です。例えば、指定したタグがその曲に付いていればタグどおりに、付いていなければ違う形式で出力するという<TRUE | FALSE>だとか、もしアーティスト名がXXだったらOOで出力するとか、さらには正規表現まで使用し強力な置換えをすることまで可能です。
中でもURLエンコードして出力してくれるのには関心しました。WebParserで情報を取得する際、URLにスペースや日本語が含まれていると受け付けないサーバーもあるため、この機能はとても有り難いです。
というわけで何とかこんな形で完成することができました。が、あまり十分な動作テストを行っていないので今後どのような不具合に遭遇するか一抹の不安がありますが、現状目立った挙動は確認してません。
今後の基本機能の改良点として、現状の仕様では同じアルバムの曲を聴いていても、曲が切り替わるたびネットにアクセスして、再度同じ画像を取得してきて非効率ですので、できれば、一度表示した画像はローカルに保存するようにして、もしローカルフォルダになければ、ネットから取得という具合にできるような構造にしたいと思います。
また、今回はプラスαの機能として検索リンク機能を実装しましたが、他にも動的な曲名やアーティスト名といった情報を利用して何か面白いことができないか模索しています。