スポンサーサイト

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

帰ってきた「foobar2000」忘備録、補習編。

音楽を聴かずにGWはゲーム三昧。
カスタマイズした意味とは一体……うごご……。
生来のやる気のなさを発揮してダラダラと過ごす日々でしたが、思いがけず素敵なコメントを頂いたので忘備録、ちょびっとだけ再開です。

帰ってきた「foobar2000」忘備録、Panel Stack Splitter最終戦? - へっぽこデジタル生活

にて、プレイモードの切り替えボタンの構文を載せたわけですが、まぁ何ですね、長すぎです。しかも分かり辛いという、載せた私も涙目な出来でした。

しかしそんな構文さんに、スリム化という光明が!

コメントを下さいましたぽんきよさんに、多大なる感謝とドリップコーヒーをお供えしておきます。こういうアドバイスがあるからこそ、細々ですがブログを続けられるというものです。

//切り替えボタン

$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,,)

ただしこれだけコピペして楽をしようとしても駄目です、冒頭にこれも付け足しておきましょう。変数は宣言しないと何も始まりません。

$puts(b_x,100)
$puts(b_y,0)
$puts(b_h,20)
$puts(b_w,80)
$puts(black,0-0-0-128)
$puts(white,255-255-255-128)

構文はとりあえず噛み砕いてみるのが私の悪い癖。そんなわけで解説です。

$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,)))))

まずこれですね。

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

ですから、プレイモードがが0なら「normal on」、プレイモードが1なら「reverse on」……と、条件にあうなら指定の文字を表示する命令、条件に合わなかったらelse部分である次の条件命令へと移っているわけですね。

ここが表示される文字を担当する変数となります。

私の場合、$textbuttonの構文に全ての仕事を丸投げした結果、えらくごちゃごちゃした長文になってしまい頭を抱えてしまいましたが、この構文は違います。$drawstringで文字表示部分を担当し、$textbuttonでボタンを押した時の動きを担当という、分業体制を敷いています。だから見た目にもスッキリ!

$drawstring(text,x,y,w,h,color,OPTIONS [,OPTIONS2])

という文字部分ですが、

$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)

と二行に渡って書かれていて「何故二行?」と思いましたが、実際に表示させてみると単純に表示させるより何だか格好良い、だと!? こういうセンスが私にもあれば、過去の美術の成績だってもうちょっとマシに……は、なりませんね、1が2になったところで救いなんてねぇですよ(´;ω;`)

ここの$get(b_plao)で、冒頭で宣言したプレイモードに合わせてくるくる変わる文字表示の命令が生きるわけです。

とはいえあくまで$drawstringは文字の描画、書かれているだけであって、そこをクリックしたところで意味はなし。

だからこその$textbuttonさんです。

テキストボタン領域の上に$drawstringで描画された文字が表示されているので、文字部分をクリックするとプレイモードが変更されているように見える、というわけです。どちらも良い仕事をしてますね!

おっと、$drawstringと$textbuttonの間にこれがありました。

$init_ps_global(play_order,0)

これは

$init_ps_global(name,value)
nameというグローバル変数を作成し、値valueを設定。

という、PSSで使える変数です。通常の変数は記述されたパネルでのみ有効ですが、これはグローバル変数故に、全てのPSSで共通して使えます。

テキストボタンの構文は

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

ですので、

$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,,)

となります。ポイントは「SETGLOBAL」、これはPSSの添付ファイルにも記載されていますが、

SETGLOBAL:name:val
グローバル変数nameにvalを設定

というもので、ここではグローバル変数「play_order」の中身を、$ifequalで条件分岐させています。

%play_order%が0ならば1を代入し、
かつコマンドでプレイモードをリピートに変える

$ifequal(%play_order%,0,
1;COMMAND:'Playback/Order/Repeat (track)',

%play_order%が1ならば2を代入し、
かつコマンドでプレイモードをシャッフルに変える

2;COMMAND:'Playback/Order/Shuffle (tracks)',
$ifequal(%play_order%,2,

という感じで条件に合うまで命令を繰り返し、押す度に情報が書き換わるわけですから、コマンド命令の最後に「;REFRESH」を忘れず付け足し。

何ということでしょう。あんなに長ったらしかったプレイモードの切り替え構文が、$drawstringと$textbuttonに仕事を割り振ることによって、とっても見やすいかつ分かりやすくなっています。

万が一何処かミスっても、原因を調べやすい。
これは便利(確信)

あとランダムの時のみ使えるコマンドも教わりました。

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

個人的に「Playback/Order/Random」は使わないのでまだ試してませんが、同じ曲が連続して流れる場合も多々あるらしいので、こういう方がいいのかも?

ゴールデンウィークはゴールテープが見えてしまいましたが、foobar2000のカスタマイズは三百六十五日、二十四時間いつでもウェルカムです……と、怪しげなノリで勧誘しつつ、帰ってきた「foobar2000」忘備録、補習編の終了です。
関連記事

Comment

2015.07.06 Mon 15:37  |  パネル切り替え

最近TFを勉強し始めたのですが、質問があります。
パネル切り替えについてです。
親パネル(ベース)にボタンを置いて子パネルを表示しています。
子パネルを最大表示しているので親パネルのボタンで-1のトグルができません。
親パネル(ベース)に名前を付けられないからかわかりませんが、子から親へ切り替えられません。なにか対策はないでしょうか?

  • #RHUSrk0o
  • 山田
  • URL
  • Edit

2015.07.06 Mon 23:56  |  Re: パネル切り替え

こんばんは、山田さん。

> 子パネルを最大表示しているので親パネルのボタンで-1のトグルができません。
> 親パネル(ベース)に名前を付けられないからかわかりませんが、子から親へ切り替えられません。なにか対策はないでしょうか?

私もヒヨッコ同然なので大したアドバイスもできませんが、
下とか左とか、とにかく小パネルの高さか幅を五ミリ程度でいいです、
小さくしてベースの親パネルが弄れるようにできませんか?
そこにこそーりと切り替えボタンを配置してみるとか。

テキストボタン(文字なし)にしておけば、
パネルと色を合わせればの何処にあるのか分からないレベルですし、
色を付けて分かりやすくするにしても五ミリとかその程度なら、
自己主張するほど目立つものでもない……気が。

ブログの
『帰ってきた「foobar2000」忘備録、Panel Stack Splitter序盤戦。』
で、二代目の完成図を載せていますが、
左上にある灰色の細長いボタン部分が多少の参考になるかと。
ちなみにボタンの高さは七ミリです。

  • #-
  • 番頭はん
  • URL

2015.07.07 Tue 11:29  |  

実は一号機ではそうしているんです。
親からしか命令できないのは不便ですね。
仮に親に名前を付けられたらできるでしょうか?
もう一枚PSS追加して。

  • #RHUSrk0o
  • 山田
  • URL
  • Edit

2015.07.07 Tue 22:33  |  Re: タイトルなし

> 仮に親に名前を付けられたらできるでしょうか?
> もう一枚PSS追加して。

今まであちこちサイトさんを見て回りましたけど、
見た限り皆さん親パネルにボタンを置いてますね。
小パネルからの命令が効かないからそうしているのか、
あえて誰もやってないだけなのか……うーん……。

何だかまだまだ奥深そうなfoobar2000。
三度目は絶対ないと公言しているのに、
若干うずうずしてしまいますね。

  • #-
  • 番頭はん
  • URL

2015.07.09 Thu 11:43  |  

子パネル全画面配置して、そこから親パネル操作したいなら、グローバル変数にパネル状態を登録してWINDOWSIZEを使ってTFを再評価させる方法

というのがあるらしいです。
それらしきソースは見つけたのですが、挑戦中です。
$ifequalが出てきました。

  • #JXoSs/ZU
  • 山田
  • URL
  • Edit

2015.07.10 Fri 21:34  |  Re: タイトルなし

他にも方法はあるんですね。
でも結構頑張らないと駄目な感じで、
常に楽をしたがる私にはハードルが高い気ががが……。

  • #-
  • 番頭はん
  • URL

2015.07.13 Mon 14:16  |  

どうも。
今はPSSの切り替えを保留して、
FUIで作っています。
トグルボタン作るのに苦戦しています。
切り替えはまだなので。

  • #RHUSrk0o
  • 山田
  • URL
  • Edit

2015.07.14 Tue 23:52  |  Re: タイトルなし

着実にfoobarカスタマイズの深みに嵌っていらっしゃるようで、
グロッキー状態になった経験もある身としては若干の心配が。
余り根を詰めないで下さいね。

  • #-
  • 番頭はん
  • URL

2015.07.17 Fri 11:34  |  

どうも。
FUIでパネル切り替えできました。
あまりにも簡単にできたので拍子抜けでした。
別の部位に苦戦していますが。
力になってくれてありがとう。

  • #RHUSrk0o
  • 山田
  • URL
  • Edit

2015.07.18 Sat 22:44  |  Re: タイトルなし

> あまりにも簡単にできたので拍子抜けでした。

思いがけずあっさり解決、
まさにfoobarカスタマイズあるある。

余り夢中になると時間をわすれますからね、
「あれ? いつの間にか朝!?」とかやらかしますからね……と、
経験者はそっと語っておきます。

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

Trackback

URL
http://dejiseikatu.blog77.fc2.com/tb.php/381-b69329db
この記事にトラックバック(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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。