<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>K'conf | portfolio</title>
<link>http://kenz0.s201.xrea.com/portfolio/</link>
<description></description>
<language>ja</language>
<lastBuildDate>Mon, 02 Jun 2008 23:01:32 +0900</lastBuildDate>

<item>
<title>Winampやfoobar2000とLyrics Masterを連携させる方法</title>
<link>http://kenz0.s201.xrea.com/portfolio/notes/tips/winampfoobar2000lyrics_master.html</link>
<description>
<![CDATA[<p><img src="/image/blog/2008-06-02-00.png" class="right img1" /><br />
<strong><a href="http://www.kenichimaehashi.com/lyricsmaster/">Lyrics Master</a></strong>は様々な歌詞サイトを検索して、歌詞を表示する専用ソフトです。<br />
<br /><br />
当サイトで公開しているRainmeter用スキン <a href="/portfolio/skins/a2.html"><strong>A2</strong></a>では、歌詞の取得漏れを補う目的で試験的に <strong>Lyrics Master</strong>との連携機能を搭載しています。<br />
<br /><br />
今回はRainmeterスキンの話題からは少し離れ、Winampやfoobar2000で直接 <strong>Lyrics Master</strong>を使う方法をご紹介します。<br />
<br clear="all"/></p>]]>
<![CDATA[<p><br /><br />
<img src="/image/blog/2008-06-02-05.png" class="left img_f1" /><br />
まずは、曲の切り替わり毎に <strong>Lyrics Master</strong>に曲情報を送るために必要なプラグインである「<strong><a href="http://amip.tools-for.net/">AMIP プラグイン（Advanced mIRC Integration Plug-in）</a></strong>」をダウンロードしてインストールしておきます。（プラグインは使用するプレイヤー用のものを選びましょう）<br />
<blockquote><br />
<a href="http://amip.tools-for.net">AMIP</a>プラグインは元々はWINAMPで再生中の曲をmIRCでIRCのコメントとして融合させるためのプラグインでしたが、曲の切り替えタイミングで任意のテンプレートを出力したり、バッチコマンドを送ったりと最近では汎用的なプラグインとして実装されています。<br />
</blockquote><br />
<br clear="all"/></p>

<p>（以降、Lyrics Master はすでにインストール済みとしています）<br />
<br /><br /><br />
<a href="/image/blog/2008-06-02-03l.png" class="mb" title="拡大"><img src="/image/blog/2008-06-02-03.png" class="right img_f1" /></a><br />
次に、 <strong>Lyrics Master</strong>の「<u>環境設定＞その他</u>」から「外部ソフトウェアの設定」を開き「<u>外部ソフトウェアを使用する</u>」にチェックを入れて、「<u>曲名+歌手名</u>」を選択し、コピーボタンをクリックします。<br />
<br clear="all"/><br />
すると、クリップボードに設定パスがコピーされますので、これをメモ帳などに控えておきます。ちなみに私の環境（Windows2000）では下のようなパスになります。<br />
<div class="code"><br />
C:\WINNT\system32\wscript.exe "C:\Program Files\Lyrics Master\ExtSupport.js" multi "<font color="#DF8713">[title]</font>" "<font color="#DF8713">[artist]</font>"<br />
</div><br />
さて、方法的には上の"<font color="#DF8713">[title]</font>"と"<font color="#DF8713">[artist]</font>"部分を、AMIPプラグインを使って置換えた後 Lyrics Masterに送ってやればよいだけです。では、具体的な設定例を見てみましょう。<br />
<br /><br /><br />
<a href="/image/blog/2008-06-02-04l.png" class="mb" title="拡大"><img src="/image/blog/2008-06-02-04.png" class="right img_f1" /></a><br />
プレーヤーそれぞれの設定画面からAMIPプラグインの設定画面を開きます。<br /><br />
「<u>Enable AMIP</u>」にチェックを入れ、下のテキストエリアに先ほど控えておいた<u>設定パスを元に</u>以下にように入力します。<br /><br />
1から4までのプリセットボタンによって設定を切り替えることができるので、任意のところを選びましょう。デフォルトではIRC用のサンプル設定がすでに入力されていますが、必要なければ消して構いません。<br />
<br clear="all"/><br />
（下線部分は設定パスによって異なります）<br />
<div class="code"><br />
/exec:(<u>C:\WINNT\system32\wscript.exe</u>) "<u>C:\Program Files\Lyrics Master\ExtSupport.js</u>" multi "<font color="#DF8713">%2</font>" "<font color="#DF8713">%1</font>"<br />
</div><br />
<font color="#DF8713"><strong>%2</strong></font>はAMIPプラグインでID3タグの曲名を表す変数で、同様に<font color="#DF8713"><strong>%1</strong></font>はアーティスト名の変数です。<br /><br />
そして、曲の更新毎に Lyrics Master に対しコマンドを実行するという設定です。<br /><br />
<br /><br />
上の設定例は極めて単純なID3タグ情報によるものですが、AMIPには強力な文字列処理に関する機能が実装されていますので、これを使わない手はないでしょう。<br /><br />
以下は<a href="/portfolio/skins/a2.html"><strong>A2</strong></a>で用いている設定例です。<br />
<br /><br />
（下線部分は設定パスによって異なります）<br />
<div class="code"><br />
/exec:(<u>C:\WINNT\system32\wscript.exe</u>) "<u>C:\Program Files\Lyrics Master\ExtSupport.js</u>" multi "$if(%2,%2,$regrep(\s+$,,$regmatch(%s,- *\([^\(]+\),1)))" "$if(%1,%1,$regmatch(%s,\(.*?\) *-,1))"<br />
</div><br />
曲にID3タグがない場合には、デフォルトフォーマット <br /><u>[ARTIST] - [TITLE]</u>から抽出するという例です。これによりインターネットラジオにようにタグ情報を持たないメタデータでも<br /><u>[ARTIST] - [TITLE]</u>というフォーマットであれば、対応することが可能です。<br />
<br /><br />
<img src="/image/blog/2008-06-02-01.png" class="right img_f1" /><br />
<br />さて、一通り設定が済んだらプレイヤーを再生してみましょう。<br />
<br /><br />
曲名、歌手名が入力された状態で Lyrics Master が立ち上がれば成功です。<br />
<br /><br />
あとは、 Lyrics Master 側の設定次第で、歌詞の取得や表示などを自動化することも容易ですので、いろいろ試してみるとよいでしょう。<br />
<br clear="all"/><br /><br />
<strong>Lyrics Master</strong> は歌詞の取得／表示にバツグンのソフトですが、iTune用にしか連携機能がないのが難点と思われていた方には、今回紹介したような方法で比較的簡単に、Winampやfoobarと連携させることができることができるので、試してみてはいかがでしょう。<br />
<br /><br />
<br /><br />
<div class="box2"><br />
AMIPプラグインはUnicodeに対応していません。よってUnicodeの文字含むタグを持つ曲では、誤動作を引き起こす可能性があるのでご注意ください。<br />
</div></p>]]>
</description>
<category>Tips</category>
<guid>http://kenz0.s201.xrea.com/portfolio/notes/tips/winampfoobar2000lyrics_master.html</guid>
<pubDate>Mon, 02 Jun 2008 23:01:32 +0900</pubDate>
</item>

<item>
<title>ポスト・イット風のRainmeterスキン</title>
<link>http://kenz0.s201.xrea.com/portfolio/notes/memo/rainmeter_11.html</link>
<description>
<![CDATA[<p><strong><a href="/portfolio/skins/ampit.html" class="link">Amp-it</a></strong><br />
<img src="/image/skins/amp-it/amp-it_preview_m.png" class="img_f1" /><br />
WINAMPのタイトル表示といくつかのコントロール類を、ポスト・イット風に仕立てたRainmeterスキン「<a href="/portfolio/skins/ampit.html" class="link">Amp-it</a>」をリリースしました。<br /><br /><br />
洒落っ気のあるデザイン重視で、機能面においては地味ながらも、いくつかユニークなテクニックを用いて、野心的なことにチャレンジしているでご紹介します。</p>]]>
<![CDATA[<p><br /><br />
<br /><br />
一つ目は任意の部分に改行を挿入してタイトルを分割することです。<br /><br />
<br /><br />
<strong><a href="/portfolio/skins/a1.html">A1</a></strong>,<strong><a href="/portfolio/skins/a2.html">A2</a></strong>のように<a href="http://amip.tools-for.net/">AMIP</a>という特別なプラグインを使用すれば、曲名、アーティスト名を個別に取り出すことは容易ですが、個人的に今回のスキンのようなシンプルなものに、そんな大そうなプラグインを使用するのは割に合わない気がします。（曲名とアーティスト名を分けるだけのために・・）<br /><br />
<br /><br />
そこで、いくつかの条件はあるものの、ちょっとした裏技を考えてみました。<br /><br />
<div class="box1"><br />
<ul><br />
	<li><strong>[artist] - [title]</strong><br /><br />
	<br /><br />
	<span style="font-size: 200%"><strong>&dArr;</strong></span>（改行を入れる）</li><br />
	<li><strong>[artist]</strong><br /><br />
	<strong>[title]</strong></li><br />
</ul><br />
</div><br />
方法としては、<strong>Substitute</strong>を使って「 - 」（半角スペース、ハイフン、半角スペース）を「改行」に置き換えればいいことになりますが、どのように改行に置き換えるかが、今回のキモです。<br /><br />
<div class="box1"><br />
<strong>Substitute=&quot; - &quot;:&quot;\n&quot;</strong>とか<br /><br />
<strong>Substitute=&quot; - &quot;:&quot;\r\n&quot;</strong>とか...<br /><br />
</div><br />
上のような正攻法のやり方では、文字列に置き換わるだけで改行コードにはなりません。ではRainmeterは改行コードは扱えないのかというと、そうではありません。<br /><br />
WEBやローカルから改行を含んだテキストを読み込ませれば、そのまま改行として認識します。そこで、このことを利用して適当なファイルから改行部分を拾い出して、その改行を転用する形で使うのです。<br /><br />
<br /><br />
実際の<strong><a href="/download/Amp-it.ini.html" target="_blank">INIファイル</a></strong>を参照しながら解説してみましょう。<br /><br />
<br /><br />
まず、まず改行がある適当なファイルですが、特別用意するまでもなく、<span style="background-color: #e5ffff">このスキン自体を</span><strong style="background-color: #e5ffff">WebParser</strong><span style="background-color: #e5ffff">で読み込ませて改行を抽出</span>しておきます。<br /><br />
（ヒント: このとき無駄にWebParserを更新させないよう、<strong>Update</strong>は長く取る。また、パス指定では<u>Rainmeter.exe</u>からの相対パスで指定するとよい）<br /><br />
<br /><br />
そして、<strong>Substitute</strong>で<strong>WindowMessage</strong>を使って取得した<span style="background-color: #ffe5e5">WINAMPのタイトルの「 - 」（半角スペース、ハイフン、半角スペース）を「%2」に置き換えておきます。</span><br /><br />
（ヒント: ついでにその他不必要な文字列も置き換えておくとよいでしょう）<br /><br />
<br /><br />
最後に表示メーターとして定義される<span style="background-color: #ffffe5"><strong>[(title)]</strong>で、MeasureNameに<strong>[WINAMP]</strong>、そしてMeasureName2に抽出した改行が収められている<strong>[LINEBRAKE]</strong>を定義します。</span><br /><br />
ここで「<u>Text=&quot;%1&quot;</u>」とすることによって、%1に「<u>[artsit] - [title]</u>」が代入されますが、「 - 」は「％2」に置き換わっているため「<u>[artsit]%2[title]</u>」となります。そしてさらに、「%2」は<strong>MeasureName2</strong>と解釈され<strong>[LINEBRAKE]</strong>で抽出した改行に置き代わるという訳です。<br /><br />
この結果「 - 」を区切り文字として文字列に改行を挿入することによって、任意のところで分割することが可能になるのです。<br /><br />
<div class="box2"><br />
さて、こんなテクニックもいくつかの条件があります。<br /><br />
まずは「 - 」がない場合はもちろんのこと機能しません。<br /><br />
そして、重要な点は「改行が挿入されても一連の行として扱われる」ので、レイアウトに制約があるということです。<br /><br />
例えばコメントアウトを外して<font color="red">文字列領域のサイズ設定</font><br />
をしてしまうと、収まりきらないアーティスト名が自動で改行された場合、タイトルが意図した位置に来なくなってしまいます。そこで、自動改行をさせなければ、とりあえず行頭のレイアウトは揃うということで、文字列の省略など処理はスキン自体の長さに準じるということになりますが、ここら辺はスキンのアイデア次第である程度何とかなるのではないでしょうか。</div><br />
この他にも応用技として、SHOUTcastなどでは（放送局）というタイトルが入り、このカッコ何某が邪魔な場合があります。<br /><br />
そこで、同様に「<strong>(</strong>」を改行化してしまいます。今回のスキンのケースでは一つの改行では（3行目は）見えてしまうので、<br />「<strong>"(":"%2%2"</strong>」などとして連続した改行に置換え、見えないところに追いやってしまいます。<br />
<br /><br />
また、「<strong>" - ":"%2Song : "</strong>」として改行直後に追加文字を加え、さらに<br />
「<strong>Text="Artist : %1"</strong>」とすれば、以下のように行頭に任意の文字を加えることもできます。<br />
<div class="box1"><br />
<strong>Artist : [artist]</strong><br /><br />
<strong>Song : [title]</strong><br />
</div><br />
<br /><br />
<br /><br />
上記が実用面のテクニックだとすれば、2つ目はデザイン面でのそれです。<br />
<br /><br />
<br /><br />
このデザイン的には、いくつも色違いがほしいところですが、それだけスキンを用意したり、その都度設定して変えたりするよりも、自動的に変化するのが面白いのでは、と考えました。<br /><br />
フレーム化した画像を取得した値に応じて切り替えるというのが、基本的なメソッドですが、何の値に関連付けさせるかが問題です。<br />これは別に答えがあるわけではないですが、ある程度のバリエーションとランダム性ということを踏まえ、今回は曲の演奏時間（分）を元に、それに合わせた60フレームの画像を切り替えて表示させています。<br /><br />
他にも、現在時刻や演奏経過などに関連付けて、常に色が変わっていくも仕掛けにしても面白いと思います。</p>]]>
</description>
<category>memo</category>
<guid>http://kenz0.s201.xrea.com/portfolio/notes/memo/rainmeter_11.html</guid>
<pubDate>Sat, 17 May 2008 16:51:47 +0900</pubDate>
</item>


<item>
<title>A2 各部変更と修正</title>
<link>http://kenz0.s201.xrea.com/portfolio/notes/memo/a2_2.html</link>
<description>
<![CDATA[<p>アルバムジャケットと歌詞の表示機能を備えたRainmeterスキン<a href="/portfolio/skins/a2.html"><strong>A2</strong></a>をリリースしてしばらく経ちますが、いくつかの不具合に対する対応および改良を施したアップデートバージョンをリリースしました。<br />
<br /><br />
現在<a href="/portfolio/skins/a2.html"><strong>A2</strong></a>をご使用の方は是非アップデートされることのお勧めします。</p>]]>
<![CDATA[<p><br /><br />
<br /><br />
<h2 class="title2">修正点</h2><br />
<ol><br />
<li>画像保存のスクリプトのバグ</li><br />
<li>設定パネルのチェックマークの消灯エラー</li><br />
<li>再生時間の表示エラー</li><br />
<li>条件分岐による処理の修正<br />
<div class="box3"><br />
ID3タグがあるかないか、という条件分岐に使用していた<br />「<u>%?VARIABLE&lt;TRUE|FALSE&gt;</u>」という関数を「<u>$if(a,b,c)</u>」に変更しました。その結果2バイト文字による出力エラーが比較的改善されました。また、ストリームか否かという条件分岐で使っていた「<u>%stream</u>」というフラグが頻繁に誤動作を起こすため、代わりに「<u>%sl</u>」を使うことにしました。<br />
</div></li><br />
</ol><br /></p>

<h2 class="title2">変更点</h2>
<ol>
<li>画像と歌詞を上書き禁止モードに</li>
<li>歌詞ファイルの読み込みをQuote.dllに変更<br /><div class="box3">歌詞ファイルの整形をスクリプトで行い、Rainmeter側ではQuote.dllで歌詞ファイル丸ごとを表示する仕様に変更しました。これにより、A2以外から取得した歌詞ファイルでも容易に表示できるようになります。（後述のLyricsMasterなどの）<br />また、一部の環境では、WebParser.dllでのファイル読み込みの際、2バイト文字を含むファイル名を持つファイルの読み込みに失敗するということがあるようですが、今回の変更によりそういった環境下での使用も可能になると思います。</div></li>
<li>ストリーム再生時の画像／歌詞の自動保存機能を無効化<br /><div class="box3">インターネットラジオのようなストリーム再生時にまで、画像や歌詞のデータを保存する意味は少ないと考え、無効化しました。構造上、歌詞は一度ダウンロードしないと表示できないので、「current.txt」と言うファイル名でその都度上書きされていきます。</div></li>
<li>本体カスタムボタン2に歌詞スキンの閉じる／開くを割り当て<br /><div class="box3">一時的な開閉に使用するために設けました。歌詞機能を常時使用しない場合には設定パネルからOFFにしてください。</div></li>
<li>画像の保存先を音声ファイルと同じディレクトリに<br /><div class="box3">WINAMPの現在のバージョンとの互換性を考え、画像の保存先を音声ファイルと同じディレクトリにしました。ID3タグにアルバム名があればアルバム名で、無ければ曲名あるいはファイル名のハイフン以降でネーミングされます。</div></li>
<li>終了時の前回再生情報の表示を無効に<br /><div class="box3">エラーで強制終了した場合や何も再生せずに終了した場合など、次に起動した際、正常な前回再生情報を表示できないため、この機能は取り外しました。</div></li>
<li>AMIPプラグインの共用化<br /><div class="box3">AMIPプラグインの設定ファイルである「Plugin.ini」をA2用に上書きコピーする独占的な仕様を改め、既存の設定ファイルに、A2に必要な設定部分以外は変更を加えない仕様にしました。これによりAMIPを使用するA2以外の他のプログラムとの共用が比較的容易になります。</div></li>
</ol><br />

<h2 class="title2">追加点</h2>
<ol>
<li><img src="/image/skins/a2/lmaster.png" class="right img_f1" /><a href="http://www.kenichimaehashi.com/lyricsmaster/"><strong>Lyric Master</strong></a>との連携<br /><div class="box3">歌詞の取得／表示の専用ソフト<a href="http://www.kenichimaehashi.com/lyricsmaster/">Lyric Master</a>に再生曲情報を渡して立ち上げるボタンを、歌詞スキン左隅に追加しました。A2では見つからなかった場合や意図した歌詞ではなかった場合など、追加検索したい時に威力を発揮します。A2とLyric Masterの保存先を同じにしておくと一層便利に使えます。<br clear="all"/>(A2での歌詞の保存先は。[<u>Template</u>]フォルダ内の<u>PLAY_LYRIC.tmpl</u>の「<u>LYRICSDIR=</u>」で変更することができます。)</div></li>
</ol><br />

<p><br />
<h2 class="title2">すでにご使用の方への注意点</h2><br />
上記仕様の変更により、今まで不要だった設定等がありますので、ご注意ください。<br />
<ol><br />
<li>非起動時のディスプレイ用画像のディレクトリパスをユーザー各自で定義してください。[<u>Template</u>]フォルダ内の<u>EXIT_A2.tmpl</u>を開き、「<u>FOLDER=</u>」に続けてフルパスで指定します。<br />（サブフォルダ内も表示対象になりますが、あまりフォルダ数が多いとそれなりにリソースを消費します）</li><br />
<li>スキンをインストール後、プラグイン自体の有効／無効および諸設定などはプラグインダイアログで行なってください。（スキン上の設定パネルのAMIPボタンでプラグインの有効／無効は操作できません）<br />
<div class="box3"><ul><br />
<li><a href="/image/skins/a2/amip_wa.jpg" class="mb"><strong>WINAMP設定例</strong></a></li><br />
<li><a href="/image/skins/a2/amip_foo.jpg" class="mb"><strong>Foobar2000設定例</strong></a></li><br />
</ul></div><br />
他のプログラムによる特別な設定がない限りは、画像のように不要なチェックを外すのがよいでしょう。<br />またFoobarでは、画像のように「<u>$num...</u>」部分が不要にあたるので削除してください。<br />
</li><br />
</ol></p>

<h2 class="title2">ひとこと、ふたこと・・・</h2>
<ul>
<li>カスタムボタン&#9733;の右クリックに新たに割り当てた歌詞スキンの開閉ボタンの代わりに消えたYouTubeへのリンクボタンですが、これに関しては今後制作予定の「再生曲にいろんなサイトやコマンドのリンクをつけるスキン」というのに統合しようと思います。</li>
<li>懸案だった「次の曲情報から先読みして画像を取得しておく」という機能についてはヤメにしました。シャッフルやストリームではもちろん機能しないのはもちろん、一度再生した曲は保存されているかあるいは取得不可が確定している訳で、この機能の恩恵ははじめて再生する曲に対してだけということになります、ということで価値は低いかなと。</li>
<li>今回、補助的機能として<strong>Lyrics Master
</strong>との連携を試してみましたが、現在のようにRainmeterと自作の粗末なスクリプトで取得するより、いっそのこと歌詞の取得は<strong>Lyrics Master
</strong>にお任せという仕様に変えてもいいかなと正直感じています。</li>
</ul>
<br /><br />
さて、今回バグ取りのはずのアップデートが、かなりの仕様変更になってしまい、これによる新たなバグが出てくるのではという懸念もありますが。]]>
</description>
<category>memo</category>
<guid>http://kenz0.s201.xrea.com/portfolio/notes/memo/a2_2.html</guid>
<pubDate>Tue, 13 May 2008 21:00:09 +0900</pubDate>
</item>

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


<item>
<title>ZERO</title>
<link>http://kenz0.s201.xrea.com/portfolio/notes/skins_1/zero_1.html</link>
<description>
<![CDATA[<p><strong><a href="/portfolio/skins/zero.html">ZERO</a></strong><br /><br />
<img src="/image/skins/zero/zero_preview_s.png" class="img_f1" /><br />
日本テレビ <strong><a href="http://www.ntv.co.jp/zero/index.html">NEWS ZERO</a></strong>  デザインテーマを使用した時計<br />
<br /><br /></p>]]>

</description>
<category>skin</category>
<guid>http://kenz0.s201.xrea.com/portfolio/notes/skins_1/zero_1.html</guid>
<pubDate>Fri, 29 Feb 2008 19:47:39 +0900</pubDate>
</item>


<item>
<title>The Human Calendar</title>
<link>http://kenz0.s201.xrea.com/portfolio/notes/memo/the_human_calendar.html</link>
<description>
<![CDATA[<p><strong><a href="http://www.humancalendar.com/">the human calendar®</a></strong>から画像を取得して表示するRainmeterのスキンを制作しました。<br />
<img src="/image/blog/2007-12-08-03.jpg" class="img_f1" /></p>]]>
<![CDATA[<div class="download"><a href="/cgi/dl/dl.php?fname=humancalendar.zip&dir=../../download" title="ダウンロード"></a></div><br  clear="all"/>
このサイトを知った2年ぐらい前、Rainmeterを使ってデスクトップ上で利用することに挑戦しましたが、結局うまくいかなかった過去があります。
PHPで動的に生成されるファイルは、ファイル名の関係からRainmeter(Webparser.dll)ではうまくローカルに保存できないことがしばしばあります。

<p><br />
しかし最近になってサイト側で、いろいろと利用しやすいAPIを公開し始めたため、これを利用することで、晴れてRainmeterでもそれが可能となりました。<br />
（正直、<a href="http://www.humancalendar.com/">human calendar</a>より、<a href="http://www.humanclock.com/">Human Clock</a>の方が目当てなんですが、これもそのうちどうにかなるかな？）</p>

<p><br />
スキンは<a href="http://www.humancalendar.com/portable.php">APIのページ</a>で参照できるような、4つのタイプに分かれていますので、好きなものをチョイスしてください。<br />
このスキンは特に設定する個所はなく、動作も画像を表示するということのみです。<br />
画像の更新間隔は<span class="line-through">1日</span>1時間に設定してあります。また、このスキンをカスタマイズしたい方は、<a href="/portfolio/notes/tips/_no1.html">こちら</a>が多少の参考になるかもしれません。</p>

<div class="box2"><strong>[ご注意]</strong><br />このスキンはRainmeter v0.14 で動作確認をおこなっています。また、HTMLの構造からパースする性質上、取得元のページのURLやレイアウトが変更された場合正常に動作しなくなる場合があります。<br />なお、Rainmeterのインストールや基本的な使い方は<a href="/portfolio/notes/how_to/rainmeter.html">こちら</a>を参考にしてください。</div>

<p><strong>[関連記事]</strong><br />
<strong><a href="http://kenz0.s201.xrea.com/weblog/2007/12/the_human_clock.html">&raquo; The Human Clock - 「人」で作る時計とカレンダー</a></strong></p>]]>
</description>
<category>memo</category>
<guid>http://kenz0.s201.xrea.com/portfolio/notes/memo/the_human_calendar.html</guid>
<pubDate>Sun, 09 Dec 2007 12:22:38 +0900</pubDate>
</item>

<item>
<title>EUC-JPのページからの文字列取得</title>
<link>http://kenz0.s201.xrea.com/portfolio/notes/tips/eucjp.html</link>
<description>
<![CDATA[<p><img src="/image/weblog/071023/font.png" class="img_r" /><br />
<br /><br />
RainmeterのWebparser.dllを使ったHTMLからの情報取得スキンを作り始めた頃から、悩みの種だったことがあります。それはEUC-JPのページからの２バイト文字の取得表示がうまくいかないというものです。<br />
<br clear="all"/></p>]]>
<![CDATA[<p><br /><br />
<br /><br />
以下のマイクロソフトのリファレンスにもあるように、EUC-JPのCodePageは「51932」と定義されているはずですが、Rainmeterの設定ファイル上で「CodePage=51932」と指定しても動作しません。<br />
<br /><br />
<strong><a href="http://msdn2.microsoft.com/en-us/library/aa752010.aspx">Character Set Recognition</a></strong><br />
<br /><br />
<br /><br />
以前から、いろいろ試してみましたが結局解決できず、半ばあきらめていましたが、最近になってその問題が<span class="underline">ほぼ</span>解決されました。<br />
<br /><br />
<br /><br />
それはCodePageに「51932」ではなく「<span class="underline">20932</span>」を指定するというものです。<br />
<br /><br />
なぜ、「51932」ではダメで「20932」なのかということを説明するには、あいにく知識不足なため今回そのことについて深くは取り上げませんが、結果的にこれで<span class="underline">今のところ</span>問題なく動作するようです。<br />
<br /><br />
<br /><br />
ここで1つ、上記で「ほぼ」とか「今のところ」と言うようなあいまいな表現を使ったのには理由があります。<br />
<br /><br />
「20932」を「51932」の代替に使用している訳ですが、この「20932」とはマイクロソフト版 EUC-JPであり、EUC-JPと完全な変換性がサポートされているわけではなく、一部変換できない文字もあるそうですので、100%完全な解決方法とはなりませんが、暫定的な解決策として問題ない方法ではないかと思っています。<br />
<br /><br />
<br /><br />
以下の設定ファイルは今回のテストサンプルとして作成したもので、チェックにどうぞ。<br />
<br /><br />
<a href="http://kenz0.s201.xrea.com/cgi/dl/dl.php?fname=kns-46__yahoo_news.zip&dir=../../download"><strong>Yahoo!ニュース - 主なトピックス</strong></a><br />
<br /><br />
<br /><br />
<div class="box2"><strong>[ご注意]</strong><br />
<br /><br />
今回のケースはWindows2000sp4という私的PC環境での問題とその解決方法についての記述ですので、他の環境でも同様かということは把握していませんので、あしからず。</div></p>]]>
</description>
<category>Tips</category>
<guid>http://kenz0.s201.xrea.com/portfolio/notes/tips/eucjp.html</guid>
<pubDate>Tue, 23 Oct 2007 22:52:26 +0900</pubDate>
</item>


</channel>
</rss>
