#author("2019-03-08T00:43:05+09:00","","")
#contents

**はじめに [#y665a425]

バージョンによっては使用できない関数があります。
英語の原文はfoobar2000がインストールされているディレクトリの "titleformat_help.html" をご覧ください。通常インストールでは C:\Program Files\foobar2000\titleformat_help.html になります。 

**外部リンク [#v80f6fa1]

-[[Foobar2000:Titleformat Reference:http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:Titleformat_Reference]]
-[[title formatting 日本語リファレンス:http://tnetsixenon.xrea.jp/title_formatting.html]]

# 上記のリファレンスのほうが、最新のものでより詳しく解説されています。下の「Title Formatting ヘルプ日本語版」はかなり古いバージョンです。

**Title Formatting ヘルプ日本語版 [#wf1c6205]

***フィールド [#o68644e6]
|LEFT:|LEFT:|LEFT:|c
|%fieldname%|<fieldname>という名前のメタデータ(metadata)フィールドの値を挿入します。|%artist% など -> [[FAQ>TitleFormatting#lf725e06]]|
|%__fieldname%|という名前のテックデータ(tech data)フィールドの値を挿入します。|%__bitrate% など -> [[FAQ>TitleFormatting#lf725e06]]|
|%_path%|拡張子付きのファイル名をパス付きで挿入します。||
|%_path_raw%|拡張子付きのファイル名をパスとプロコトル付きで挿入します。||
|%_filename%|拡張子無しのファイル名を挿入します。 ||
|%_filename_ext%|拡張子付きのファイル名を挿入します。 ||
|%_directoryname%|ディレクトリの名前を挿入します。 ||
|%_subsong%|サブソングインデックスを挿入します。||
|%_foobar2000_version%|foobar2000のバージョンを挿入します。||
|%_length%|曲の長さを単位ごとに分けて挿入します。||
|%_length_seconds%|曲の長さを秒数で挿入します。||
|%_filesize%|ファイルサイズをバイト単位で挿入します。||

***スペシャルフィールド (プレイリスト) [#r095775b]
|LEFT:|LEFT:|LEFT:80|c
|%_isplaying%|ファイルが演奏中のときは'1'を返し、それ以外のときは何も返しません。||
|%_ispaused%|再生状態が「paused」のときは'1'を返し、それ以外のときは何も返しません。||
|%_playlist_number%|プレイリストのインデックスナンバーを返します。||
|%_playlist_total%|プレイリストに登録されている総曲数を返します。||
|%_playlist_name%|指定している曲が含まれているプレイリストの名前を返します。||

***スペシャルフィールド (ステータスバー、ウィンドウタイトル、コピーコマンド) [#a7d3660b]
|LEFT:|LEFT:|LEFT:80|c
|%_time_elapsed%|演奏経過時間を返します。||
|%_time_remaining%|曲の終了までの残り時間を返します。||
|%_time_total%|曲の総時間を返します。||
|%_time_elapsed_seconds%|演奏経過時間を秒数で返します。||
|%_time_remaining_seconds%|曲の終了までの残り時間を秒数で返します。||
|%_time_total_seconds%|曲の総時間を秒数で返します。||
|%_ispaused%|再生状態が「paused」のときは'1'を返し、それ以外のときは何も返しません。||

-%_time_total% / %_time_total_seconds% は playback core から値を得ます、対して %_length% / %_length_seconds% は database から値を得ます。場合によっては両者の値が異なることがあります。 
-すべての %...% フィールドは値が複数行だった場合自動的に切り詰められます、切り詰められるのが嫌な場合は$meta() 関数を参照してください。 
-すべての metadata (%blah%) および tech info (%__blah%) フィールドは file info box で確認することが出来ます。

***色指定 (プレイリスト、ステータスバーのみ) [#o5d91bcc]
|CENTER:|LEFT:|c
| &#3;XXXXXX&#3; |文字色を XXXXXX にします。XXXXXX の所には新しい色を16進法で指定します。フィールドが選択された場合、色が反転します。|
|&#3;XXXXXX&#124;YYYYYY&#3;|フィールドが選択されていない時の文字色を XXXXXX に、選択時の文字色を YYYYYY に指定します。|
|&#3;&#3;|色を既存値に戻します|

-TitleFormattingスクリプトでのカラー設定は16進数で行うが、HTMLなどで一般的な &color(red,RR);&color(green,GG);&color(blue,BB); ではなく、 Blue, Green, Red の順番、&color(blue,BB);&color(green,GG);&color(red,RR); の書式で指定する(つまり FF0000 が&color(blue,青色);になる)
-$char(3)XXXXXX$char(3) としても同様に機能する

***テキストの右揃え (プレイリスト、ステータスバーのみ) [#wc092623]
-テキスト(track lengthなど)を右揃えにするにはタブ(もしくは "$char(9)")を使用します。

***関数 [#gf48d777]
-[[関数 機能別>Title Formatting Help Function]]

|LEFT:|LEFT:|LEFT:200|c
|$abbr(x)|x の単語のそれぞれの頭文字をとった物を挿入します。|"$abbr(%album%)" はアルバム名 "Final Fantasy VI" を "FFVI" に変換します。|
|$abbr(x,y)|x が y 文字より長い場合 x の単語のそれぞれの頭文字をとった物を挿入します。それ以外の場合は x をそのまま挿入します。|$abbr(%album%,10)|
|$add(x,y...)|複数の整数の足し算 (x+y+...) を行います。引数はいくつでも取ることが出来ます。|$add(%TRACKNUMBER%,$mul(%DISC%,100))|
|$and(x,y...)|引数の論理積(すべてTRUEならTRUE)を求めます。$if()タイプの関数およびそのほかの理論演算子と共に使用します。||
|$ansi(x)|x をシステムコードべージに変換してから返します。コードページに存在しない文字はすべて除去もしくは置き換えられます。ファイル名を一括変換する際、ユニコードに対応していないソフトとの互換性を確実にするのに便利です。||
|$blend(a,b,c,d)|a and b の間の色のうち c/d の割合になっている色を1つ返します。|$blend($rgb(0,0,0),$rgb(255,255,255),%_time_elapsed%,%_time_total%)|
|$caps(x)|x の各単語の頭文字を大文字に変換し、頭文字以外は小文字に変換します。|"blah BLAH" -> "Blah Blah"|
|$caps2(x)|$caps とほぼ同じですが, 頭文字以外の大文字はそのままになります。|"blah BLAH" -> "Blah BLAH"|
|$channels()|%__channels% と同じです。||
|$char(x)|Unicode 番号 x の文字を挿入します。|"$char(3)" はプレイリストでカラーコードを制御する文字を返します。|
|$codec()|%__codec% と同じです。||
|$crlf()|改行コード (carrier return / linefeed) を挿入します。複数行の出力をするのに便利です。(例: system tray tooltip).|$crlf()|
|$cut(a,b)|a の最初の b 文字を返します。|$cut(%title%,5)|
|$directory(x), $directory(x,n)|ファイルパスからディレクトリ名を抜き出します。任意に n 段階ディレクトリを登ることが出来ます。|$directory(%_path%,2)|
|$div(x,y)|整数 x を整数 y で割ります。|$div(%TRACKNUMBER%,100)|
|$ext(x)|ファイルパス / ファイル名 から拡張子を抜き出します。|$ext(%_path%)|
|$filename(x)|フルパスからファイル名を抜き出します。|$filename(%_path%)|
|$fix_eol(x)|x 中に改行コード (CR/LF) が含まれているか検索し、見つかった場合は切りつめて " (...)" を追加します。||
|$fix_eol(x,y)|x 中に改行コード (CR/LF) が含まれているか検索し、見つかった場合は切りつめて y を追加します。||
|$greater(x,y)|二つの整数を比較。 x>y かどうかを試します。$if()タイプの関数およびそのほかの理論演算子と共に使用します。|$if($greater(%TRACKNUMBER%,100),$div(%TRACKNUMBER%,100),%DISC%)|
|$hex(x,y)|整数 x を10進法から16進法に変換し、y 桁まで桁取りします。|$hex(%_playlist_number%,3)|
|$if(a,b,c)|もし a が最低1個の有効なタグを含んでいる場合、 b を実行/表示します。それ以外の場合 c を実行/表示します。|"$if(%artist%,%artist%,unknown artist)" はアーティストの名前が存在する場合はその名前を表示し、存在しない場合は "unknown artist" を表示します。 注:"$if(a,a,)" は "[a]" と同等です。(下記を参照)|
|$if2(a,b)|$if(a,a,b) と同等です。|$if2(%title%,%_filename%)|
|$if3(a,b,c,..)|1番はじめのTRUEもしくは空白ではない値を返します。||
|$ifequal(a,b,c,d)|もし数字 a が数字 b と等しい場合、 c を実行/表示します。それ以外の場合 d を実行/表示します。||
|$ifgreater(a,b,c,d)|もし数字 a が数字 b より大きい場合、 c を実行/表示します。それ以外の場合 d を実行/表示します。||
|$iflonger(a,b,c,d)|もし文字列 a が b 文字より長い場合、 c を実行/表示します。それ以外の場合 d を実行/表示します。||
|$info(x)|x という名前の tech info フィールドを返します。改行コードを切りつめません。 (%__field% は切りつめます).|"$info(bitrate)" は "%__bitrate%" と同等です。|
|$insert(a,b,n)|文字列 b を文字列 a の n 文字目の後に挿入します。||
|$left(a,b)|a から最初の b 文字を抜き出します。|$left(%title%,5)|
|$len(x)|文字列 x の文字数を返します。||
|$len2(x)|double-width 文字(平仮名、片仮名、漢字なども含まれる)を考慮して、文字列 x の文字数を返します。(double-width 文字は2文字として数えられます).||
|$longer(x,y)|二つの文字列の比較、 x が y より長いかを試します。$if()タイプの関数およびそのほかの理論演算子と共に使用します。||
|$lower(x)|x を小文字に変換します|$lower(%title%)|
|$longest(a,b,c,....)|a,b,c... が返す値を比較し、もっとも長い値を表示します。 |$longest(%title%,%comment%)|
|$mod(x,y)|x を y で割った余りを求めます。|$mod($rand(),10)|
|$mul(x,y...)|整数のかけ算 (x*y*...) を行います。引数はいくつでも取ることが出来ます。|$add(%TRACKNUMBER%,$mul(%DISC%,100))|
|$muldiv(x,y,z)|整数 x を整数 y でかけ算し、整数 z で割った値を求めます。||
|$min(x,y...)|整数の比較を行い x, y... の最も小さい値を返します。引数はいくつでも取ることが出来ます。||
|$max(x,y...)|整数の比較を行い x, y... の最も大きい値を返します。引数はいくつでも取ることが出来ます。||
|$meta(x)|x という名前のメタデータフィールドの値を挿入します。|"$meta(artist)" は %artist% と複数行の値を切り詰めないことを除いて同等です。|
|$meta(x,y)|x という名前のメタデータフィールドの y 番目の値を挿入します。各行が1つの値をもった複数行の値に使います。|複数のアーティスト - $meta(artist,1), $meta(artist,2)|
|$meta_sep(x,y), $meta_sep(x,y,z)|x という名前のメタデータフィールドの複数の値を任意のセパレーターで分割してから挿入します。|"$meta_sep(artist,', ',' and ')" - それぞれ A, B, C という名前のアーティストが値に含まれていると、 "A, B and C" になります。|
|$meta_num(x)|メタデータフィールド x に存在する値の数を挿入します。||
|$meta_test(a,b,c)|()の中にメタフィールド名を入れると、そのフィールドに値が入力されていた場合、"1"を返します。|$if($meta_test(title,artist,album),A,B) とすると、タイトル・アーティスト・アルバム情報が全て入力されていた場合は "A" を表示、ひとつでも入力されていなければ、"B" を表示します。|
|$num(x,y)|x を10進法の数として返しゼロで y 桁まで桁取りします。 (トラックナンバーに便利です。)|$num(%tracknumber%,2)|
|$not(x)|引数の否定(TRUEでない場合TRUE)を求めます。$if()タイプの関数およびそのほかの理論演算子と共に使用します。||
|$or(x,y...)|引数の理論和(どれか1つでもTRUEならTRUE)を求めます。$if()タイプの関数およびそのほかの理論演算子と共に使用します。||
|$pad(x,y,z), $pad_right(x,y,z)|x を文字 z で y 文字まで桁取りします。||
|$padcut(x,y), $padcut_right(x,y)|x を y 文字目まで桁取りし、長い場合は y 文字目まで切り詰めます。||
|$progress(a,b,c,d,e), $progress2(a,b,c,d,e)|プログレスバーを制作します。a :インジケーターが表示される位置 b :プログレスバーの範囲 c :プログレスバーの長さを文字数で指定 d、e : プログレスバーを構成する文字。 $progress2() は違う見た目になります。|"$progress(%_time_elapsed_seconds%, %_time_total_seconds%, 20,'#','=')" は "====#===============" の様になり # が再生位置に合わせて移動します。|
|$rand()|0 から 4294967295 (2^32-1) までの無作為な数を生成します。(v0.9.5 からは使えません)|$mod($rand(),10)|
|$repeat(x,y)|x を y 回繰り返します。||
|$replace(a,b,c)|文字列 a の中のすべての文字列 b を文字列 c で置き換えます。||
|$right(a,b)|a の右から最初の b 文字を返します。|$right(%title%,5)|
|$roman(x)|数字 x を10進法表記からローマ数字に変換します。|$roman(%tracknumber%)|
|$rgb(a,b,c), $rgb(a,b,c,d,e,f)|10進法の色の値をカラーコードに変換します。(上記の[[色指定>#o5d91bcc]]を参照。)||
|$select(n,a,b,c,....)|引数 a,b,c... の n 番目のものを返します。|$select(3,'qwer','asdf','zxcv') なら 'zxcv' を返します。|
|$shortest(a,b,c,....)|引数 a,b,c... を比較し最も短いものを返します。|$shortest(%title%,%comment%)|
|$strchr(x,y)|文字列 x のうち最初に一致する文字 y の位置を探します。||
|$strrchr(x,y)|文字列 x のうち最後に一致する文字 y の位置を探します。||
|$strstr(x,y)|文字列 x のうち最初に一致する文字列 y の位置を探します。||
|$strcmp(x,y)|二つの文字列を比較します(等しい場合はTRUE)。大文字と小文字を区別します。$if()タイプの関数およびそのほかの理論演算子と共に使用します。||
|$stricmp(x,y)|二つの文字列を比較します(等しい場合はTRUE)。大文字と小文字を区別しません。$if()タイプの関数およびそのほかの理論演算子と共に使用します。||
|$sub(x,y)|整数 y を整数 x から引き算します。||
|$substr(a,b,c)|文字列 a の b 文字目から c 文字目までの文字列を返します。|$substr('blah',1,2) は 'bl' を返します。|
|$tracknumber(n)|トラックナンバーのタグの数値を n桁分桁取りして返します。|標準の $tracknumber() とすれば2桁で数値が返されますが、n/Nまたはnn/NN形式のトラックナンバーには適用されません。これらも2桁で表示したい場合は、$num(%tracknumber%,2)を使用します。|
|$trim(a)|a から先頭にあるもしくは連続する空白を除去します。|$trim(%comment%)|
|$tab(), $tab(n)|1つ ($tab()) または n 個 ($tab(n)) のタブ文字を追加します。プレイリストのカラムを分割するのに便利です。|$tab()|
|$transition(a,b,c)|文字列 a を色 b から c へのグラデーションで出力します。|$transition(%TITLE%,$rgb(0,0,0),$rgb(255,255,255))|
|$upper(x)|x を大文字に変換します。|$upper(%title%)|
|$xor(x,y)|引数の排他的論理和(xまたはyのどちらかがTRUEでかつ両方ともTRUEでない場合にTRUE)を求めます。$if()タイプの関数およびそのほかの論理演算子と共に使用します。||

***変数代入 [#f2472582]
|LEFT:|LEFT:|LEFT:200|c
|$put(name,text)|変数 <name> に <text> を代入し、また <text> を返します。|"$put(x,blah)" は変数 x に 'blah' を代入し 'blah' を返します。|
|$puts(name,text)|$put(name,text) と同等ですが値は返しません。||
|$get(name)|変数 <name> の値を返します。|"$puts(x,blah)$get(x)$get(x)" は 'blahblah' となります。|

-変数によりテキスト加工の途中経過を保存することが可能になり書式のサイズを削減することが出来ます。 
-変数を次の曲へ引き継がせることは出来ません。

***その他 [#ee59272c]
|LEFT:|LEFT:|LEFT:200|c
|[ .... ]|括弧内で参照されているフィールドが最低1つ有効だった場合、括弧内を表示します。|"%artist% - [%album% / ]%title%" はアルバムフィールドが存在しないとき [] 内は表示されません。注:複数の $function を括弧内で使用すると予想できない結果をもたらすことになるので避けてください。(変わりに $if() を使用してください。)|
|' (single quotation mark: 引用符)|'で括ることにより予約済みの文字(%,$,[,])をそのまま出力します。|'自体を表示したい場合は''と2つ重ねます。|
|//|これ以降はコメントとなります。行頭にのみおくことができ、行の最後までがコメントとなります。コメント内では関数が実行されません。||
|改行コード・タブコード|読み易い様に無視されます。|あえて表示させたい場合は、$char(10)と$char(9)または$tab()で代用してください。|

**簡単な説明 [#b411c4db]

***日本語使用時の横幅のそろえ方 [#xfa7f167]

初期設定だとfoobar2000はdouble-width(横幅がアルファベットの2倍ある文字)を1文字とカウントします。そのため、ひらがなや漢字とアルファベットが混ざっている文字列に$padcut()などの文字数を基準に処理を行う関数を使うと綺麗にそろいません。
これは foobar2000 -> Preference - > Display -> Double-width characters in title formatting を Count double-width characters and ambiguous characters as two regular characters に設定することで回避できます。
フォントは文字によって横幅が変わるプロポーショナルフォントではなく等倍フォント(「MS ゴシック」など)を使用してください。
$len()はこの設定にかかわらずdouble-width文字を1文字として扱います。2文字として扱いたい場合は$len2()を使用してください。

***「~のときは'1'を返し、それ以外のときは何も返しません。」 [#gb28a06a]

基本的にどのプログラム言語でも、値が有効であるとき、存在するときなど「真(TRUE)」と呼ばれる場合は "1"、値が無効であるとき、存在しないときなど「偽(FALSE)」と呼ばれる場合は "0" を返す事になっています。
簡単に言えば、その値がONになっていれば "1" 、OFFのときは "0" ということです。
if()系列の関数はこの「真」と「偽」を区別するために存在し、例えば $if(%_isplaying%,playing,not_playing) と書けば曲が再生中なら playing が、再生中で無ければ not_playing が表示されます。

IP:125.202.209.124 TIME:"2019-03-08 (金) 00:43:05" REFERER:"https://foobar2000.xrea.jp/index.php?cmd=edit&amp;page=Title%20Formatting%20Help" USER_AGENT:"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.9) Gecko/20100101 Goanna/4.1 Firefox/60.9 PaleMoon/28.4.0"