スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

帰ってきた「foobar2000」忘備録、Panel Stack Splitter延長戦。

Panel Stack Splitter編、これにて完結。
ボタンは全て置いた。もう何も怖くない……!

( ‘д‘⊂彡☆))Д´) パーン

気を抜くなんてとんでもない!

そんなわけで、前回のカスタマイズでは「Track info mod」というコンポーネントを利用していた曲情報の表示を、Panel Stack Splitterに丸投げしました。


再カスタマイズ完成図
画像クリックで元の大きさの画像が見られます。

完成画面上部のがそれです。

Track info modについては前回の記事をどうぞ。
「foobar2000」忘備録、Track info mod編。 - へっぽこデジタル生活

「Panel Stack Splitterでどうにかなるならそれでいいかなぁ……」ぐらいのゆるーい気持ちな上、問題点が若干ないわけでもない。でも気にしない。

まずは曲情報の前に演奏時間表示の設定を入れておきます。

Panel Stack Splitterの上で右クリック、splitter Settingsを選んで「script」タブを選び、「Per Second」タブを表示。「PerTrack」と違い、こちらは毎秒ごとの表示に使う部分です。

$puts(text,255-255-255) // 文字色

$font(,13,)

$drawtext([[%playback_time%' / ']%length%],350 ,550,100,50,$get(text),hcenter vcenter noclip)

PSSのデフォルトのサイズより大きめなのでフォントの指定が入っていますが、大きさだけなのでフォント名は省略した形です。

今回の曲表示に必要な変数は、

//情報欄関係

$puts(fontS,8) // 見出しのフォントのサイズ
$puts(fontM,11) // アーティスト名等のフォントのサイズ
$puts(fontL,13) // 曲名のフォントのサイズ

$puts(font_kihon,MeiryoKe_PGothic)//基本のフォント

$puts(font_col_text,0-0-0) // 基本の文字色

$puts(headX,90) // 見出しの開始位置の X 座標
$puts(contentX,165) // 曲情報の開始位置の X 座標

$puts(contentW,$sub(%_width%,$get(contentX),265))曲情報の幅

$puts(headXX,535) // 見出しの開始位置の X 座標その2
$puts(contentXX,610) // 曲情報の開始位置の X 座標その2

$puts(contentWW,$sub(%_width%,$get(contentXX),100))曲情報の幅その2

$puts(font_text_op1,left vcenter end_ellipsis)//文字左寄せ

$puts(font_text_op2,right vcenter)//見出し文字右寄せ

$puts(font_text_op3,hcenter vcenter end_ellipsis)//文字中央寄せ


変数は他と同じく冒頭に書きますが、フォントの指定が入るので、構文に関してはPSSのデフォルトの設定を利用しているテキストボタンが影響を受けないよう、一番最後に書いておきましょう。

まずは情報表示する部分を囲む枠を作ります。なくても特に問題はありませんが、見栄え的な意味で作ってみました。使う関数は

$drawroundrect(x,y,w,h,w2,h2,colour1,colour2,RESERVED)

という、角が丸い四角形を描画するものです。$drawrectとお間違えなきよう。

x(の位置)・y(の位置)・w(幅)・h(高さ)はすぐに分かるかと思いますが、ここのポイントはw2・h2、角の丸みを指定する部分です。

コンポーネント附属のテキストには、w2(丸みの幅)・h2(丸みの高さ)とあり、

※w > 4 * w2 && h > 4 * h2 を満たす必要がある。

という注釈が付いています。今回使った構文を例にすると、

$drawroundrect(80,10,640,100,7,7,255-255-255-128,255-255-255-128,)//曲情報の角丸枠

ですから、

w > 4 * w2は「640の方が28(4×7)より大きい」
h > 4 * h2は「100の方が28(4×7)より大きい」

となり、「&&」はANDという意味ですので、

「640の方が28(4×7)より大きい」かつ「100の方が28(4×7)より大きい」という条件を満たしておく必要がある、となる……で、いいのか?

colour1(中の色)
colour2(枠の色)

のカラー指定ですが、例を挙げると「255-255-255-128」の四番目の「128」部分は、透過度を指しています。ちなみに「128」という数値は、テキストボタンのカラー設定の透過度と合わせているからです。白がうっすら透け透けですね……と書くと、そこはかとなくいやらしいのは何故なのだろう(どうでもいい)

これで曲情報を表示する場所を用意しました。次は文字です。

$font(name,size,OPTIONS)
文字の指定

$drawtext(text,x,y,W,H,r-g-b,OPTIONS)
文字の描画

$drawtextex(text,x,y,W,H,r-g-b,OPTIONS)
文字の描画

これらを使いますが、$drawtextと$drawtextex、同じような命令なら一つでいいんじゃないかと思いますよね? これはOPTIONSの部分に違いがあって、$drawtextexは「end_ellipsis」が使えるんです。

「end_ellipsis」は文字の表示が指定した幅を超えてしまった時、テキストの最後を「…」に変換するという設定。文字が短くて済む見出しには$drawtextを、文字列が長くなる可能性の高い、曲やアルバム等の名前の表示には$drawtextexと、使い分けてるんですね。

これから曲情報の見出しや曲名の表示の構文が書かれるわけですが、それぞれにフォントの大きさが違うので、

フォント指定(小)
見出し用の構文 ←フォント指定(小)が影響する

フォント指定(大)
曲名、レーティング名の構文 ←フォント指定(大)が影響する

フォント指定(中)
見出しの内容の構文 ←フォント指定(中)が影響する

という風に分けて書くようにして下さい。


//見出し
$font($get(font_kihon),$get(fontS),)
$drawtext(曲名 :,$get(headX),17,60,20,$get(font_col_text),$get(font_text_op2)) // [曲名 :] という見出しを表示
$drawtext(アーティスト :,$get(headX),40,60,20,$get(font_col_text),$get(font_text_op2)) // [アーティスト :] という見出しを表示
$drawtext(アルバム :,$get(headX),63,60,20,$get(font_col_text),$get(font_text_op2)) // [アルバム :] という見出しを表示
$drawtext($if(%last_played%,最終再生日 :),$get(headX),86,60,20,$get(font_col_text),$get(font_text_op2)) // [最終再生日 :] という見出しを表示

これは曲情報の左側の見出し、右側は

//見出しの右側
$drawtext(レーティング :,$get(headXX),17,60,20,$get(font_col_text),$get(font_text_op2)) // [レーティング :] という見出しを表示
$drawtext(年号 :,$get(headXX),40,60,20,$get(font_col_text),$get(font_text_op2)) // [年号 :] という見出しを表示
$drawtext($if(%tracknumber%,トラック番号 :),$get(headXX),63,60,20,$get(font_col_text),$get(font_text_op2)) // [年号 :] という見出しを表示
$drawtext(ゲイン :,$get(headXX),86,60,20,$get(font_col_text),$get(font_text_op2)) // [ゲイン :] という見出しを表示

で、一番下だけ真ん中に情報があるので、それ用に

//最下段真ん中見出し
$drawtext($if(%first_played%,初回再生日 :),$add($get(headX),230),86,60,20,$get(font_col_text),$get(font_text_op2)) // [初回再生日 :] という見出しを表示

となっています。

$font($get(font_kihon),$get(fontS),)

これが見出しのフォント指定です。$get(font_kihon)でフォント名、$get(fontS)でサイズを代入しています。

等幅フォントかプロポーショナルフォントかで見た目の印象も結構違いますから、フォント選びは大事です。それに個性的なフォントを使うのは楽しいけど、やっぱり情報は見やすい無難なフォントの方がね……うん。

ちなみに

等幅フォント どの文字も等しい幅のフォント
プロポーショナルフォント 文字によって幅がまちまちなフォント

です。お好きな方をどうぞ。

$drawtext(曲名 :,$get(headX),17,60,20,$get(font_col_text),$get(font_text_op2)) // [曲名 :] という見出しを表示

これは$get(headX)で左側の見出しのxの位置を表し、$drawtextなので、$get(font_text_op2)でそれ用のオプションが代入されています。$get(font_col_text)はカラー設定です。左側の見出しなので$get(headX)をxにしていますが、右側の場合は$get(headXX)で別の変数に変えています。

例外的なのがこれ。

$drawtext($if(%first_played%,初回再生日 :),$add($get(headX),240),86,60,20,$get(font_col_text),$get(font_text_op2)) // [初回再生日 :] という見出しを表示

冒頭の$if(%first_played%,初回再生日 :)は情報がなければ見出しも表示されないように$if文にしています。

xが「$add($get(headX),240)」となっているのは、一番下だけ最終再生日・初回再生日・ゲインと三種類並んでいるからです。何かいい加減に出した数値と思われそうですが、一応計算して出した数値です。

枠の幅を二で割って枠の半分の幅を出し、

640÷2=320

そこから更に枠のxの数値を引いた数値です。

320-80=240

それを$get(headX)、左側の見出しのxの始点に足してます。これでバランスよく横並びできている……ような???

細かいことは気にしないで先へ進みます。次は曲名とレーティングの表示です。

実は先述した問題点があるというのは、ここのレーティング部分なんですよね。添付テキストに書いてあったのですが、Panel Stack Splitterのscript「Per Track」が更新されるのは、

・サイズが変更
・再生トラックが変わった時
・再生・一時停止状態が変わった時
・ボタン関数でREFRESHした時

となっています。だからEsPlaylistの方でレーティングの変更をしたとしても、即時に情報が反映されるわけじゃない。そこがちょっと気になる……。

まぁ面倒な事はうっちゃって、続きです。

//曲名とレーティング
$font($get(font_kihon),$get(fontL),)
$drawtextex(%title%,$get(contentX),13,$get(contentW),24,$get(font_col_text),$get(font_text_op1)) // 曲名を表示

$drawtextex($if($not(%rating_stars_fixed%),☆☆☆☆☆,%rating_stars_fixed%),$get(contentXX),13,$get(contentWW),24,$get(font_col_text),$get(font_text_op3)) // レーティングベース

フォント指定でサイズを変更するのは見出しと同じですが、見出しのxの位置、$get(contentW)は曲情報の幅です。中身の方は

$sub(%_width%,$get(contentX),265)

で、横幅からxの位置を引き、さらに

横幅「%_width%」-右側の見出しのx位置「$get(headXX)」

800-535=265

という計算で出した数値で引くことにより、右側のx位置のギリギリまで曲を表示する幅を取っています。ここは後のアーティスト名やアルバム名にも使うので、長ったらしい名前やタイトルでもどんと来いです! 多分ね!

$get(font_text_op1)は$drawtextexで使える「ellipsis」が入ったオプションです。$get(font_text_op3)も中身はほぼ同じで、左寄せか中央寄せかの違いしかありません。

レーティングの表示部分は、

$if($not(%rating_stars_fixed%),☆☆☆☆☆,%rating_stars_fixed%)

となっており、

$not(x)
論理否定

が使われています。

これは否定に使われるもので、この場合だと$not(%rating_stars_fixed%)、つまり%rating_stars_fixed%がない場合、という意味になります。

ここで%rating_stars_fixed%なるものが出てきました。これは「Playback Statistics」というコンポーネントを入れると使えるもので、以前使っていたCustom Databaseの代わりに導入しました。他にも

%last_played%  最後に再生した日時
%first_played%  最初に再生した日時
%play_count%  再生数
%added%  Media Libraryに登録された日時
%rating%  Rating
%played_per_day%:  一日に何回再生されたか?

というのが使えるように。

%rating_stars_fixed%は、★★★☆☆ のような星表示ですが、★★★という表示をする%rating_stars%もあります。

レーティングに使われた$if文は、レーティングが入っていないなら「☆☆☆☆☆」を表示し、あるなら%rating_stars_fixed%を表示せよ、と命令しているわけですね。ちなみに$ifを使わず%rating_stars_fixed%のみだと、何も入ってない場合は「?」表示になってしまいます。

それが終わったら、残りの情報を一気に書き込みます。

//見出しの内容
$font($get(font_kihon),$get(fontM),)
$drawtextex(%album artist%,$get(contentX),38,$get(contentW),24,$get(font_col_text),$get(font_text_op1)) // 歌手名を表示
$drawtextex(%album%,$get(contentX),61,$get(contentW),24,$get(font_col_text),$get(font_text_op1)) // アルバムを表示
$drawtextex([$substr(%last_played%,1,10)],$get(contentX),85,$get(contentW),24,$get(font_col_text),$get(font_text_op1)) // 最終再生日を表示

//最下段真ん中内容
$drawtextex([$substr(%first_played%,1,10)],$add($get(contentX),240),85,$get(contentW),24,$get(font_col_text),$get(font_text_op1)) // 初回再生日を表示

//見出しの内容右側
$drawtextex(%date%,$get(contentXX),38,$get(contentWW),24,$get(font_col_text),$get(font_text_op3)) // 年号を表示
$drawtextex([%tracknumber%],$get(contentXX),61,$get(contentWW),24,$get(font_col_text),$get(font_text_op3)) // トラックナンバーを表示
$drawtextex([%replaygain_track_gain%],$get(contentXX),85,$get(contentWW),24,$get(font_col_text),$get(font_text_op3)) // トラックゲインを表示

見出しの右側に関しては、$get(contentXX)や$get(contentWW)という、右側用の変数を代入します。$get(contentWW)の中身は

$sub(%_width%,$get(contentXX),100)

であり、これはまず枠のxが80であるのに対し、見出しのxが90、つまり枠と文字の間に10の空きがある、となります。それを枠の先端だけでなく後ろ側にも適用したいので、

最初に横幅から右側の見出しのx位置を引き、

800-535=265

更に横幅から枠の幅を引いてそれを二で割ったものを引き、

265-((800-640)÷2)=185

見出しのx位置から見出しの中身のx位置までの距離は全て75ですから、

185-75=110

最後に枠と文字の間に10の空きを入れたいので、

110-10=100

と、こんな感じで100を算出しました。

あと説明するような場所は……$substr(%last_played%,1,10)か? ここの$substrは

$substr(s,m,n)
文字列sのm文字目からn文字目を返す

であり、本来は日付だけでなく時刻まで登録された%last_played%から、年号、日付の部分だけ取り出しています。

これで曲の情報も表示されるようになりました。

帰ってきた忘備録、Panel Stack Splitter編、漸くの終了です。

大きな山場を越えたかのように見えますが、まさかこの後、Google検索VS私の第二ラウンドのゴングが鳴り響くと、一体誰が予想し得たでしょうか? 不吉な前振りをしつつ、帰ってきたfoobar2000忘備録、絶望のWSH Panel Mod編へ続きます。
関連記事

Comment

(編集・削除用)
管理者にだけ表示を許可

Trackback

URL
http://dejiseikatu.blog77.fc2.com/tb.php/376-f6ce682b
この記事にトラックバック(FC2Blog User)

サイト内検索

月別アーカイブ

07  02  11  10  05  04  03  02  12  11  10  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10 

スピーカー。

利用してる所とか。

ネットで買い物するなら。



ここで古本買ってます。 ブックオフオンライン

QRコード

QR

FC2カウンター

プロフィール

番頭はん

Author:番頭はん
腐女子なのに時々それを忘れる駄目オタク。
一日に二杯の珈琲を与えないと、目に見えて機嫌が悪くなる。
このサイトについて

ランキングに参加中。

人気ブログランキングへ

メールで連絡を取りたい方はこちらからどうぞ。

Amazon検索

カテゴリ

ユーザータグ

お世話になってます。



リンクシェア アフィリエイト紹介プログラム

最新コメント

最新トラックバック

Copyright © 番頭はん
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。