コンポーネントの設定/foo_func

Last-modified: 2010-07-02 (金) 19:44:15
Counter: ?, today: ?, yesterday: ?

現在?人閲覧中

 

目次

 

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の解説は、ReferenceTitle 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

ボタンを押してオリジナルのポップアップメニューを表示させたい

狭い画面を有効活用したい時に便利です
01.png

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 を割り当てるだけ

ボタンを押してプレイリストのポップアップメニューを表示させたい

02.png

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)

ボタンを押してアイテムリストのポップアップメニューを表示させたい

03.png

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 を割り当てるだけ

ボタンを押して背景画像選択ポップアップメニューを表示させたい

04.png

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が必要

表示幅に応じてフォントサイズを変更したい

05.png

// 表示幅
$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を使用していますが、表示部分は各コンポーネントにあわせて修正する必要があります