スポンサーサイト

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

帰ってきた「foobar2000」忘備録、Panel Stack Splitter最終戦?

私にはわからない いつもそうだ……
自分の(カスタマイズ)力を信じても
信頼に足るサイトの記述を信じても……

結果は誰にも分からなかった……


(構文ミスってPSSに置いたボタンが全消えしたfoobar2000を眺めながら)
まず最初に謝罪をしておきます。

前回のカスタマイズで、私、初歩的なミスをしてしまいました。しかも気づいたのは今回のカスタマイズ時です。うっかりにも程がある!

「foobar2000」忘備録、Panel Stack Splitter編その4。 - へっぽこデジタル生活にて、

$puts(tefow,brushcolor:0-0-0-128) // テキストボタンの外枠色

となってましたが、本当は

$puts(tefow,pencolor:0-0-0-128) // テキストボタンの外枠色

でした。本とすみません(´;ω;`)

今回はそんな間違いはない……筈。

ではテキストボタンも画像ボタンと同じく、復習していきましょう。テキストボタンに必要な変数は、

//テキストボタン短め
$puts(tekix,160) //テキストボタン1つ目の開始位置の X 座標
$puts(tekiy,20) // テキストボタン1つ目の開始位置の y 座標
$puts(tekip,80) // テキストボタン 1 つあたりの幅
$puts(tekih,20) // テキストボタン 1 つあたりの高さ

// テキストボタン長め
$puts(tekixl,0) //テキストボタン1つ目の開始位置の X 座標
$puts(tekiyl,20) // テキストボタン1つ目の開始位置の y 座標
$puts(tekipl,200) // テキストボタン 1 つあたりの幅
$puts(tekihl,20) // テキストボタン 1 つあたりの高さ

// テキストボタン
$puts(tefoc,fontcolor:255-255-255) // テキストボタンの色
$puts(tefob,brushcolor:0-0-0-128) // テキストボタンの背景色
$puts(tefow,pencolor:49-103-69-128) // テキストボタンの外枠色

// テキストボタンのマウスオーバー時
$puts(tefocm,fontcolor:0-0-0) // テキストボタンの色
$puts(tefobm,brushcolor:255-255-255-128) // テキストボタンの背景色
$puts(tefowm,pencolor:255-255-255-128) // テキストボタンの外枠色

変数は他のボタンや表示に使う変数と一緒に、冒頭に入れて下さい。「PerTrack」の冒頭で変数宣言しなきゃ意味ないですよ!

あと今回、テキストボタンにフォントの指定をしていませんが、これはベースのPanel Stack Splitter設定をそのまま使っているからです。

設定の場所は、ベースのPanel Stack Splitterの「splitter Settings」を開き、「Behaviour」タブ→「Default font」ボタンを押して下さい。フォントの種類とサイズが選べます。

テキストボタンの関数は

$textbutton(x,y,w,h,text,mover_text,command,options1,options2)

で、$imagebuttonで画像を指定する場所に文字を入れます。

//再生中の曲にフォーカス

$textbutton($add($mul($get(tekipl),0),$get(tekixl)),$add($mul($get(tekihl),24),$get(tekiyl)),$get(tekipl),$get(tekihl),
'Activate now playing',
'Activate now playing',
COMMAND:'View/Columns playlist/Activate now playing',
$get(tefoc) $get(tefob) $get(tefow),
$get(tefocm) $get(tefobm) $get(tefowm)
)

入れなくても大丈夫らしいですが、念の為、表示する文字の部分を「'」で囲んで下さい。

何というか、楽なもんですね。位置取りの仕組みは前回の画像ボタンと同じだし、それ以外も似たようなもの。画像ボタンが理解できれば、そう小難しくはありません。寧ろ楽勝、確実に勝ちを拾える展開です。

が、ここで番頭はん、ソフトに最初から入っていて前回も利用した「playback_order」パネルを置けばいいものの、「どうせならPanel Stack Splitterで表示したい」と思ってしまったわけです。

Panel Stack Splitterの独自のものではありますが、playback_orderの値を返す「%ps_playback_order%」というのもありますし、参考にできそうな他所様の構文もあるのでチャレンジしてみたものの……これがどうにも上手くいかない。

何が違う? どれが正しいんだ?

もうそこからはGoogle検索VS私です。気付けばトライアンドエラーという名の地獄のロードに突入していました。

三日以上以上経っても駄目なので、当初の「クリックする度にプレイモードが変わる」ボタンは諦め、完成図のような「プレイモードをボタンで切り替える」方向へと考えをシフトしたわけですが……。

まぁそれですぐ解決するわけがないですよね!

うん知ってた。

しかしその後もGoogle検索との孤独な戦いを続ける羽目になったものの、その甲斐もあってか完成図のようなテキストボタンができました。

//テキストボタン

//デフォルト

$ifequal($stricmp(%ps_playback_order%,'Repeat (playlist)?'),1,
$textbutton($add($mul($get(tekip),1),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Default',
'Default',
COMMAND:'Playback/Order/Repeat (playlist)';REFRESH,
$get(tefocm) $get(tefobm) $get(tefowm),
$get(tefocm) $get(tefobm) $get(tefowm)
),
$textbutton($add($mul($get(tekip),1),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Default',
'Default',
COMMAND:'Playback/Order/Repeat (playlist)';REFRESH,
$get(tefoc) $get(tefob) $get(tefow),
$get(tefocm) $get(tefobm) $get(tefowm)
)
)


//繰り返し

$ifequal($stricmp(%ps_playback_order%,'Repeat (track)?'),1,
$textbutton($add($mul($get(tekip),2),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Repeat',
'Repeat',
COMMAND:'Playback/Order/Repeat (track)';REFRESH,
$get(tefocm) $get(tefobm) $get(tefowm),
$get(tefocm) $get(tefobm) $get(tefowm)
),
$textbutton($add($mul($get(tekip),2),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Repeat',
'Repeat',
COMMAND:'Playback/Order/Repeat (track)';REFRESH,
$get(tefoc) $get(tefob) $get(tefow),
$get(tefocm) $get(tefobm) $get(tefowm)
)
)

//シャッフル

$ifequal($stricmp(%ps_playback_order%,'Shuffle (albums)?'),1,
$textbutton($add($mul($get(tekip),3),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Shuffle',
'Shuffle',
COMMAND:'Playback/Order/Shuffle (albums)';REFRESH,
$get(tefocm) $get(tefobm) $get(tefowm),
$get(tefocm) $get(tefobm) $get(tefowm)
),
$textbutton($add($mul($get(tekip),3),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Shuffle',
'Shuffle',
COMMAND:'Playback/Order/Shuffle (albums)';REFRESH,
$get(tefoc) $get(tefob) $get(tefow),
$get(tefocm) $get(tefobm) $get(tefowm)
)
)

//ランダム

$ifequal($stricmp(%ps_playback_order%,'Shuffle (tracks)?'),1,
$textbutton($add($mul($get(tekip),4),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Random',
'Random',
COMMAND:'Playback/Order/Shuffle (tracks)';REFRESH,
$get(tefocm) $get(tefobm) $get(tefowm),
$get(tefocm) $get(tefobm) $get(tefowm)
),
$textbutton($add($mul($get(tekip),4),$get(tekix)),$add($mul($get(tekih),24),$get(tekiy)),$get(tekip),$get(tekih),
'Random',
'Random',
COMMAND:'Playback/Order/Shuffle (tracks)';REFRESH,
$get(tefoc) $get(tefob) $get(tefow),
$get(tefocm) $get(tefobm) $get(tefowm)
)
)

ではではここから楽しい(?)解説でーす。

プレイモード用のテキストボタンは、選んだプレイモードのボタンが押された状態となり、それ以外はオフ用のボタン表示になります。

ポイントはこの関数です。

$ifequal(n1,n2,then,else)
整数n1とn2を比較し、n1とn2が同数ならthemを演算し値を返し、
それ以外はelseを演算し値を返す。

各プレイモードのテキストボタンで使っている構文

$ifequal($stricmp(%ps_playback_order%,'プレイモード名'),1,
押された状態のテキストボタン表示,
オフ状態のテキストボタン表示
)

ですが、まず

$stricmp(%ps_playback_order%,'プレイモード名')は

$stricmp(s1,s2)
文字列s1とs2を大文字と小文字を区別しないで比較

ですから、「%ps_playback_order%」と「プレイモード名」を$stricmpで比較し、同じ文字列であれば押された状態のテキストボタン表示を、そうじゃなければオフ状態のテキストボタン表示しろ、という命令になります。

コマンドについては、今回はサイズ固定もありまして、使いそうな四つに絞って表示しています。そういう横幅的な事情もあって、Defaultと文字表示されていながら、実は「Repeat (playlist)」コマンドだったり、Randomと文字表示しながら実は(以下略)。画像ボタンの時と同じく基本コピペで増やすも減らすも自由にやって下さい。

プレイモードは色々あるので選ぶ時はお間違えなく。

Default
プレイリストを順番に演奏。終わったらそこで停止。

Random
次の曲を無作為に選ぶ。だが演奏済みなどは考慮しない。

Repeat (playlist)
プレイリストを順番に演奏。終わったらプレイリストの最初の曲に戻る。

Repeat (track)
トラックを繰り返し演奏する。

Shuffle (albums)
アルバム単位でのシャッフル再生。

Shuffle (folders)
フォルダ単位でのシャッフル再生。

Shuffle (tracks)
トラック単位でのシャッフル再生。

ランダム再生を期待して「Random」を選択すると、多分「何か思ってたのと違う」的なガッカリ感を味わうことになりかねないので、「Shuffle (tracks)」にしておきましょう。ちなみにシャッフル再生はプレイリストの順番をシャッフルして再生する為、同じ曲が何度も……ということはありません。

しかしね、自分で書いておきながらアレですが、

Shuffle (tracks)?
のハテナって何だよ!?


と思ってました。割りと最近まで。

%ps_playback_order%をテキスト表示して、初めて理由が分かったという間抜けっぷりです。でも「Menu command」だとShuffle (tracks)だし、すぐ気付くわけねー(言い訳)

でも、ふと思ったわけですよ。

カスタマイズも一段落し、グロッキー状態から脱した冷静な今なら作れるかもしれない。「クリックする度にプレイモードが変わる」、あのボタンを!

……結果として、意外とあっさりできました。

荒んだ心でGoogle検索と睨めっこをしていた過去の私はとんだ道化ですよコンチクショウ。何だろう嬉しい筈なのにちっとも嬉しくない……。

//切り替えオーダー

$textbutton($add($mul($get(tekipl),1),$get(tekixl),$div($get(tekipl),2)),$add($mul($get(tekihl),24),$get(tekiyl)),$get(tekipl),$get(tekihl),
$if($strcmp(%ps_playback_order%,'Default?'),'Default')$if($strcmp(%ps_playback_order%,'Random?'),'Random')$if($strcmp(%ps_playback_order%,'Repeat (playlist)?'),'Repeat (playlist)')$if($strcmp(%ps_playback_order%,'Repeat (track)?'),'Repeat (track)')$if($strcmp(%ps_playback_order%,'Shuffle (albums)?'),'Shuffle (albums)')$if($strcmp(%ps_playback_order%,'Shuffle (folders)?'),'Shuffle (folders)')$if($strcmp(%ps_playback_order%,'Shuffle (tracks)?'),'Shuffle (tracks)'),
$if($strcmp(%ps_playback_order%,'Default?'),'Default')$if($strcmp(%ps_playback_order%,'Random?'),'Random')$if($strcmp(%ps_playback_order%,'Repeat (playlist)?'),'Repeat (playlist)')$if($strcmp(%ps_playback_order%,'Repeat (track)?'),'Repeat (track)')$if($strcmp(%ps_playback_order%,'Shuffle (albums)?'),'Shuffle (albums)')$if($strcmp(%ps_playback_order%,'Shuffle (folders)?'),'Shuffle (folders)')$if($strcmp(%ps_playback_order%,'Shuffle (tracks)?'),'Shuffle (tracks)'),
COMMAND:Playback/Order/$if($strcmp(%ps_playback_order%,'Default?'),'Random')$if($strcmp(%ps_playback_order%,'Random?'),'Repeat (playlist)')$if($strcmp(%ps_playback_order%,'Repeat (playlist)?'),'Repeat (track)')$if($strcmp(%ps_playback_order%,'Repeat (track)?'),'Shuffle (albums)')$if($strcmp(%ps_playback_order%,'Shuffle (albums)?'),'Shuffle (folders)')$if($strcmp(%ps_playback_order%,'Shuffle (folders)?'),'Shuffle (tracks)')$if($strcmp(%ps_playback_order%,'Shuffle (tracks)?'),'Default');REFRESH,
$get(tefocm) $get(tefobm) $get(tefowm),
$get(tefoc) $get(tefob) $get(tefow)
)

参考にした所ではテキストボタン文字は空白、ボタン背景色と外枠色はPSSの背景色に合わせたものとなっており、その上に$drawtextでプレイモードを表示するという形でした。ですが私は他のテキストボタンと同じ形にしたかったので、このような感じに。

一見すると何が書いてあるか分からない感じですが、私もです。って、それじゃ駄目なんで拙いながらも説明をば。

ポイントはCOMMAND:Playback/Order/の部分で、これ以降を$ifで「%ps_playback_order%が○○モードと書いてあるなら○○モードという命令を入れる」と、プレイモードの数だけ繰り返します。

そしてまた出てきましたよ$strcmp! 「%ps_playback_order%」と「プレイモード名」を$stricmpで比較し、同じなら命令を実行しますが、違っていた場合は次の$if文へと移っていきます。文字列がdefaultならばRandom命令を、RandomならばRepeat (playlist)命令を……と、押す度に次のプレイモードへと切り替わっていくわけです。

文字表示の部分も$if文は似ていますが、

$if($strcmp(%ps_playback_order%,'Default?'),'Default')

のように、押す度に命令が切り替わっていくのとは違い、その時のプレイモード名がボタンに表示されます。

「プレイモード名を表示させるだけなら、%ps_playback_order%だけでいいんじゃないの?」と思うかもしれません。私もそう思いました。

ですが上記での「Shuffle (tracks)? のハテナって何だよ!?」という疑問に対する解答が、まさにここなのです。%ps_playback_order%だけだと、Default?やRandom?というハテナマーク付きで表示されてしまう。

それ故にわざわざハテナマークを外した形で文字を表示できるよう、$if文で指定を入れているのです。面倒だけど仕方ないね!

最後にこの長めのテキストボタン、横幅を四等分した幅なので、短めのボタンで作ったボタン達と入れ替えて置こうとすると、

$add($mul($get(tekipl),2),$get(tekixl))

と記述しても真ん中には置かれません。ですのでX部分は、

$add($mul($get(tekipl),1),$get(tekixl),$div($get(tekipl),2))

となっています。

$div(a,b)
a を b で割る。

を使い、「テキストボタン二個分の幅+Xの始点」では右に寄り過ぎた形になってしまう為、「テキストボタン一個分の幅+Xの始点+ボタン幅の半分」とすることで、中央に来るように調整したわけです。

こんな感じ。

foobar2000_15_03.jpg
画像クリックで元の大きさの画像が見られます。


……今回は頑張った……私、本と頑張ったと思うんですよ……と、自分で自分を慰めつつ、帰ってきた忘備録、まだまだ続きます。
関連記事

Comment

2015.05.02 Sat 18:38  |  

$puts(b_plao,
$ifequal(%play_order%,0,normal on,
$ifequal(%play_order%,1,reverse on,
$ifequal(%play_order%,2,shuffle on,
$ifequal(%play_order%,3,random on,)))))

$drawstring($get(b_plao),$sub($get(b_x),-1),$sub($get(b_y),-1),$get(b_w),$get(b_h),$get(black),hcenter vcenter aa)
$drawstring($get(b_plao),$get(b_x),$get(b_y),$get(b_w),$get(b_h),
$get(white),hcenter vcenter aa)

$init_ps_global(play_order,0)

$textbutton($get(b_x),$get(b_y),$get(b_w),$get(b_h),,,
SETGLOBAL:play_order:
$ifequal(%play_order%,0,
1;COMMAND:'Playback/Order/Repeat (track)',
$ifequal(%play_order%,1,
2;COMMAND:'Playback/Order/Shuffle (tracks)',
$ifequal(%play_order%,2,
3;COMMAND:'Playback/Order/Random',
$ifequal(%play_order%,3,
0;COMMAND:'Playback/Order/Default',))));REFRESH,,)

//戻るコマンド
$ifequal(%play_order%,3,
COMMAND:'Playback/Next',COMMAND:'Playback/Previous')

どうもはじめまして。ぽんきよと申します。
こちらの忘備録はカスタマイズする時いつも参考にさせてもらっています。
特にあどまるげっちゅの掛け算の辺りは重宝させてもらっています。
ありがとうございます。

上の書式は最近弄っているのを抜き出して少し改変して書いてみました。
PSオーダーでしたら少し強引だけどこれだと短くすむかもです。
下の戻るコマンドはランダムの時戻るボタンが役に立たない気がするので
コマンドのとこをこんな感じにごまかしたり。
一応試したつもりだけど間違ってたらめんごですw

  • #-
  • 名無しさん
  • URL

2015.05.06 Wed 21:35  |  コメント有難うございます!

初めましてぽんきよさん。
自分用のメモとして始めた忘備録ですが、
他の方のfoobarライフのお役に立てたのなら幸いです。
見る人が見れば結構アバウトな部分もあったりますが、
そこら辺は「さり気なくお茶を濁してやがる」と生暖かく見守って頂ければと。

> 上の書式は最近弄っているのを抜き出して少し改変して書いてみました。
> PSオーダーでしたら少し強引だけどこれだと短くすむかもです。

おぉ、凄いスッキリしてますね! 見やすい!
喜びの踊りを繰り広げつつ、早速忘備録で取り上げてみます。
鉄は熱いうちに打てではないですが、
とりあえずすぐメモっておく癖を付けたい今日この頃です。

  • #-
  • 番頭はん
  • URL

2015.05.10 Sun 13:44  |  

こんにちは。またお邪魔します。
いつも思ってたけど本当丁寧な解りやすい解説ですね。
グローバル変数とか特に考えないで使ってたけど何か勉強になりました。
てか、ブログの記事にするとは思わなかったけどw

それと戻るコマンドですけど自分も普段ランダムは使ってないんだけど
試したらPreviousボタン(戻るボタン)が反応しないんですよね。
それに何故か止まっちゃうので、とりあえず付けてみました。
そんな感じです。でわ。

  • #-
  • ぽんきよ
  • URL

2015.05.10 Sun 23:47  |  参考になることは見逃しませんよ!

こんにちは、近頃メモ癖をつけるべく努力中の番頭はんです。
foobar関連の記事は、
自分自身も復習しているつもりで書いています。
気楽に読み進めていく内に薄っすら分かった気になる、というのが理想ですね。

> てか、ブログの記事にするとは思わなかったけどw

しっかり参考にさせて頂きましたとも!
三度目のカスタマイズに供えて、
教わった事をしっかり咀嚼しておかなければと思った結果がこの記事です。
二回目も前回から数年後の突発的な衝動に駆られてですから、
まさかの三度目が……いや、今度は他所様のスキンで楽をしたい……(堕落思考)

> それと戻るコマンドですけど自分も普段ランダムは使ってないんだけど
> 試したらPreviousボタン(戻るボタン)が反応しないんですよね。

成る程、そういうわけでしたか。
ランダムに関しては参考にしたwikiの説明を読んで、
「果たしてそれは本当にランダムというのか?」と思ったクチです。
何も知らずにランダムを選んで同じ曲が続いたら、
思わず「ランダムじゃねぇぇぇ!」とfoobarさんにツッコミ入れてますね。

  • #-
  • 番頭はん
  • URL

2015.08.03 Mon 19:33  |  

こんにちは
ちょっと思いついたのですが、$ifequalじゃなくて$select使った方が短縮できたかも

$puts(b_plao,
$select(%play_order%,
normal on,reverse on,shuffle on,random on))

//↑はこれでもおk
//$select(%play_order%,
//$puts(b_plao,normal on)
//$puts(b_plao,reverse on),
//$puts(b_plao,shuffle on),
//$puts(b_plao,random on))

$init_ps_global(play_order,1) //ここは1の方が都合がよろしいかと

$textbutton($get(b_x),$get(b_y),$get(b_w),$get(b_h),,,
SETGLOBAL:play_order:
$select(%play_order%,
2;COMMAND:'Playback/Order/Repeat (track)',
3;COMMAND:'Playback/Order/Shuffle (tracks)',
4;COMMAND:'Playback/Order/Random',
1;COMMAND:'Playback/Order/Default');REFRESH,,)

こっちの方がスッキリするけど個人的には$ifequal使った方が分かりやすいかな
暑いので気が向いた時でも試してやってください~

  • #-
  • ぽんきよ
  • URL

2015.08.05 Wed 21:47  |  Re: タイトルなし

こんにちは、ぽんきよさん。
再度のアドバイス有難うございます!
最初「$selectって、あったっけ? 解説サイト解説サイト……」な
有り様でしたが、これもこれでスッキリして良いですねー。
何にせよ選択肢は多いに越したことはないかと。

> 暑いので気が向いた時でも試してやってください~

ヘッドホンを付けても平気な涼しさになったら、
頑張りたいと思います。
とはいえ正直私よりパソ吉さんがこの猛暑を乗り切れるかの方が心配ですけどね……。

  • #-
  • 番頭はん
  • URL
(編集・削除用)
管理者にだけ表示を許可

Trackback

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

サイト内検索

月別アーカイブ

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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。