現在?人閲覧中
目次
- foo_func
- 設定
- 関数・変数の解説
- 便利なツール
- 文字列の変換、比較
- ファイル操作
- メニュー操作
- ポップアップメニュー操作
- プレイリスト関連
- %g_playlist_count%
- %g_active_playlist_index%
- %g_active_playlist%
- %g_playing_playlist_index%
- %g_playing_playlist%
- %g_active_index%
- %g_playing_index%
- $getplaylist
- $getitemcount
- $getmeta
- $playlist_save
- $playlist_sum
- $playlist_group_sum
- $playlist_group
- $playlist_rename
- $playlist_create
- $playlist_active
- $playlist_exists
- $playlist_addselecteditems
- その他
- エスケープ文字とは
- よくある質問
- foo_func TF Tips
- ボタンを押してオリジナルのポップアップメニューを表示させたい
- ボタンを押してプレイリストのポップアップメニューを表示させたい
- ボタンを押してアイテムリストのポップアップメニューを表示させたい
- ボタンを押して背景画像選択ポップアップメニューを表示させたい
- foo_title で Playback/Random(ランダム再生)をボタンに割り当てたい
- アルバムアートをWindows Live Messengerのアイコンに設定する方法
- 選択中の曲を指定プレイリストに追加するボタンを作りたい
- 選択中のプレイリストをコピーしたい
- 再生中の曲がリスト上のどこにあるのか判り難いのでなんとかしたい
- カラオケなどプレイリスト上は表示させておきたいけど再生はスキップさせたい
- 表示幅に応じてフォントサイズを変更したい
foo_func
このコンポーネントは、いろいろな種類のTitle Formattingの関数を追加したりすることができます。
DLL配布元
設定
Preferences>Tools>foo_func から設定できます。
On init
foobar2000起動時に実行されるTF (meta情報の参照は不可)
On quit
foobar2000終了時に実行されるTF (meta情報の参照は不可)
On playback starting
再生開始時に実行されるTF (meta情報の参照は不可)
On playback new track
曲変更時に実行されるTF (meta情報の参照可)
On playback stop
現在の再生中の曲が停止された時に実行されるTF (meta情報の参照不可)
※次の曲の再生が始まった場合にもコールされる
On playback seek
シーク操作時に実行されるTF (meta情報の参照可)
On playback pause
一時停止時に実行されるTF (meta情報の参照可)
On playback time (per second)
再生中に毎秒単位で実行されるTF (meta情報の参照可)
On volume change
ボリューム変更時に実行されるTF (再生中の場合はmeta情報の参照可)
On timer
$settimerで設定した間隔で実行されるTF
Debug
TFのデバッグ用、Runボタン押下時以外は実行されない (再生中の場合はmeta情報の参照可)
※Preferencesページを開いている間はRunボタンを押さない限り実行されません
これはTFに異常な処理を記述してしまった場合などのセーフモード的な処理で仕様です
関数・変数の解説
Title Formattingの解説は、Reference や Title Formatting Help などを参考にしてください。
便利なツール
$calc
- 概要
- 計算式を実行する
- 書式
- $calc(expr)
expr
計算式
使用できる演算子は+(加算),-(減算),*(乗算),/(除算),%(余り ('%')),{}(カッコ) - 使用例
$calc({1+2}*3) → 9 $calc(10'%'3) → 1 $calc(1.5/2) → 0.75
$while
- 概要
- TFをループ評価する
- 書式
- $while('judge tf','exec tf',[loop])
'judge tf'
判定するTF(エスケープ文字対応)
評価した値が1の場合、exec tfを実行する
'exec tf'
実行するTF(エスケープ文字対応)
loop
無限ループ防止用、最大ループ回数
省略時は100が設定される - 使用例
$while('1','$hash(test,$add(%test%,1))',10)
- 補足
- 曲を再生中の場合はmeta情報の参照ができる
$urlencode
- 概要
- 文字列をURLエンコードする
- 書式
- $urlencode(str,[charcode])
str
文字列
charcode
文字コードutf8,sjis,eucを指定
省略時はsjisが設定される - 使用例
$urlencode(あいう,utf8) → %E3%81%82%E3%81%84%E3%81%86
Run ServiceにGoogle検索を追加して使う場合はこんな感じhttp://www.google.com/search?q=$urlencode(%artist% %title%,utf8)&ie=utf-8
$console
- 概要
- consoleに文字を出力する
- 書式
- $console(str)
str
文字列 - 使用例
$console(test)
$execute
- 概要
- 外部アプリケーションを実行する
- 書式
- $execute(file,[param],[show])
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)
$playback_control
- 概要
- 再生をコントロールする
- 書式
- $playback_control(command)
command
play 再生
next 次の曲へ
prev 前の曲へ
rand ランダム再生
stop 停止 - 使用例
- 再生を開始する
$playback_control(play)
$getimageinfo
- 概要
- 画像の情報を取得する
対応している形式はBMP/GIF/PNG/JPEG形式 - 書式
- $getimageinfo(file,mode)
file
ファイル名
※先頭に/でfoobar2000のProfileパスと置き換わる
mode
width 幅
height 高さ
type ファイルの種類(BMP/GIF/PNG/JPEG) - 使用例
- 種類を取得する
$getimageinfo(c:\test.png,type) → PNG
幅を取得する$getimageinfo(c:\test.png,width) → 1024
$unpack
- 概要
- 書庫から画像等を解凍する(Matroska対応)
- 書式
- $unpack(index,file,output,[option])
index
アクティブプレイリスト上のアイテムの位置
file
対象ファイル名
output
出力ファイル名(フルパス)
option
delete 存在しない場合はoutputのファイルを削除 - 使用例
- 再生中の曲が含まれる書庫からcover.jpgを解凍しc:\temp\cover.jpgに出力する
存在しない場合はc:\temp\cover.jpgを削除する// 書庫から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))
※$get(img)に画像ファイル名が入る
※この例はFollow Cursorモード用なのでNow Playingモードでは%g_active_index%を%g_playing_index%に変更 - 補足
- 正常に解凍された場合、outputが返る
※この関数は今後、仕様変更する可能性があります
※Matroskaで使用するには別途foo_input_matroska 0.9.2.0以降が必要
文字列の変換、比較
$calc_string
- 概要
- 文字列のサイズ(ピクセル)を求める
- 書式
- $calc_string(font-name,font-size,[font-option],str,mode)
font-name
フォント名
font-size
フォントサイズ
font-option
b 太字
i 斜体
u アンダーライン
s 打ち消し線
str
文字列
mode
width 幅を求める
height 高さを求める - 使用例
$calc_string('MS Pゴシック',10,ib,テスト,width)
$wstrsplit
- 概要
- 文字列を指定バイト数で区切る(2バイト文字対応)
- 書式
- $wstrsplit(str,byte,index,[option])
str
文字列
byte
区切るバイト数
index
取得するindex番号(0が先頭)
option
count 分割数を取得する - 使用例
$wstrsplit(あ1いうえおかきくけこ,4,0) → あ1 $wstrsplit(あ1いうえおかきくけこ,4,1) → いう $wstrsplit(あ1いうえおかきくけこ,4,0,count) → 6
$pstrsplit
- 概要
- 文字列を指定幅単位で区切る
- 書式
- $pstrsplit(font-name,font-size,[font-option],str,width,index,[option])
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)
ファイル操作
$files
- 概要
- ファイルを検索する
- 書式
- $files(cmd,path,[path...])
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\*)
$files_ex
- 概要
- 指定フォルダ配下のファイルを回帰的に検索する
- 書式
- $files(cmd,path,file,[file...])
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,*)
- 補足
- $files関数との違いは指定フォルダ配下を回帰的に検索する点
例えばパスに c:\temp を指定した場合、その配下にあるフォルダ内も全て検索する
$textfile
- 概要
- テキストファイルを読み込む
- 書式
- $textfile(filename,[charcode],[line from],[line to],[option])
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%で処理行の文字列が取得できる - 使用例
- ファイルと同じフォルダにあるinfo.txtを読み込む
$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)
$textwrite
- 概要
- テキストファイルに保存する
- 書式
- $textwrite(filename,str,[charcode],[option])
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)
メニュー操作
$setcontextmenu
- 概要
- コンテキストメニューにアイテムを追加する
- 書式
- $setcontextmenu(name,'tf')
name
アイテム名
'tf'
実行するTF(エスケープ文字対応) - 使用例
- コンテキストメニューに Functions/test を追加する
※実行するとConsoleに曲名が出力される$setcontextmenu(test,'$console(%title%)')
- 補足
- 追加できるアイテムは最大20個
$removecontextmenu
- 概要
- $setcontextmenuで追加したアイテムを削除する
- 書式
- $removecontextmenu(name)
name
アイテム名 - 使用例
$removecontextmenu(test)
$contextmenu_execute
- 概要
- コンテキストメニューコマンドを実行する
- 書式
- $contextmenu_execute(command,[target])
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
- 概要
- コンテキストメニューコマンド一覧をConsoleに出力する
- 書式
- $contextmenu_list()
- 使用例
$contextmenu_list()
$setmainmenu
- 概要
- メインメニューにアイテムを追加する
- 書式
- $setmainmenu(name,'tf')
name
アイテム名
'tf'
実行するTF(エスケープ文字対応) - 使用例
- メインメニューに Functions/test を追加する
※実行するとメインウインドウのサイズが100x100、透過率が200に設定される$setmainmenu(test,'$setwindowsize(100,100)$transwindow(200)')
- 補足
- 追加できるアイテムは最大20個
$removemainmenu
- 概要
- $setmainmenuで追加したアイテムを削除する
- 書式
- $removemainmenu(name)
name
アイテム名 - 使用例
- $removemainmenu(test)
$mainmenu_execute
- 概要
- メニューコマンドを実行する
- 書式
- $mainmenu_execute(command)
command
フルパスまたはコマンド名
Playback/Playの場合、Playでも指定可能
使用できるコマンドは$mainmenu_list()を実行してConsoleより確認して下さい
タブ名を入れるとタブがActiveになるかも(Tabbed panel modifiedで確認) - 使用例
- 再生中の曲に移動する
$mainmenu_execute('View/Columns playlist/Activate now playing') $mainmenu_execute(Activate now playing)
※トラックが切り替わるタイミングのTFに入れておくと、
リストが再生中の曲の箇所に移動するので便利かも
$mainmenu_list
- 概要
- メニューコマンド一覧をConsoleに出力する
- 書式
- $mainmenu_list()
- 使用例
- $mainmenu_list()
ポップアップメニュー操作
$popupmenu_create
- 概要
- 新しくポップアップメニューを作成する
- 書式
- $popupmenu_create(popupmenu_id)
popupmenu_id
ポップアップメニューID - 使用例
$popupmenu_create(test)
- 補足
- popupmenu_idが既に存在する場合は作成しない
$popupmenu_remove
- 概要
- ポップアップメニューを削除する
- 書式
- $popupmenu_remove(popupmenu_id)
popupmenu_id
ポップアップメニューID - 使用例
$popupmenu_remove(test)
$popupmenu_additem
- 概要
- ポップアップメニューに新しくアイテムを追加する
- 書式
- $popupmenu_additem(popupmenu_id,item_name,['tf'],[option])
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)')
- 補足
- 既存のアイテムの内容を変更する場合は、item_nameを同一にすると変更できる
- 参考リンク
- ボタンを押してオリジナルのポップアップメニューを表示させたい
ボタンを押して背景画像選択ポップアップメニューを表示させたい
$popupmenu_removeitem
- 概要
- ポップアップメニューからアイテムを削除する
- 書式
- $popupmenu_removeitem(popupmenu_id,item_name)
popupmenu_id
ポップアップメニューID
item_name
アイテム名 - 使用例
$popupmenu_removeitem(test,ランダム再生)
$popupmenu_view
- 概要
- ポップアップメニューを表示する
- 書式
- $popupmenu_view(popupmenu_id)
popupmenu_id
ポップアップメニューID - 使用例
$popupmenu_view(test)
- 参考リンク
- ボタンを押してオリジナルのポップアップメニューを表示させたい
ボタンを押して背景画像選択ポップアップメニューを表示させたい
$popupmenu_view_ex
- 概要
- プレイリストまたはアイテムリストのポップアップメニューを表示する
- 書式
- $popupmenu_view_ex(cmd,['tf'],[from index],[to index])
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))
- 参考リンク
- ボタンを押してプレイリストのポップアップメニューを表示させたい
ボタンを押してアイテムリストのポップアップメニューを表示させたい
$popupmenu_view_mainmenu
- 概要
- メインメニューをポップアップ表示する
- 書式
- $popupmenu_view_mainmenu()
- 使用例
- $popupmenu_view_mainmenu()
プレイリスト関連
%g_playlist_count%
- 概要
- プレイリスト件数
%g_active_playlist_index%
- 概要
- アクティブプレイリストindex
%g_active_playlist%
- 概要
- アクティブプレイリスト名
%g_playing_playlist_index%
- 概要
- 再生中のプレイリストindex
※再生中以外は%g_playlist_count%+1を返す
%g_playing_playlist%
- 概要
- 再生中のプレイリスト名
%g_active_index%
- 概要
- 選択中の曲のプレイリスト上での位置(0が先頭)
%g_playing_index%
- 概要
- 再生中の曲のプレイリスト上での位置(0が先頭)
$getplaylist
- 概要
- プレイリスト名を取得する
- 書式
- $getplaylist(index)
index
プレイリストのインデックス番号を指定する(0%g_playlist_count%-1)
省略した場合はアクティブプレイリスト名が返る - 使用例
$getplaylist(0)
$getitemcount
- 概要
- 指定したプレイリストの曲数を取得する
- 書式
- $getitemcount(playlist)
playlist
プレイリスト名
activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、
省略した場合はアクティブプレイリストが設定される - 使用例
$getitemcount(Default) $getitemcount(active) $getitemcount(playing)
$getmeta
- 概要
- 指定したアイテムのmeta情報を取得する
- 書式
- $getmeta(index,'tf',[playlist])
index
プレイリスト上での位置(0が先頭)
'tf'
取得する情報をTFで指定する(エスケープ文字対応)
playlist
プレイリスト名
activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、
省略した場合はアクティブプレイリストが設定される - 使用例
- アクティブプレイリストの0番目の曲のタイトルを取得する
$getmeta(0,'%title%')
再生中の曲情報を取得する$getmeta(%g_playing_index%,'%album-%title%',playing)
1つ前の曲のタイトルを取得する$getmeta($calc(%g_playing_index%-1),'%title%',playing)
$playlist_save
- 概要
- 指定プレイリストを保存する
- 書式
- $playlist_save(filename,'tf',[playlist])
filename
出力するファイル名
※先頭に/でfoobar2000のProfileパスと置き換わる
'tf'
出力する内容をTFで指定する(エスケープ文字対応)
playlist
プレイリスト名
activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、
省略した場合はアクティブプレイリストが設定される - 使用例
$platlist_save(/test.m3u8,'%path%') $playlist_save(c:\temp\playlist.m3u8,'%path%',active)
$playlist_sum
- 概要
- 指定プレイリストのアイテムごとにTitleFormatを適用して、その整数の和を求める
- 書式
- $playlist_sum('tf',['extr tf'],[playlist])
'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)')
$playlist_group_sum
- 概要
- 指定プレイリストをグループ化しアイテムごとにTitleFormatを適用して、その整数の和を求める
- 書式
- $playlist_group_sum('tf','group tf',index,[playlist])
'tf'
集計する情報をTFで指定する(エスケープ文字対応)
'group tf'
グループ化条件をTFで指定する(エスケープ文字対応)
index
グループインデックス(0が先頭)
playlist
プレイリスト名
activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、
省略した場合はアクティブプレイリストが設定される - 使用例
- アルバム名でグループ化し先頭グループの集計値を求める
$playlist_group_sum('%play_count%','%album%',0)
- 補足
- indexについて
プレイリスト上でアルバム名が下記のような状態で並んでいる場合aaaaa ← index=0 aaaaa aaaaa bbbbb ← index=1 bbbbb aaaaa ← index=2 ccccc ← index=3
$playlist_group
- 概要
- 指定プレイリストをグループ化しグループ名、アイテム数を取得する
- 書式
- $playlist_group(type,'group tf',index,[playlist])
type
count アイテム数
name グループ名
index プレイリスト上のindex
group グループ総数
'group tf'
グループ化するTF(エスケープ文字対応)
index
グループインデックス(0が先頭)
※typeがgroupの場合は無視される
playlist
プレイリスト名
activeを指定した場合はアクティブプレイリスト、playingを指定した場合は再生中のプレイリスト、
省略した場合はアクティブプレイリストが設定される - 使用例
- アルバム名でグループ化し先頭グループのアイテム数を取得する
$playlist_group(count,'%album%',0)
- 補足
- indexについて
プレイリスト上でアルバム名が下記のような状態で並んでいる場合aaaaa ← index=0 aaaaa aaaaa bbbbb ← index=1 bbbbb aaaaa ← index=2 ccccc ← index=3
$playlist_rename
- 概要
- プレイリストをリネームする
- 書式
- $playlist_rename(old name,new name)
old name
リネーム前のプレイリスト名
new nane
リネーム後のプレイリスト名 - 使用例
$playlist_rename(test,newplaylist)
$playlist_create
- 概要
- プレイリストを新規作成する
- 書式
- $playlist_create(name,[index])
name
プレイリスト名
index
プレイリストを作成する位置(0が先頭)
省略した場合は一番最後に追加される
※最後以外に追加した場合、Playlists Dropdownなどのコンポーネントで
表示がおかしくなるので省略推奨、再起動すれば直る - 使用例
$playlist_create(test)
$playlist_active
- 概要
- 指定プレイリストをアクティブにする
- 書式
- $playlist_active(name)
name
プレイリスト名 - 使用例
$playlist_active(test)
$playlist_exists
- 概要
- プレイリストの存在をチェックする
- 書式
- $playlist_exists(name)
使用例
name
プレイリスト名$playlist_exists(Default)
- 補足
- 存在する場合は1、存在しない場合は何も返さない
$playlist_addselecteditems
- 概要
- 選択中のアイテムを指定プレイリストに追加する
- 書式
- $playlist_addselecteditems(name,[option])
name
プレイリスト名
option
checkduplicate 重複追加しない - 使用例
$playlist_addselecteditems(Default) $playlist_addselecteditems(Default,checkduplicate)
その他
%g_stop_reason%
- 概要
- 再生の停止理由
0 : ユーザによる停止
1 : EOF
2 : 他の曲が開始したため
3 : foobar2000の終了
%g_track_command%
- 概要
- 再生開始時に実行されたコマンド
0 : デフォルト
1 : Playback/Play
2 : Playback/Next
3 : Playback/Previous
4 : Set Track
5 : Playback/Random
6 : Resume
%g_timer_count%
- 概要
- 前回、タイマーが発生してからの間隔(1/100sec)
%g_timer_timeout%
- 概要
- タイマー間隔(1/100sec)
$settimerで設定された値
0の場合はタイマーが解除状態
$settimer
- 概要
- タイマーを設定する
- 書式
- $settimer(timeout)
timeout
タイムアウト間隔を1/100秒単位で設定する(100=1秒)
0を設定するとタイマー解除 - 使用例
- 毎秒、タイマーを発生させる
$settimer(100)
タイマーを解除する$settimer()
$save_variable
- 概要
- グローバル変数をファイルに保存する
- 書式
- $save_variable(file,variable...)
file
保存するファイル名
※先頭に/でfoobar2000のProfileパスと置き換わる
variable...
変数名(%は不要)
enumhashを指定すると$hash関数で追加された変数を全て保存する - 使用例
- %var1%,%var2%,%test%の内容を保存する
$save_variable('c:\test.var',var1,var2,test)
$hash関数で追加された変数を全て保存する$save_variable(/test.var,enumhash)
- 補足
- "On quit"イベントで$save_variableを、"On init"イベントで$load_variableをコールすれば前回終了時の情報が引き継げます
$load_variable
- 概要
- グローバル変数をファイルから読み込む
- 書式
- $load_variable(file,[option])
option
register グローバル変数の登録にfoo_etcの$register関数を使用する(デフォルト)
hash グローバル変数の登録に$hash関数を使用する
file
読み込むファイル名
※先頭に/でfoobar2000のProfileパスと置き換わる - 使用例
$load_variable('c:\test.var',hash)
$setescape
- 概要
- foo_funcの関数中のTFでエスケープ文字の有効/無効を設定する
※エスケープ文字については、「エスケープ文字とは」を参照 - 書式
- $setescape(flag)
flag
0 無効
1 有効 - 使用例
- ' の中に ' が書けないのでエスケープ文字を使用
$setescape(1) $setmainmenu(test,'$console(\"1\")') $setescape(0)
- 補足
- デフォルトでは無効になっています
$hash
- 概要
- 連想配列を操作する(初期化/値設定/値取得)
※グローバル扱いになるので、一度登録すると別の場所のTFからでも操作できる
また、登録した連想配列には%key%でもアクセスできる - 書式
- $hash([key],[value])
key
キー
value
値 - 使用例
// 初期化(登録されているデータを全てクリアする) $hash() // 値設定 $hash(ringo,リンゴ) // 値取得 $hash(ringo) → リンゴ %ringo% → リンゴ // キー削除 $hash(ringo,)
- 補足
- foo_etcの$register関数との違い
例えば%ringo1%というグローバル変数の値を取得する場合、$register(ary,1) %ringo%ary%%
という表現方法はエラーになるが
連想配列の場合 $hash(ringo%ary%) で値を取得することができる
但し、foo_etcの$registerで登録された変数は$hash関数では取得できない
×不正な例
$register(ringo,リンゴ) $hash(ringo)
○正しい例
$hash(ringo,リンゴ) $hash(ringo)
$enumhash
- 概要
- 連想配列を列挙する
- 書式
- $enumhash([sep])
sep
セパレータ
省略時は, - 使用例
$enumhash() → aaa,bbb,ccc $enumhash(|) → aaa|bbb|ccc
$random
- 概要
- 擬似乱数を取得する
- 書式
- $random(max)
max
最大値 - 使用例
- 010の間の擬似乱数を取得する
$random(10)
エスケープ文字とは
$while関数など関数中にTFを書く場合があります
そのTF中で ' などの記号を使いたい場合にエスケープ文字を使い特殊な働きをキャンセルさせます
\d : $ \p : % \{ : ( \} : ) \\ : \ \" : '
対応している関数はそれぞれの関数リファレンスを参照して下さい
また、この機能は $setescape(1) をコールしている場合のみ有効です
よくある質問
関数を使用すると[UNKNOWN FUNCTION]と表示されエラーになる
関数を使っているコンポネとそのバージョンは何でしょうか?
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は対応しています
foo_func TF Tips
ボタンを押してオリジナルのポップアップメニューを表示させたい
狭い画面を有効活用したい時に便利です
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(ランダム再生)をボタンに割り当てたい
※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 を割り当てるだけ
アルバムアートをWindows Live Messengerのアイコンに設定する方法
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を使用していますが、表示部分は各コンポーネントにあわせて修正する必要があります