foobar2000 の titleformat のメモ

音楽再生ソフトの foobar2000 には titleformat という機能(スクリプト?)があって、曲名やトラック番号の表示を調整することができるわけだが、それについてのメモ。例として、設定(Preferences)の Display -> Default User Interface -> Playlist View において次のような項目を作る。

これをグループ分けに適用すると、次の画像の青文字の部分が得られる。適用するには、 Display -> Default User Interface で Enable layout editing mode に一旦チェックを入れてから本体の適当なところで右クリックして Group から追加した項目を選択すればよい。

少し説明すると、 %album artist% でファイルの album artist の値が得られる。これが四角い括弧で囲まれているので、もし値がなければこの部分は無視されて、値がある場合はその値に" - "を付け加えた文字列が表示される。それにさらにアルバム名(%album%)を付け加えたのが青文字の行となる。画像を見るとわかるように、これだと album artist が違うがアルバムは同じ場合も別のグループとして分けられるのが問題ではある。

コマンドの詳細については次が参考になった。
Title Formatting - foobar2000 Wiki*
また、例を見てみたい場合は次にいくつか挙げられている。
Foobar2000:Titleformat Examples - Hydrogenaudio Knowledgebase

実際のところ、元の設定で大体満足していたのだが、CD2枚組とかではないのにいちいちトラック番号にディスク番号も表示されるのが気になっていたので、これの改良を試みた。以下が自分なりに考えた結果である。

$puts(discnum,
 $ifgreater(%totaldiscs%,1,%disc number%,)
)
$puts(tracknum,
 $if(
  $and(%totaltracks%,$not(discnum)),
  $ifgreater(%totaltracks%,9,%track%,$meta(tracknumber)),
  %track%
 )
)
$if(
 %track%,
 $ifequal(%totaltracks%,1,,[$get(discnum)-]$get(tracknum)),

)

空白と改行を除いたもの。

$puts(discnum,$ifgreater(%totaldiscs%,1,%disc number%,))$puts(tracknum,$if($and(%totaltracks%,$not(discnum)),$ifgreater(%totaltracks%,9,%track%,$meta(tracknumber)),%track%))$if(%track%,$ifequal(%totaltracks%,1,,[$get(discnum)-]$get(tracknum)),)

何が起きているかというと、まず %totaldiscs% が値をもっていて1より大きい場合は(新たな)変数 discnum にその値が入る。そして、変数 tracknum にはトラック番号を入れるわけだが、トラックの総数が9以下の場合は1桁、10以上の場合は2桁(01,02,...)で表すようにしている。そしてそれを (discnum)-(tracknum) の形で表示する。但しそもそも %track% が値をもたない場合やトラックの総数が1の場合は空欄にすることにした。なお、実際に入力するときは空白や改行は全て削除してから貼り付ける必要があるようだ。また、例えば totaldiscs はプロパティでは Total Discs と表示されているが、クリックしてみると Fieldname: TOTALDISCS と書いてあるので、空白を入れない方でないとうまくいかない。

この titleformat は極めるとかなり高度なこともできるらしい。