2008 . 04 . 26
Rainmeter skins | A2
A1の後続となるスキンA2をリリースしました。
様々な改良と実験的要素を盛り込み、何度か棚上げ状態になりながらも、何とか完成に漕ぎ着けました。
覚え書きを兼ね、制作に関しての雑感をあれやこれやと書き連ねてみます。
A1からの変更点と「あれこれ」
- デザインの一新
常時置いておくサイズとして邪魔にならない程度として、Vistaのサイドバーサイズを目安にダウンサイジング。大型(高解像度)ディスプレィ用には一回り(130%)大きいサイズを用意することで対応。
あれこれ
デザインワークは答えがない分、自分が最も時間を取られるところで、全体の8割以上はこのこの作業に費やします。
これは上から最終的なスキンのデザインに至るまでの過程です。
ご覧のように全く一貫性がありません、自分でも呆れてます。
一番上のは、結局 A1 を一回り小さくしただけのようなので却下。で、2番目のは最近ありがちのよく見かけるスタイル、ありふれているので却下。そして3番目のは
2TONEを意識したものでしたが、ここで新たな発想が起こります。
これはこれで2TONE企画として A2 の簡易版を別にリリースしよう、という計画ですが、それならばフルバージョンにあたる A2 は対照的に非シンプル路線でいこうかな、ということになりました。
まぁ、そんなこんなで最終的にこんなカタチになったわけです。
歌詞の方のスキンは、当初よりレイアウトの自由度を重視して本体とは別にすることに決めていましたが、それが元でスキン同士の連携とか全体的な構造がかなり複雑になってしまいました。
- 設定変更機能を搭載
AMIPプラグイン、歌詞表示の有効/無効および色とサイズをスキン上で切り替え可能に。
あれこれ
AMIPでコールバック(プレーヤーの状態に合わせてコマンド実行する機能)の設定をすると、AMIPの設定ダイアログから「AMIPを無効」にしても、コールバックだけ完全に無効にならないという問題がありました。
そのため、もしA1を起動していない状態で(Rainmeterは起動中)プレーヤーを終了したりすると、A1に向けて送られる不要なコマンドにより「そのスキンは起動していない」旨のメッセージが現れてしまいます。
これを止めるには、プラグインフォルダのPlugin.iniを書き換える必要があります。
また、歌詞のスキンはA2本体とは別スキンとしたため、歌詞スキンを使うか使わないかでPlugin.iniを切り替える必要があったりします。
今まで個人的にはちょっとしたスクリプトをこしらえて、これらのオンオフの切り替えをしてきましたが、今回は、そのスクリプトをスキン上で実行できるような構造にしてみました。
そして、この延長として色やサイズの設定も行える機能を追加した訳です。
- 歌詞の検索表示機能の追加
再生曲の歌詞をWebで検索して取得した後、それを表示する機能を追加。
あれこれ
今回の目玉機能の一つの、歌詞を自動で取得する機能ですが、海外のサイトには少ないものの
Lyrics APIのようなものがあったり、歌詞サイト自体でリクエストに対し、直でデータ(歌詞)を返してくれるところは割と少なくないため、洋楽だけを対象にすればRainmeterでこういったスキン制作はそれほど苦労しないのですが、邦楽を視野に加えると話は別です。
やはり、上のように素直にデータを返してくれるところはなく、送られたきたレスポンスを再度解析して、またリクエストということなりますが、Rainmeter自体でそこまでさせるには難しいものがあります。
そこで、スクリプトに頼ることになります。
- Rainmeterで歌詞サイトから該当データのURLを取得
- 取得したURLを引数にスクリプトを実行
- スクリプトでデータをダウンロード
- データの文字コードを変換したのち保存
- Rainmeterで保存したデータを表示させる
全体的なプロセスはこのような形になっています。
データを保存してからそれをスキンに読み込ませる構造のため、表示されるまでの時間は比較的遅いです。また、データには歌詞以外の不要な部分含まれていて、ここから歌詞部分を抽出するためにWebPaserを使っていますが、不要部分を切り捨てて、純粋な歌詞データテキストに整形するところまでスクリプトに行わせてもよいかなと、後になって思いました。そうすれば、Quote.dllを使ってもっと単純に読み込ますことができますし。
これは今後の課題の一つです。
- コントロール系の機能強化
プレーヤーへのコントロールコマンドを従来のA1より多く搭載する。
あれこれ
今更ながら発見したことがあります。
それはボタンメーターにも他のメーター同様、
RightMouseDownAction、
RightMouseUpActionのようなイベントが使えるということです。今回はこれを利用して、一つのボタンに左右違うコマンドを割り当て、少ないボタンで多くのコマンド送信ができるよう工夫しました。
そしてもう一つ、今さら知ったこととして、
SolidColorの使い道です。
従来
SolidColorは
[Rainmeter]セクションでウィンドウ全体の色設定をしたり、イメージメーターで作ったものに対してのみにしか使われていないように思いますが、これも実はほとんどのメーターに使用できるパラメータなんですね。
例えばこちらのスキンなんかは、縞の背景を作るために、わざわざ各段にイメージメーターを作っていたわけですが、各ストリングメーターに
SolidColorを定義してやれば、その背景色に適用されるので、こんなことをしなくて済む訳です。
- 次の曲情報表示
再生中の曲が80%を過ぎると次の曲名とアーティスト名を表示する機能を搭載。
あれこれ
AMIPプラグインにはプレイリスト上の次に当たる曲の情報を出力する「$next」という関数があり、これを使って情報を引き出しています。
A1から構想はあったものの、今回初めて取り入れてみました。
(あくまで、プレイリスト上の次に当たる曲なので、シャッフルモードでは当然ですが正常動作しません。)
この関数は考え方によってはとても応用範囲が広く、たとえば、再生中に次の曲の画像など、先読みして取得しておくということも可能になるかもしれません。そうすれば、曲の切り替わりでの画像表示のタイムラグも最小限に抑えることが出来ます。
こんな機能も今後の課題としておきましょう。
- 待機状態で画像ディスプレィに
プレーヤーが起動していない状態では、再生中に取得保存した画像をランダムに並べて表示させる。
あれこれ
A1のように大胆に形を変えてしまうより、一定のサイズに固定した方がよかろうと考えました。しかし、コンテンツとなるものが空の状態で、このサイズは邪魔すぎる・・。そこで、こんな仕様にしてみました。
完全にランダムな表示なのでダブることも考えられますし、画像が少なければ少ないほど、そうなるでしょう。
また、ここまでやるなら当然それらの画像をクリックして、該当曲を再生させるという願望がでてきますが、これはちょっと一筋縄ではいかないでしょう。
- 検索リンク機能の省略化
一つの変更可能なカスタムボタンに、再生曲に対する検索リンク機能をまとめる。
あれこれ
A1では再生曲に対して検索リンクを付けるということを一つの趣旨としていましたが、A2では基本的にこういった機能は本体から外そうと考えました。
今回はカスタムボタンのサンプルコマンドという意味で一つのリンク(YouTube)だけ加えておきました。
再生曲に対する関連情報を扱う機能としては、歌詞機能同様に本体A2から切り離して、別途スキン化しようと思います。
- コールバックによる更新の見直し
不安定動作を抑えるため、プレーヤーの状態(EXIT/PLAY/PAUSE/STOP)毎によるスキン更新から、(EXIT/PLAY)時のみに変更。
あれこれ
A1では、プレーヤーの状態似合わせその都度スキン更新する仕様で、PAUSEからPLAY、PLAYからSTOPでの無駄な更新だけでなく、直にファイルなどをクリックして受動的にプレーヤーが立ち上がった場合、STOP-PLAYというそれぞれのコマンドが立て続けに送られることにより不安定な状態に陥りやすいということがありました。
この点から、A2ではPLAYとEXITのみのコールバックに限定しました。
EXITからSTOP(プレーヤー起動状態)でのスキン変化はスキン内部による判断処理によって行っています。
「Window Message.dll」を使いWINAMPの再生状態を取得することは可能ですが、起動しているか否かは判断できません。そこで、ほとんどありえない状態ならば起動していないものと見なし、それ以外なら起動しているものとする、という発想から、ボリューム値がゼロ以上ならば起動していると見なして、設定パネルの類いを隠し、逆に前回終了時の曲情報を出す仕掛けにしました。
- 画像リストの廃止
保存画像をリストに書き込み、画像取得の際、そのリストからローカルにない画像を判断していた構造を変更。
あれこれ
直接フォルダより参照して判断できないものかと、いろいろと試行錯誤しました。
WebParser.dllは、パースエラーは返してくれるものの、URL(該当ファイル)が存在しない場合はエラーを返しません(ログには記録させるものの)。よって、IFの条件分岐で次に進むというプロセスがとれません。
そこで、URLが存在しない場合には、FinishActionすら起こさないということを利用して、発想を逆転してみます。
タイマーになるMeasureを用意して、あらかじめ指定した秒を過ぎると、Webへ画像を取得しにいくMeasureが有効化するようにしておき、もし画像がローカルにあればFinishActionでこのタイマーをストップさせる、そしてもしなければFinishActionが発せられることなく、タイムアウトでWebへ画像を取得しにいく、という仕組みです。
ただ、実際何度か実験した結果ではローカル画像があるにもかかわらず、Webにアクセスしてしまうことも稀にあり、改良が必要なところです。
- 汎用的な設定に
検索ルートなどを、より利用度が高いと思われる一種類に一本化、単純化。
あれこれ
A1では、主に洋楽/邦楽別でテンプレートをユーザーがチョイスして書き換えるという仕様でしたが、 A2ではどちらでも対応できるテンプレートにしました。
つまり、
洋楽中心のサイトと邦楽中心のサイトの両方に検索をします。よって、完全に洋楽あるいは邦楽しか聞かないというようなユーザーにとっては無駄なプロセスが増えることは否めませんが、広く一般的な設定に一本化してみました。
- コードのスリム化
多機能化しながらも無駄な部分を省くことで、A1よりも小さい設定ファイル(プレイ時)に抑える。
あれこれ
スキン(設定ファイル)自体が大きければ、それだけ読み込みに時間がかかります。
曲の切り替わりの都度、スキンの更新を行うこのスキンの構造においては、コードのスリム化は重要なポイントです。
今後の展望 ? もしもA3があるのなら
- A1に比べるといろいろな改良や機能追加が成された今回のA2ですが、それでも根本的な構造は変わっていないので、以前不安定な要素は克服できていません。後続となる「A3」がもしあるのならば、この辺が最大の目標です。しかし、それには構造を大幅に変える必要があるでしょう。もはや、外部に一旦ダンプしたものを読み込んで云々というような不効率なことをやめ、AMIPサーバー経由で内部的にデータのやり取りをさせるべきかもしれません。ただ、それにしてもWebParserを使ってWebから取得させる以上、曲ごとにスキンを更新しなければならないことに変わりはないのですが・・・。
- AMIPプラグインは時期未定ながらも時期メジャーアップデートのバージョン3.0で大幅な機能追加が行われるようで、そこでは、WMPへの対応やUnicodeの対応なども予定されています。Rainmeterの更新は期待できませんが、AMIPプラグインだけでも多少改良されれば、スキン側でもできることが増えるかもしれません。
- 機能的にA2はA1にプラスアルファという感じで、基本的なコンセプトは変わっていません。しかし、次に作成するとしたらもっとアクティブでダイナミックなものにしたいと思っています。
ただ単に、画像や歌詞を取ってきてそれを表示するところまででなく、その先まで行きたい。つまり、取ってきたデータをさらに加工処理して、より創造的なものにしたいと思っています。
ご存知のようにRainmeterは外部にコマンドを送ることや、取得データを渡すことができるので、他のコマンドラインツールと連携すればいろいろなことが可能になるのです。
例えば、取得した画像やタイトルなどをImageMagickを使って加工して新たな画像の作成した上でそれを表示したり、MP3Infoなどを使って自動タグ付け機能を実装したり、取得した歌詞をWebserviceX.NETのようなWebサービスを通して翻訳させたものを表示したり・・・、とアイデアは尽きません。
究極的には再生曲から取得した歌詞をフレーズ分解し、特徴語から画像検索をかけて取得した画像を曲に合わせてスライドショー仕立てにしたら面白いだろうなと・・・
しかし、もはやそれはRainmeterスキンの範疇ではなくなると思いますし、それ以前に自分のできることの範疇でもありませんが(笑)。
素敵なスキンをありがとうございます。
誤字と思われる箇所があるので、修正をお願いします。
「今後の展望 ? もしもA3があるのなら」
の第二項三行目、「Unicodeの太陽なども」です。