このコンポーネントは、いろいろな種類のTitleFormattingの関数を追加したりすることができます。
Preferences>Tools>foo_func から設定できます。
Preferencesページを開いている間はRunボタンを押さない限り実行されません。 これはTFに異常な処理を記述してしまった場合などのセーフモード的な処理で仕様です。
TitleFormattingの解説は、Reference や Title Formatting Help などを参考にしてください。
expr
計算式 : 使用できる演算子は+(加算),-(減算),*(乗算),/(除算),%(余り ('%')),{}(カッコ)
$calc({1+2}*3) → 9 $calc(10'%'3) → 1 $calc(1.5/2) → 0.75
'judge tf'
判定するTF(エスケープ文字対応) : 評価した値が1の場合、exec tfを実行する
'exec tf'
実行するTF(エスケープ文字対応)
loop
無限ループ防止用、最大ループ回数 : 省略時は100が設定される
$while('1','$hash(test,$add(%test%,1))',10)
str
文字列
charcode
文字コードutf8,sjis,eucを指定 : 省略時はsjisが設定される
$urlencode(あいう,utf8) → %E3%81%82%E3%81%84%E3%81%86Run ServiceにGoogle検索を追加して使う場合はこんな感じ
http://www.google.com/search?q=$urlencode(%artist% %title%,utf8)&ie=utf-8
str
文字列
$console(test)
file
実行するファイルまたはURLまたはフォルダ : 先頭に/でfoobar2000のProfileパスと置き換わる
param
実行するファイルに送るパラメータ
show
表示方法 (ファイルによっては無効)
- hide 非表示
- normal 通常表示
- maximize 最大化表示
- minimize 最小化表示
$execute('http://foobar2000.xrea.jp/index.php')メモ帳を最小化して開く
$execute(c:\windows\notepad.exe,,minimize)c:\をエクスプローラで開く
$execute(c:\)再生を開始する
$execute('c:\program files\foobar2000\foobar2000.exe','/play',normal)
command
- play 再生
- next 次の曲へ
- prev 前の曲へ
- rand ランダム再生
- stop 停止
$playback_control(play)
file
ファイル名 : 先頭に/でfoobar2000のProfileパスと置き換わる
mode
- width 幅
- height 高さ
- type ファイルの種類(BMP/GIF/PNG/JPEG)
$getimageinfo(c:\test.png,type) → PNG幅を取得する
$getimageinfo(c:\test.png,width) → 1024
index
アクティブプレイリスト上のアイテムの位置
file
対象ファイル名
output
出力ファイル名(フルパス)
option
delete 存在しない場合はoutputのファイルを削除
// 書庫からcover.jpgの取り出しを試みる $puts(img,$unpack(%g_active_index%,cover.jpg,c:\temp\cover.jpg,delete)) // 存在しない場合は音源と同じフォルダのcover.jpg $if($get(img),,$puts(img,$replace(%path%,%filename_ext%,)cover.jpg)) // ファイル存在チェック $if($files($get(img)),,$puts(img,c:\temp\no-cover.jpg))
font-name
フォント名
font-size
フォントサイズ
font-option
- b 太字
- i 斜体
- u アンダーライン
- s 打ち消し線
str
文字列
mode
- width 幅を求める
- height 高さを求める
$calc_string('MS Pゴシック',10,ib,テスト,width)
str
文字列
byte
区切るバイト数
index
取得するindex番号(0が先頭)
option
count 分割数を取得する
$wstrsplit(あ1いうえおかきくけこ,4,0) → あ1 $wstrsplit(あ1いうえおかきくけこ,4,1) → いう $wstrsplit(あ1いうえおかきくけこ,4,0,count) → 6
font-name
フォント名
font-size
フォントサイズ
font-option
- b 太字
- i 斜体
- u アンダーライン
- s 打ち消し線
str
文字列
width
幅(ピクセル)
index
取得するindex番号(0が先頭)
option
count 分割数を取得する
$pstrsplit('MS Pゴシック',10,bi,あいうえおabcかきくけこ,30,0) $pstrsplit('MS Pゴシック',10,bi,あいうえおabcかきくけこ,30,0,count)
cmd
- n 数値を指定した場合は、n番目(0が先頭)に見つかったファイルを取得する
- count 総ファイル数を取得する
- size 総ファイルサイズを取得する
- path名 ファイルの存在確認をする
path
検索するパス(ワイルドカードで指定) : 先頭に/でfoobar2000のProfileパスと置き換わる
// ファイルの存在確認 $if($files(c:\temp\test.txt),trueの処理,falseの処理) // ファイル検索 $files(0,/images\*.jpg) $files(3,c:\temp\*.jpg,d:\images\%album%\*.jpg,d:\images\*.png) // 総ファイル数 $files(count,/images\*.jpg,c:\temp\*.jpg,d:\images\%album%\*.jpg,d:\images\*.png) // 総ファイルサイズ $files(size,c:\temp\*)
cmd
- n 数値を指定した場合は、n番目(0が先頭)に見つかったファイルを取得する
- count 総ファイル数を取得する
- size 総ファイルサイズを取得する
path
検索するパス : 先頭に/でfoobar2000のProfileパスと置き換わる
file
検索するファイル(ワイルドカードで指定)
$files_ex(0,/images,*.jpg) $files_ex(3,c:\temp,*.jpg,*.png,*.bmp) $files_ex(count,/images,*.jpg) $files_ex(size,c:\temp,*)
filename
ファイル名 : 先頭に/でfoobar2000のProfileパスと置き換わる
charcode
文字コードutf8またはsjisを指定 : 省略時はsjisが設定される
line from
開始行番号
line to
終了行番号
option
countline
行数を取得する(line fromとline toは無視される)
crlf
改行コードをCR+LFで出力する(デフォルトはLFのみ)
tf:'tf'
行毎にTFを適用し、その結果を出力する(エスケープ文字対応) : TF中に%textfile_line%で処理行の文字列が取得できる
$textfile($replace(%path%,%filename_ext%,)info.txt,sjis)2行目から3行目まで読み込む
$textfile(info.txt,sjis,2,3)2行目から読み込む
$textfile(info.txt,sjis,2)2行目まで読み込む
$textfile(info.txt,sjis,,2)行数を取得する
$textfile(info.txt,sjis,,,countline)改行コードをCRLFに変換して表示する
$textfile(info.txt,sjis,,,crlf)
filename
ファイル名 : 先頭に/でfoobar2000のProfileパスと置き換わる
str
書き込む文字列
charcode
文字コードutf8またはsjisを指定 : 省略時はsjisが設定される
option
- add ファイルが存在する場合、末尾に追加して書き込む
- crlf 末尾に改行コード(CR+LF)を書き込む
$textwrite('c:\text.txt',%title%,sjis) $textwrite('c:\text.txt',%track number%-%title%,sjis,add,crlf)
name
アイテム名
'tf'
実行するTF(エスケープ文字対応)
$setcontextmenu(test,'$console(%title%)')
name
アイテム名
$removecontextmenu(test)
command
- フルパスまたはコマンド名
- Convert/Convert to...の場合、Convert to...でも指定可能
- 使用できるコマンドは$contextmenu_list()を実行してConsoleより確認して下さい
target
- 実行するターゲットを指定する(省略時はplaylist)
- playlist プレイリストで選択中のファイル
- playing 再生中のファイル
$contextmenu_execute('Properties',playlist)再生中の曲を変換する
$contextmenu_execute('Convert to...',playing) $contextmenu_execute('Convert/Convert to...',playing)
$contextmenu_list()
name
アイテム名
'tf'
実行するTF(エスケープ文字対応)
$setmainmenu(test,'$setwindowsize(100,100)$transwindow(200)')
name
アイテム名
command
- フルパスまたはコマンド名
- Playback/Playの場合、Playでも指定可能
- 使用できるコマンドは$mainmenu_list()を実行してConsoleより確認して下さい
- タブ名を入れるとタブがActiveになるかも(Tabbed panel modifiedで確認)
$mainmenu_execute('View/Columns playlist/Activate now playing') $mainmenu_execute(Activate now playing)
popupmenu_id
ポップアップメニューID
$popupmenu_create(test)
popupmenu_id
ポップアップメニューID
$popupmenu_remove(test)
popupmenu_id
ポップアップメニューID
item_name
アイテム名 : 先頭に-を付けた場合、セパレータ表示となる
'tf'
- 実行するTF(エスケープ文字対応)
- %index% : index番号
- %checked% : チェックされている場合1、されていない場合は0を返す
option
check:'tf'
- チェック項目にするTF(エスケープ文字対応)
- tfを評価し0以外の場合、チェックを付ける
- %index% : index番号
- %checked% : チェックされている場合1、されていない場合は0を返す
$popupmenu_remove(test) $popupmenu_create(test) $popupmenu_additem(test,再生,'$playback_control(play)') $popupmenu_additem(test,停止,'$playback_control(stop)') $popupmenu_additem(test,-sep1) $popupmenu_additem(test,ランダム再生,'$playback_control(rand)') $popupmenu_additem(test,-sep2) $popupmenu_additem(test,次の曲,'$playback_control(next)')
popupmenu_id
ポップアップメニューID
item_name
アイテム名
$popupmenu_removeitem(test,ランダム再生)
popupmenu_id
ポップアップメニューID
$popupmenu_view(test)
cmd
- playlist プレイリスト
- itemlist アイテムリスト
'tf'
- 表示する内容をTFで指定する(エスケープ文字対応)
- %index% : index番号
- %playlist_name% : プレイリスト名(cmdがplaylistの場合に有効)
from index
開始index(0が先頭)
to index
終了index(0が先頭)
// プレイリスト $popupmenu_view_ex(playlist) // アイテムリスト $popupmenu_view_ex(itemlist,'%album%-%title%') // アイテムリスト // 選択中のアイテムの前後10件を表示 $popupmenu_view_ex(itemlist,'$wstrsplit(%artist%/%title%,40,0)',$calc(%g_active_index%-10),$calc(%g_active_index%+10))
index
- プレイリストのインデックス番号を指定する(0~%g_playlist_count%-1)
- 省略した場合はアクティブプレイリスト名が返る
$getplaylist(0)
playlist
- プレイリスト名
- activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、 省略した場合はアクティブプレイリストが設定される
$getitemcount(Default) $getitemcount(active) $getitemcount(playing)
index
プレイリスト上での位置(0が先頭)
'tf'
取得する情報をTFで指定する(エスケープ文字対応)
playlist
- プレイリスト名
- activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、 省略した場合はアクティブプレイリストが設定される
$getmeta(0,'%title%')再生中の曲情報を取得する
$getmeta(%g_playing_index%,'%album-%title%',playing)1つ前の曲のタイトルを取得する
$getmeta($calc(%g_playing_index%-1),'%title%',playing)
filename
出力するファイル名 : 先頭に/でfoobar2000のProfileパスと置き換わる
'tf'
出力する内容をTFで指定する(エスケープ文字対応)
playlist
- プレイリスト名
- activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、 省略した場合はアクティブプレイリストが設定される
$platlist_save(/test.m3u8,'%path%') $playlist_save(c:\temp\playlist.m3u8,'%path%',active)
'tf'
集計する情報をTFで指定する(エスケープ文字対応)
'extr tf'
- 抽出条件をTFで指定する(エスケープ文字対応)
- true(0以外)のアイテムのみ抽出対象となる
- 省略した場合は全アイテムが対象
playlist
- プレイリスト名
- activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、 省略した場合はアクティブプレイリストが設定される
$playlist_sum('%play_count%')アクティブプレイリストの中でアルバム名がtestのアイテムを抽出して再生回数の和を求める
$playlist_sum('%play_count%,'$if($strcmp(%album%,test),1,0)')
'tf'
集計する情報をTFで指定する(エスケープ文字対応)
'group tf'
グループ化条件をTFで指定する(エスケープ文字対応)
index
グループインデックス(0が先頭)
playlist
- プレイリスト名
- activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、 省略した場合はアクティブプレイリストが設定される
$playlist_group_sum('%play_count%','%album%',0)
aaaaa ← index=0 aaaaa aaaaa bbbbb ← index=1 bbbbb aaaaa ← index=2 ccccc ← index=3
type
- count アイテム数
- name グループ名
- index プレイリスト上のindex
- group グループ総数
'group tf'
グループ化するTF(エスケープ文字対応)
index
グループインデックス(0が先頭) : typeがgroupの場合は無視される
playlist
- プレイリスト名
- activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、 省略した場合はアクティブプレイリストが設定される
$playlist_group(count,'%album%',0)
aaaaa ← index=0 aaaaa aaaaa bbbbb ← index=1 bbbbb aaaaa ← index=2 ccccc ← index=3
old name
リネーム前のプレイリスト名
new nane
リネーム後のプレイリスト名
$playlist_rename(test,newplaylist)
name
プレイリスト名
index
- プレイリストを作成する位置(0が先頭)
- 省略した場合は一番最後に追加される
- 最後以外に追加した場合、Playlists Dropdownなどのコンポーネントで表示がおかしくなるので省略推奨、再起動すれば直る
$playlist_create(test)
name
プレイリスト名
$playlist_active(test)
使用例name
プレイリスト名
$playlist_exists(Default)
name
プレイリスト名
option
checkduplicate 重複追加しない
$playlist_addselecteditems(Default) $playlist_addselecteditems(Default,checkduplicate)
- 0 : ユーザによる停止
- 1 : EOF
- 2 : 他の曲が開始したため
- 3 : foobar2000の終了
- 0 : デフォルト
- 1 : Playback/Play
- 2 : Playback/Next
- 3 : Playback/Previous
- 4 : Set Track
- 5 : Playback/Random
- 6 : Resume
timeout
- タイムアウト間隔を1/100秒単位で設定する(100=1秒)
- 0を設定するとタイマー解除
$settimer(100)タイマーを解除する
$settimer()
file
保存するファイル名 : 先頭に/でfoobar2000のProfileパスと置き換わる
variable...
- 変数名(%は不要)
- enumhashを指定すると$hash関数で追加された変数を全て保存する
$save_variable('c:\test.var',var1,var2,test)$hash関数で追加された変数を全て保存する
$save_variable(/test.var,enumhash)
option
- register グローバル変数の登録にfoo_etcの$register関数を使用する(デフォルト)
- hash グローバル変数の登録に$hash関数を使用する
file
読み込むファイル名 : 先頭に/でfoobar2000のProfileパスと置き換わる
$load_variable('c:\test.var',hash)
flag
- 0 無効
- 1 有効
$setescape(1) $setmainmenu(test,'$console(\"1\")') $setescape(0)
key
キー
value
値
// 初期化(登録されているデータを全てクリアする) $hash() // 値設定 $hash(ringo,リンゴ) // 値取得 $hash(ringo) → リンゴ %ringo% → リンゴ // キー削除 $hash(ringo,)
$register(ary,1) %ringo%ary%%という表現方法はエラーになるが 連想配列の場合 $hash(ringo%ary%) で値を取得することができる
$register(ringo,リンゴ) $hash(ringo)
$hash(ringo,リンゴ) $hash(ringo)
sep
セパレータ (省略時は,)
$enumhash() → aaa,bbb,ccc $enumhash(|) → aaa|bbb|ccc
max
最大値
$random(10)
$while関数など関数中にTFを書く場合があります。 そのTF中で ' などの記号を使いたい場合にエスケープ文字を使い特殊な働きをキャンセルさせます。
\d : $ \p : % \{ : ( \} : ) \\ : \ \" : '
対応している関数はそれぞれの関数リファレンスを参照して下さい。 また、この機能は $setescape(1) をコールしている場合のみ有効です。
関数を使っているコンポネとそのバージョンは何でしょうか? Panels UI 0.13.x,Track Info,Track Info modでは曲を再生中、 またはFollow Cursorモードじゃないと使用できません。 foo_funcなどの拡張関数群はmetadbを参照する部分のhookを利用して実現しているので、 基本的にはmetadbの参照が不要な箇所のTFでは利用できないのです。 Panels UI 0.14.xやPanel Stack Splitterは対応しています。
狭い画面を有効活用したい時に便利です
1. On initなどのTFに追加
// ポップアップメニュー作成 $popupmenu_remove(popup1) $popupmenu_create(popup1) $popupmenu_additem(popup1,再生,'$playback_control(play)') $popupmenu_additem(popup1,停止,'$playback_control(stop)') $popupmenu_additem(popup1,-sep1) $popupmenu_additem(popup1,ランダム再生,'$playback_control(rand)') $popupmenu_additem(popup1,-sep2) $popupmenu_additem(popup1,前の曲,'$playback_control(prev)') $popupmenu_additem(popup1,次の曲,'$playback_control(next)') // 作成したポップアップメニューをメインメニューに割り当てる $setmainmenu(view popup1,'$popupmenu_view(popup1)')
2. あとはボタンなどの設定にFunctions/view popup1 を割り当てるだけ
1. On initなどのTFに追加
$setescape(1) $setmainmenu(view playlist,' $popupmenu_view_ex(playlist,\" $ifequal(%index%,%g_playing_playlist_index%,♪, $ifequal(%index%,%g_active_playlist_index%,■,□)) $calc(%index%+1). %playlist_name% \") ') $setescape(0)
2. あとはボタンなどの設定にFunctions/view playlist を割り当てるだけ
※アクティブなアイテムの前後x項目を表示させるようにしたい場合、アイテムリストのように「,$calc(%g_active_index%-15),$calc(%g_active_index%+15)」とfrom indexとto indexを追記するだけではダメ。 「アクティブなアイテム+x」個分のプレイリストを表示しようとして、実際に存在するプレイリストをオーバーした分が空で表示されてしまう。 このため、存在するプレイリストの個数を判定して表示数を制限する必要がある。
$setescape(1) $hash(playlistlimit,15) $setmainmenu(view playlist,' $hash(playlistnum,$calc(%g_playlist_count%-1)) $hash(playlistactiveplus,$calc(%g_active_playlist_index%+%playlistlimit%)) $hash(playlistmax,$ifgreater(%playlistactiveplus%,%playlistnum%,%playlistnum%,%playlistactiveplus%)) $popupmenu_view_ex(playlist,\" $ifequal(%index%,%g_playing_playlist_index%,♪, $ifequal(%index%,%g_active_playlist_index%,■,□)) $calc(%index%+1). %playlist_name%$ifequal(%index%,%playlistactiveplus%, $tab()Max$ifequal($calc(%index%+1),%g_playlist_count%, , . %g_playlist_count%), )\", $calc(%g_active_playlist_index%-%playlistlimit%), %playlistmax% )') $setescape(0)
1. On initなどのTFに追加
$setescape(1) $setmainmenu(view itemlist,' $popupmenu_view_ex(itemlist,\" $puts(m,□) $ifequal(%index%,%g_active_index%,$puts(m,■),) $ifequal(%g_active_playlist_index%,%g_playing_playlist_index%,$ifequal(%index%,%g_playing_index%,$puts(m,♪),),) $get(m) $calc(%index%+1). $wstrsplit(%artist%/%title%,60,0) \",$calc(%g_active_index%-15),$calc(%g_active_index%+15)) ') $setescape(0)
2. あとはボタンなどの設定にFunctions/view itemlist を割り当てるだけ
1. On initなどのTFに追加
$popupmenu_remove(popup_bg) $popupmenu_create(popup_bg) $popupmenu_additem(popup_bg,背景1, '$hash(BACKGROUND_IMAGE,bg1.jpg)$mainmenu_execute(Functions/redraw)', check:'$if($strcmp(%BACKGROUND_IMAGE%,bg1.jpg),1,0)') $popupmenu_additem(popup_bg,背景2,'$hash(BACKGROUND_IMAGE,bg2.jpg)$mainmenu_execute(Functions/redraw)', check:'$if($strcmp(%BACKGROUND_IMAGE%,bg2.jpg),1,0)') $popupmenu_additem(popup_bg,背景3,'$hash(BACKGROUND_IMAGE,bg3.jpg)$mainmenu_execute(Functions/redraw)', check:'$if($strcmp(%BACKGROUND_IMAGE%,bg3.jpg),1,0)') $setmainmenu(redraw,'**画面を再描画させるTFをここに書く**') $setmainmenu(view popup_bg,'$popupmenu_view(popup_bg)')
2. あとはボタンなどの設定にFunctions/view popup_bg を割り当てるだけ
Panel Stack Splitter: 画面の再描画をするには一時的にウインドウサイズを1ピクセル小さくした後、すぐに元のサイズに戻すTFを書けばできます
foo_title では、メニューコマンドの割り当て時にメニューの末尾だけ記述する。 このため、「Playback/Random」と「Playback/Order/Random」が区別されず、「Random」と記述した場合は「Playback/Order/Random」になってしまってランダム再生が実行できない。
1. On initなどのTFに追加
$setmainmenu(Random Play,'$mainmenu_execute(Playback/Random)')
2. あとはボタンに Random Play を割り当てるだけ
1. c:\temp\mes.vbsを作成
On Error Resume Next WScript.CreateObject("Messenger.UIAutomation.1").MyProperty(2) = WScript.Arguments(0)
2. On playback new trak の TF に追加
// Cover art to Windows Live Messenger // 表示させる画像設定 $hash(img,$replace(%path%,%filename_ext%,)cover.jpg) // cover.jpgが存在しない場合の画像設定 $if($files(%img%),,$hash(img,c:\temp\no-image.jpg)) $execute('c:\temp\mes.vbs',"%img%",hide)
On initのTFに追加
$setcontextmenu('add to favorite',' $hash(target,Favorite) $if($playlist_exists(%target%),,$playlist_create(%target%)) $playlist_addselecteditems(%target%,checkduplicate) $playlist_active(%target%) ')
これでコンテキストメニューにFunctions/add to favoriteが追加されるので、 あとはボタンに割り付けるだけでできます。 もし指定プレイリストが存在しない場合は新しくプレイリストを作成します。
mkaに入った曲の場合、プレイリストを保存して読み込むと「プレイリストに入っていた曲数の回数だけ、mkaファイル内の曲すべてが読み込まれる」という問題があります。 このため、バックアップ的にプレイリストをコピーして対処します。
1. On initのTFに追加
$setmainmenu(Backup Active Playlist,'$puts(activePlaylist,%g_active_playlist%) $if($playlist_exists($put(targetPlaylist,$get(activePlaylist)_backup)), $playlist_active($get(targetPlaylist)) $mainmenu_execute(Remove Playlist) $playlist_active($get(activePlaylist))) $playlist_active($get(activePlaylist)) $playlist_create($get(targetPlaylist)) $playlist_active($get(activePlaylist)) $mainmenu_execute(Select All) $playlist_addselecteditems($get(targetPlaylist),checkduplicate)')
2. メインメニューのFunctions/Backup Active Playlistを実行すると、「(元のプレイリスト名_backup)」という名称でプレイリストがコピーされます。ボタンやキーボードショートカットに割り当てても良いでしょう。
連続してコピーすると、前のコピーは破棄されます。
On playback new trackのTFに追加
$mainmenu_execute(Activate now playing)
曲が変わるたびにカーソルが再生中の曲に移動します
On playback new trackのTFに追加
$if( $or( $regexpi(%title%,'off vocal'), $regexpi(%title%,'less vocal'), $regexpi(%title%,'karaoke'), $regexpi(%title%,'カラオケ'), $regexpi(%title%,'\(Instrumental\)') ), $playback_control(next) )
※別途foo_etcが必要
// 表示幅 $hash(w,%_width%) // 表示文字列 $hash(s,'Hello, foo_func world!') // フォント名 $hash(fontname,MS Pゴシック) // フォントオプション $hash(fontopt,b) // 最大フォントサイズ $hash(fontsize,30) $while( '$ifgreater($calc_string(%fontname%,%fontsize%,%fontopt%,%s%,width),%w%,1,0)', '$hash(fontsize,$sub(%fontsize%,1))', 30 ) // 表示 $font(%fontname%,%fontsize%,include bold,0-0-255)%s%
※この例ではTrack info modを使用していますが、表示部分は各コンポーネントにあわせて修正する必要があります