foo_func 解説

foo_func

このコンポーネントは、いろいろな種類のTitleFormattingの関数を追加したりすることができます。

設定

Preferences>Tools>foo_func から設定できます。

Preferencesページを開いている間はRunボタンを押さない限り実行されません。 これはTFに異常な処理を記述してしまった場合などのセーフモード的な処理で仕様です。

関数・変数の解説

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

最大値

使用例
0~10の間の擬似乱数を取得する
$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

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

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

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

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

foo_func_popupmenu_ex_playlist.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)

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

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

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

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

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

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


Last-modified: 2016-02-11 (木) 20:10:30