情報の表示

タグから曲の情報を抽出する方法について解説します。抽出した情報は、プレイリストやステータスバーの表示に用いることができます。

クエリの確認方法

記述したクエリによる出力結果は、Preferencesの【Display → Default User Interface】の[Playback state display formatting]で確認するのが便利です。ここの[Window title]などの記述欄の直下にはPreviewがあり、クエリの結果を即時に確認できます。

またはウィンドウ右下には[Apply]ボタンがありますので、クエリを確定してこれをクリックすることでも結果を確認できます。

関数 (Function)

制御フロー (Control flow)

[cond]
[...] (conditional section) - Foobar2000:Title Formatting Reference

condがtrueならばそれが返され、さもなくば空文字が返されます。

たとえば[%artist%]と指定したとき、%artist%が存在するならば%artist%が返され、存在せず"?"を返すならば、何も出力されません。

$if(cond,then)
$if(cond,then) - Foobar2000:Title Formatting Reference

condがtrueならばthenが、さもなくばfalseが返されます。

$if(cond,then,else)

condがtrueならばthenが、さもなくばelseが返されます。

$if2(a,else)

aがtrueならばaが、さもなくばelseが返されます。elseに指定する条件がなければ、$if2(a,)のように最後はカンマだけを記述します。このカンマも省き$if2(a)とするのは誤りです。

$if3(a1,a2,...,aN,else)

a1からaNの間で、trueと評価される最初のその値が返されます。trueと評価されるものがなければ、elseが返されます。

比較

比較の構文は整数に対してのみ有効です。文字列を比較するならば、文字列の関数の結果を用いて判定します。

$ifequal(n1,n2,then,else)
$ifequal - Foobar2000:Title Formatting Reference - Hydrogenaudio Knowledgebase

n1n2と等しいならばthenが、さもなくばelseが返されます。

$ifgreater(n1,n2,then,else)

n1n2より大きければthenが、さもなくばelseが返されます。

算術関数 (Arithmetic functions)

加法

$add(2,3) → 5
$add(2,3,4) → 9

減法

$sub(5,3) → 2
$sub(5,3,3) → -1

乗法

$mul(2,3) → 6
$mul(2,3,2) → 12

除法

$div(6,2) → 3
$div(6,2,2) 1

小数点以下は切り捨てられます。

$div(5,4) → 1 (1.25)
$div(5,3) → 1 (1.67)
$div(-5,4) → -1 (-1.25)
$div(-5,3) → -1 (-1.67)
剰余
$mod(8,3) 2

比較

$if($greater(3,2),true,false) → true
$if($greater(2,3),true,false) → false

最小、最大

$min(3,5,2,8) 2
$max(3,5,2,8) 8

乱数

この関数は、ソートでのみ利用できます。

$rand()

文字列関数 (String functions)

文字列を処理する関数には、

$left(ABCDE,3) → ABC
$right(ABCDE,3) → CDE
$substr(ABCDE,2,4) → BCD

などがあります。このとき引数に指定する文字は、それが定数であってもクォーテーション ('や"") で囲んだりはしません。

文字列の比較

$strcmp(s1,s2)
$strcmp - Foobar2000:Title Formatting Reference - Hydrogenaudio Knowledgebase

s1s2が等しければtrueが返されます。この関数では大文字/小文字が区別されます。これを区別せず比較するには、代わりに$stricmp()を用います。

これを制御フローに組み込むには、次のように$ifと組み合わせます。

$if($strcmp(s1,s2),then,else)

このときs1s2が等しければthenが、さもなくばelseの結果が返されます。

改行

$crlf()で改行文字を出力することで、出力の途中で改行させられます。また$char()では任意のUnicode文字を出力できるため、$char(10)として「\n」を出力することでも改行させられます。$crlf() - Foobar2000:Title Formatting Reference - Hydrogenaudio Knowledgebase

論理関数

$and(x,y)
$or(x,y)
$not(x)
$xor(x,y)

フィールドの取得例

関数を使用することで、より柔軟にフィールドの情報を処理できます。

タイトル (title)

特定の文字列に続く文字列を、タイトルから抜き出す場合を考えます。たとえば「abc」以降を抜き出すとすると、その文字数は3であるから

$right(%title%,$sub($len(%title%),$add($strstr(%title%,abc),3)))

となります。特定の文字列を変数に保持して、より汎用的にすると

$puts(str,abc)$right(%title%,$sub($len(%title%),$add($strstr(%title%,$get(str)),$len($get(str)))))

のようになります。

表示色

Custom columnsで特別な構文を指定することでプレイリストやステータスバーの色を変更し、その視認性を上げられます。

Default UI

Default UIではテキストの色のみを変更できます。また適応されるのはプレイリストとステータスバーのみで、Playlist SearchやMedia Library Searchの結果表示では反映されません。How can I apply color changes to my titleformatting results? - Foobar2000:FAQ - Hydrogenaudio Knowledgebase

このテキストの色は、preferencesの【Display → Default User Interface → Colors and Fonts】の[Colors]の設定が基準となり、以下の特殊文字により変更できます。

  • 「>」 … Highlightの色に近づける
  • 「<」 … Backgroundの色に近づける

これらは3段階で調整でき、たとえばタイトルをHighlightの色で表示するには、

>>>%title%

とします。この設定は後続する文字にも影響を与えるため、特定の文字のみを着色したいならば、直後にBackgroundの色へと近づけます。

>>>%title%<<< %artist%

また、たとえば再生中の曲のタイトルの色を変更したいならば、制御フローで%isplaying%を指定して、

$if(%isplaying%,>>>)%title%

とします。

Columns UI

Columns UIを導入すれば、より柔軟に色を設定できます。これがインストールされていない環境で、

$rgb(255,0,128)

としても、"8000FF"のように出力されるだけです。

$hsl(h,s,l)

hslはそれぞれ、0~240の数値とします。

$rgb(r,g,b)

rgbはそれぞれ、0~240の数値とします。