foobar2000のwsh panel modのサンプルコードその2
カテゴリ:パソコン関連 ■2015/04/19
« foobar2000のwsh panel modのサンプルコード | | foobar2000のwsh panel modのサンプルコード番外編-資料1 インターフェイス »
« foobar2000のwsh panel modのサンプルコード | | foobar2000のwsh panel modのサンプルコード番外編-資料1 インターフェイス »
さあ! 始まりました第二回Wsh Panel Modをいじっちゃおうコーナーです。
ポロリもあるよ!!(嘘)
今回のテーマは『アルバムアートと曲タイトルを表示する』でございます。
サンプルコード&画像ダウンロード

解凍したものをポータブル版ならfoobar2000のあるフォルダに、インストール版であればユーザーフォルダ\AppData\Roaming\foobar2000に入れてください。
前回も使った、中にあるsample2.txtを…おっとその前に。
デバッグについて。
エラーを一つも出さずにプログラムを書ける人はウィザード級と認定してかまわないと思うのですが、私ら凡人は悲しいかなエラーを出します。出しまくります。
そのときに役立つのがfb.trace(...)文。
カッコの中に変数を入れておくと、こっそりconsoleに中身を表示してくれます。
この文をプログラムの中に仕込んでおいて、変数の中身をチェックします。
例えばfb.profilePathとfb.foobarPathがインストール版とポータブル版でどう変化するか?を調べたいときに
fb.trace("profilepath="+fb.ProfilePath,"foobarpath="+fb.FoobarPath);
を仕込んでおくと
インストール版

ポータブル版

判るわけです。
こういうのを手がかりに地道に直していきましょう。
改めてスクリプト(sample2.txt)をインポートしてみます。

こちらがソースになります。
// ==PREPROCESSOR==
// @name "Sample2"
// @author "Junya Renno"
// ==/PREPROCESSOR==
var imgpath = fb.ProfilePath+"/skin/sample/";
var g_font = gdi.Font("MS 明朝", 16, 1);
function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}
function on_paint(gr){
var albumart;
if (fb.GetNowPlaying()){
albumart = utils.GetAlbumArtV2(fb.GetNowPlaying());
}
if (albumart == null){
albumart = gdi.Image(imgpath+"no_cover.png");
}
var x = (window.Width - 200)/2;
var y = (window.Height - 200)/2;
var w = 200;
var h = 200;
var src_x = 0;
var src_y = 0;
var src_w = albumart.Width;
var src_h = albumart.Height;
var angle = 0;
var alpha = 255;
gr.DrawImage(albumart,x,y,w,h,src_x,src_y,src_w,src_h, angle,alpha);
var nowtitle = fb.Titleformat("%title%").eval();
var ww = window.Width;
gr.DrawString(nowtitle,g_font,RGB(0,0,0),20,window.Height-30,window.Width,30);
}
function on_playback_new_track(){
window.Repaint();
}
前回との違いが判るかな?
var g_font = gdi.Font("MS 明朝", 16, 1);
はgdiさんにフォントの下準備を頼んでいるところ。
gdi.Font(フォント名,ポイントサイズ,スタイル)で指定します。
スタイルは0=ノーマル、1=ボールド、2=イタリック、3=ボールドイタリック、4=アンダーライン、8=訂正線、その他です。
私は常々、JScriptの設計思想は結局、『知ってる人に聞け』の一文に尽きると思っています。
Wsh Panel Modではgdiさん(画面表示の下準備)、windowさん(パネル担当)、fbさん(foobar2000全般)、
utilsさん(用務員)、plmanさん(プレイリスト管理人)がよく呼ばれます。
あと表示全般を管理するお局様的存在のgrさんもいらっしゃいますが。
またあとで記述します。
function RGB(r, g, b) {
return (0xff000000 | (r << 16) | (g << 8) | (b));
}
これは色指定するときの定番のRGB関数で、わざわざ自分で考えるよりコピペしたほうが時間の節約です。
if (fb.GetNowPlaying()){
albumart = utils.GetAlbumArtV2(fb.GetNowPlaying());
}
if (albumart == null){
albumart = gdi.Image(imgpath+"no_cover.png");
}
曲を演奏しているときは変数albumartにアルバムアートの画像オブジェクトが入ります。
演奏してないとき、あるいはアルバムアートが存在していない場合、albumartにno_cover.pngを読み込みます。
*追記(2015/10/29):アルバムアートを取得するのに古いほうのメソッドを使っていましたが、最近のWsh Panel Modではエラーになるので修正しました。
旧:albumart = utils.GetAlbumArt(fb.GetNowPlaying().RawPath);
新:albumart = utils.GetAlbumArtV2(fb.GetNowPlaying());
*追記ここまで
var x = (window.Width - 200)/2;
var y = (window.Height - 200)/2;
var w = 200;
var h = 200;
albumartを表示するときの大きさを200,200に固定します。
window.WidthはWsh Panel Modパネルの横幅です。計算して真ん中にくるようにします。
window.HeightはWsh Panel Modパネルの縦幅です。以下同文。
真ん中に表示するのではなく左上とか左下にしたい場合、dを余白、a=横幅、b=縦幅とすると、こんな感じかな?

まあそれはともかく。
gr.DrawImage(albumart,x,y,w,h,src_x,src_y,src_w,src_h, angle,alpha);
grさんにalbumartを表示してもらいます。
ここから文字表示。
フォントの準備をすでにしてあるので、
var nowtitle = fb.Titleformat("%title%").eval();
var ww = window.Width;
gr.DrawString(nowtitle,g_font,RGB(0,0,0),20,window.Height-30,window.Width,30);
タイトルをTF形式で問い合わせて(たぶんこれが一番楽)、nowtitleに入れます。
で、grさんに頼むと。
DrawString(文字列,フォントオブジェクト,色,x,y,w,h, flags =0)
flagsは左寄せとか中央寄せとかの書式設定らしいです。省略可能。まだ調査不足。すまぬ。
wwはいらんかったね。消し忘れた。
function on_playback_new_track(){
window.Repaint();
}
on_がつく特定のブロックはコールバックと呼ばれる特別なルーチン。
on_playback_new_track()は、新しい曲が始まったときに呼び出されます。
今回なぜ必要かというと、曲が変わったタイミングで再描画して欲しいからです。
これがないと曲が変わってもタイトルやアルバムアートが変わりません。
他にも、マウスがクリックされた時とか、キーが押された時とか、いろんな場合に呼び出されるルーチンが用意されています。
用事がないときは書かなくてもOK。
今回背景は省略しましたが、やるならば最初に(0,0)-(window.Width,window.Height)を長方形で塗りつぶせばいいんです。
gr.FillSolidRect(x, y, w, h, color)とかで。
次回はボタンです。『実際に動くボタンを作る』がテーマです。
追記:あとで記述するっていったグローバルオブジェクト、すっかり忘れてたよ。
まあ、わかるよね。(怠惰)
<< トップページに戻る
カテゴリ:パソコン関連
« foobar2000のwsh panel modのサンプルコード | | foobar2000のwsh panel modのサンプルコード番外編-資料1 インターフェイス »
« foobar2000のwsh panel modのサンプルコード | | foobar2000のwsh panel modのサンプルコード番外編-資料1 インターフェイス »
>
ありがとうございます。。
Posted by at 2016/11/18 (Fri) 22:53:09
コメントは日本語でお願いします。(URLは入力禁止:Do not URL writing.) :System message: コメントを受けつけています。
>素晴らしい!!!!
大変参考になりました。
誠にありがとうございます!!!