#contents

*これ何? [#k0ae8b20]

曲のリストを階層上に作る。[[Album List>Album List 解説]] の機能上位版のようなもの。
[[bazquux:http://www.bazquux.com/wiki/Foobar2000:Playlist_Tree]] からダウンロードできる。
#imgr(./snaps/Figure06.png);

*用語解説 [#a275c8ba]

-''クエリ (Query)''
--データベースから曲を抽出するための検索、およびその結果。デフォルトではこのアイコンで表される。
#imgr(./snaps/up613.png);
-''フォルダ (Folder)''
--入れ物の役割を果たす。PC のフォルダと同じようなもの。デフォルトではこのアイコンで表される。
#imgr(./snaps/up953.png);
-''リーフ (Leaf)''
--クエリの末端。ファイルそのものを表すことが多い。デフォルトではこのアイコンで表される。
#imgr(./snaps/up614.png);
-''ノード (Node)''
--これらクエリ、フォルダ、リーフを全てひっくるめてノードと言う。

*クエリ 解説 [#z380cb35]

#imgr(./snaps/up954.png);
-''Label'' (表示名)
--この欄では Title Formatting は基本的には無効なので、$,%,(,),[,] などの文字をそのまま表示させたい場合、 ' で囲む必要は無い。Title Formatting を使いたい場合は [[@format<> で囲む>#xd260225]]必要がある。
-''Source'' (曲情報の入手元)
--[[Playlist Tree 独自の記法>#u018bece]]で記入する。
--例
 @database
-''Criteria''
--[[Query syntax]] を使って表示する曲の条件を記入する。
--例1
 date EQUAL 2007
--例2
 %codec% IS MP3
-''Format''
--クエリの構造を書き込む。基本的には Title Formatting のルールが適用される。| で新しく階層を作ることが出来る。
--例
 %album artist%|%album%|%title%
-''Maximum''
--クエリに表示する曲(リーフ)の制限数。選択肢にある megs とはメガバイトのこと。
-''Population Order''
--何によってソートするかを TitleFormatting で書き込む。Reverse で逆順にソートする。
-''Sort by display name after populating''
--子ノードの名前順にソートする。これにチェックを入れている場合、Population Order を設定する必要は無い。
-''Automatically Refresh''
--新しい曲が再生されるたびに、自動的に更新する。

*関数一覧 [#y4f46b90]

-注意
--Playlist Tree 特有の関数(以下、PT関数)は''リーフでは使えない''。これ以外にも、PT関数は本来の Title formatting の関数とは扱いが違う点が多い([[PT関数の書き方>#xd260225]]を参照)。
--整数値で ''2^31-1(2147483647) を超える数は取得できない''。

**PT関数の書き方 [#xd260225]

PT関数は本来の Title formatting の関数と違い、特殊な書き方をしないと動作しないものが多い。
"$" または "%_" で始まるPT関数は、Label 欄では
 @format<(PT関数を含んだスクリプト)>
Criteria 欄では
 "@format<(PT関数を含んだスクリプト)>"
Format 欄では
 @quote<@format<(PT関数を含んだスクリプト)>>
の形で記入する必要がある((この他にも様々な書き方があるが、この書き方が一番誤動作が少ないと思われる。))。
なお、Label 欄でも(PT関数を含んだスクリプト)の部分は Title formatting のルールが適用されるようになる。
-例
--Label
 Files (Playing Artist) @format<$ifgreater(%_itemcount%,0,'['%_itemcount%' items]',)>
--Criteria
 artist IS "@format<$playing('%artist%')>"
--Format
 %artist%' ('@quote<@format<%_size_abb%>>')'|
 @icon<5>%album%|
 %title%

**Tags [#occ2c58d]

***%_name% [#pa454a02]

ノードの名前を返す。''自ノードに対して直接使うとフリーズする。''
-例
--Format
 @rgb<255,0,0>aaa|@quote<@format<$parent('%_name%')>>|%title%

***%_displayname% [#sb5a6337]

ノードの名前を返す。[[%_name%>#pa454a02]] と違い、ノード名 [[@icon<>>#ea5ff2a0]] や [[@rgb<>>#ybc44c4f]] などがあった場合は無視する。''自ノードに対して直接使うとフリーズする。''
-例
--Format
 @rgb<255,0,0>aaa|@quote<@format<$parent('%_displayname%')>>|%title%

***%_size_abbr% [#cc3aef71]

自ノード以下にあるリーフの合計ファイルサイズを返す。単位は"○○ GB" や "○○ MB" のように、自動的に調整される。
-例
--Label
 Total size (abbr) [@format<%_size_abbr%>]
--Format
 %artist%|
 $if2(%album%,Unknown Album) '('@quote<@format<%_size_abbr%>>')'|
 %title%
単位を統一したい、ファイルサイズを詳細に表示したいというような場合には [[%_size%>#r56ede07]] などを使う。

***%_size_abb% [#g8aa0f07]

自ノード以下にあるリーフの合計ファイルサイズを返す。単位は"○○ G" や "○○ M" のように、自動的に調整される。
-例
--Label
 Total size (abb) [@format<%_size_abb%>]
--Format
 %artist%|
 $if2(%album%,Unknown Album) '('@quote<@format<%_size_abb%>>')'|
 %title%
単位を統一したい、ファイルサイズを詳細に表示したいというような場合には [[%_size%>#r56ede07]] などを使う。

***%_size% [#r56ede07]

自ノード以下にあるリーフの合計ファイルサイズを、バイト数でそのまま返す。ただし、2^31-1(2147483647 ≒ 2GB) を超える場合は正常に取得できない。これより大きいファイルサイズを取得したい場合は [[%_size_abbr%>#cc3aef71]] か [[%_size_abb%>#g8aa0f07]] を使う必要がある。
-例 ("○.○○ GB" や "○○.○○ MB" のような形で表す)
--Label
 Total size (original) (@format<%_size%> bytes)
--Format
 %artist%|
 $if2(%album%,Unknown Album) '('@quote<@format<%_size%>>')'|
 %title%

***%_play_length% [#v0a4dfbb]

自ノード以下にあるリーフの総演奏時間を返す。単位は24時間以内ならば [hh:]mm:ss 、そうでなければ ">4 days" のように日付のみで返す。
-例
--Label
 play_length [@format<%_play_length%>]
--Format
 %artist%|
 %album% '('@quote<@format<%_play_length%>>')'|
 %title%
表示方法が好みに合わない場合は、[[$sum('%_length_seconds%')>#z7507938]] を使って、例えば
--Label
 Total @format<$ifgreater(%_itemcount%,0,'['$replace($cwb_wdhms($sum('%_length_seconds%')),d, days,wk, weeks and)']','('No Item')')>
のようにする(上の例では [[cwb_hooks>cwbowron's hooks 解説]] が必要)。
なお、$sum('%_length_seconds%') の値が 2^31-1(2147483647 ≒ 3310週間) を超える場合は正常に表示できない。

***%_itemcount% [#t6e2bf01]

自ノード以下にある全てのリーフの数を返す。
-例
--Label
 play_length [@format<%_itemcount%>]
--Format
 %artist%|
 %album% '('@quote<@format<%_itemcount%>>' items)'|
 %title%

***%_foldercount% [#af24ac15]

子ノードの数を返す。%_itemcount%と違って直接の子しかカウントしない。
-例
--Label
 Folder Count (@format<%_foldercount%> items)
--Format
 %artist% '('@quote<@format<%_foldercount%>>' items)'|
 %album% '('@quote<@format<%_foldercount%>>' items)'|
 %title%

***%_folderindex% [#f9960f1a]

親からみた自分のインデックス番号を返す。最初は 1 から。
-例
--Label
 Folder Index
--Format
 @quote<@format<$num(%_folderindex%,2)>> - %artist%|
 @quote<@format<$num(%_folderindex%,2)>> - %album%|
 %title%

***%_overallindex% [#e717df2a]

PlaylistTree全体におけるインデックス番号を返す。最初は 1 から(ルートフォルダは 0 )。
 @quote<@format<$num(%_overallindex%,2)>> - %artist%|
 @quote<@format<$num(%_overallindex%,2)>> - %album%|
 %title%

***%_nestlevel% [#l0aab32c]

階層の深さを返す。[[@fakelevel>#na62958b]] で隠れた階層もカウントされる。

***%_isquery% [#i314bcd5]

クエリなら1を返す。

***%_isleaf% [#s68b4503]

リーフなら1を返す。

***%_isfolder% [#j7cfb60f]

フォルダなら1を返す。

**Functions [#v7da83d6]

***@browse_as<> [#v0dd3060]

(現在使用できない模様。)

**%<tag>% [#h5a694d4]

[[Album List>Album List 解説]] のように、タグに複数の値が入っている場合は個別で判定してくれる。Playlist Tree では、%<tag1,tag2,tag3>% のように複数のタグを記述することもできる。
公式サイトではバグリストに入っている関数なので、使用する際には注意。

***@format<> [#eca732f3]

"$" または "%_" で始まるPT関数を使用する際にこれで囲む。

***@icon<index> [#ea5ff2a0]

ノードのアイコン画像を指定(変更)する。
-例
--Label
 icon test
--Format
 @icon<5>a|
 @icon<10>b|
 %title%

***$playing('tag') [#l8fd863c]

演奏中トラックの指定したタグ情報を取得する。使用する際には、
 $playing('%artist%')
のように  ' で囲む必要がある。
-例 (再生中のアーティストと同じ曲を抽出)
--Label
 Playing Artist's Songs (@format<$playing('%artist%')>)
--Source
 @database
--Criteria
 artist IS "@format<$playing('%artist%')>"
--Format
 %title%
--Automatically Refresh

***$avg('tag') [#n00b0052]

自ノード以下の全リーフから指定したタグ情報を取得しその平均値を小数点2桁まで返す。使用する際には、
 $avg('%_length_seconds%')
のように  ' で囲む必要がある。少数部分の数を表示したくない場合は、
 $num($avg('%_length_seconds%'),0)
のように $num() を使うと整数部分のみが表示される。
-例
--Label
 Average Length [@format<$avg('%_length_seconds%')> seconds]
--Format
 %artist% '['@quote<@format<$avg('%_length_seconds%')>>' seconds]'|
 %album% '['@quote<@format<$avg('%_length_seconds%')>>' seconds]'|
 %title%

***$sum('tag') [#z7507938]

自ノード以下の全リーフから指定したタグ情報を取得しその合計値を返す。使用する際には、
 $sum('%_length_seconds%')
のように  ' で囲む必要がある。
-例
--Label
 Total Length [@format<$sum('%_length_seconds%')> seconds]
--Format
 %artist% '['@quote<@format<$sum('%_length_seconds%')>>' seconds]'|
 %album% '['@quote<@format<$sum('%_length_seconds%')>>' seconds]'|
 %title%

***@quote<> [#j54985f1]

関数内の文字はトークンとして解釈されない。[[Label 欄で @format<> とともに使う>#xd260225]]機会が多いと思われる

***$parent('tag',n) [#z0666d90]

自分よりn階層上のノードからタグ情報を取得する。使う際には、
 $parent('%_foldercount%',2)
のように ' で囲む必要がある。n を省略すると、一個上のノードを参照する。
同一フィールド内で一度でも$parentを使用すると、それ以降は $parent節の外でも祖先ノードを参照するバグ?がある。

***@query<> [#w4459e05]

そのクエリの子ノードとしてクエリを作成する。フリーズしやすいので使用の際には注意。
 @query<Label;Source;Criteria;Format;PopOrder;DisplayOrder>
のように書く。
-詳細
--http://d.hatena.ne.jp/uninko/20060602#query

***$hidetext() [#w6c04820]

括弧でかまれた部分を表示しない。おそらくコメントアウト用途的なものだと思われる。

***@hidden 系 [#yffe0c34]

-@hidden
--自分より下のノード全体を隠す。自分自身は表示する(アイコンの色が薄くなって表示される)。
-@hidden2
--自より下のノード全体、および自分自身を隠す。
-@hidden3
--自分に直接ぶら下がる全リーフを隠すがサブフォルダは隠さない。また自分自身は表示される。これらは''直後に半角スペースを入れないと動作しない''。
-例1
--Format
 %album%|%artist% @hidden2 |%title%
-例2
--Format
 @quote<@format<$if($greater(%_foldercount%,8),@hidden ,)>>%album%|[$num(%tracknumber%,2)]%title%

***@fakelevel [#na62958b]

その階層だけを隠す。''直後に半角スペースを入れないと動作しない''。

***@rgb<r,g,b> [#ybc44c4f]

ノードの文字色を指定する。[[設定で "Custom selection colors" を ON にしておく必要がある>#m7eb2ae3]]。文字列の途中から色を変えることは出来ない。

***@limit<max> [#m393b52b]

子ノードの最大数を指定する。
-例
--Format
 %album%@limit<5> |[$num(%tracknumber%,2)]%title%

***@default [#ia2b2a6e]

ソースが[[@drop<>>#l91d894e]]の時、元のディレクトリ構造を再現する。

**Source [#u018bece]

[[Source>#z380cb35]] 欄で使える関数。

***@database [#o338f3f3]

 @database
[[Media Library>Media Library 解説]] のデータベースから入手する。

***@drop<> [#l91d894e]

 @drop<(パス名)>
特定のパス内の曲を検索し入手する。"(パス名)"の部分に検索したいパス名を書き込む。
-例
 @drop<C:\WINDOWS\Media>

***@node<> [#of5b15c4]

 @node<(ノード名)>
特定のノード内の曲を検索し入手する。"(ノード名)"の部分に検索したいノード名を書き込む。

***@and,@or,@not [#q220c151]

[[@node<>>#of5b15c4]] および [[@drop<>>#l91d894e]] に対して使える論理演算子。
-@and
--例
 @node<a> @and @node<b>
"a" と "b" 、両方のノードにあるものを対象にする。
-@or
--例
 @node<a> @or @node<b>
"a" と "b" の、少なくとも一方のノードにあるものを対象にする。
-@not
--例
 @node<a> @not @node<b>
"a" というノードにあり、"b" というノードにないものを対象にする。

***@playlists [#c75f9904]

 @playlists
すべてのプレイリストにある曲を対象にする。プレイリストごとにクエリを作る。

***@playlist<> [#fd887905]

 @playlist<(プレイリスト名)>
特定のプレイリスト内の曲を対象にする。"(プレイリスト名)"の部分にプレイリスト名を書き込む。

***@scheme [#i40166b3]

 @scheme
"Scheme" というプログラム言語を使ってクエリを作成できるようになる。

**その他 [#e66d8666]

***$treenode(arg) [#q26ac509]

選択しているノードの情報を返す。Playlist Tree 外で Title Formatting の関数として使うことができる。arg 部分に入れることができるのは以下の通り。
-name
-displayname
-size
-duration
-itemcount
-foldercount
-overallindex
-isleaf
-isfolder
-isquery
-例
 $treenode(name)

*設定画面 (Preferences) [#i9069c5b]

Preferences - Media Library > Playlist Tree Panel から選択可能。

**"Playlist Tree Panel" [#m7eb2ae3]

(画像)
-''Appearance'' (外観)
--''Font , Text Color , Line Color, Back Color''
---順に フォント、文字の色、線の色、背景色
--''Edge Style''
---枠のスタイル
--''no hscroll''
---スクロールバーを隠す
--''hide root''
---ルートフォルダを隠す
--''hide leaves
---リーフを隠す
--''hide +/-''
---クエリやフォルダの横にある +/- マークを隠す
-''File Format''
--編集希望
-''Folder Format''
--編集希望
-''Default Query Format''
--クエリを作成する際に、"Format" 欄にデフォルトで入力されるスクリプト
-''Library Playlist''
--ライブラリプレイリスト名の設定
--''Activate library playlist when sending''
--ライブラリプレイリストに曲を送ったとき、そのプレイリストをアクティブにする
--''Rename library playlist when sending''
---編集希望
-''Custom Colors''
--''Custom selection colors''
---ノードが選択されたときの背景や文字の色を変える(これを ON にすると、[[@rgb>#ybc44c4f]] が使えるようになる)
-''Use Default Queries if no file loaded''
--編集希望
-''Bitmaps''
--アイコン画像について(設定を有効にするには foobar2000 の再起動が必要)
--''Enable Bitmaps''
---アイコン画像を有効にする
--''Load Windows Bitmaps''
---ウィンドウズのアイコン画像を読み込む
--''Leaf,Folder,Query''
---それぞれのアイコンを変更
--''foobar2000 icon path''
---foobar2000 のアイコンがあるパス名。絶対パスで入力する
--''Additional Bitmaps''
---好きなアイコン画像を追加できる。絶対パスで入力する。改行は Ctrl + Enter で

**"Mouse & Keyboard" [#a2a8e523]

-''Selection Actions''
--ノードを選択したときに実行するアクション
-''Double Click Actions''
--ノードをダブルクリックしたときに実行するアクション
--''Refresh Queries''
---ダブルクリックしたときにノードを更新する
-''Middle Click Actions''
--ノードを中クリックしたときに実行するアクション
-''Right Click Actions''
--ノードを右クリックしたときに実行するアクション
--''with Shift''
---ノードを Shift キー + 右クリックしたときに実行するアクション
-''Enter''
--Enter キーを押したときに実行するアクション
-''Space''
--Space キーを押したときに実行するアクション
-''Process Keyboard Shortcuts''
--ノード選択時に [[General > Keyboard Shortcuts>Keyboard Shortcuts 解説]] のキーボードショートカットを実行できるようにする
-''File Limit''
--編集希望

**"Scheme" [#h9e27157]

編集希望

*Tips [#v25f0e58]

-クエリを編集し終わったときに、Shift を押しながら OK をクリックすると Refresh されない

*外部リンク [#md1600ba]

-[[uninkoの日記:http://d.hatena.ne.jp/uninko/20060602]]
--関数を詳細に、例を付けて解説している。説明は古いバージョンのものだが、関数の機能自体はあまり変わっていないので十分に使える。より詳しい解説を読みたい場合はおすすめ。
-[[Playlist_Tree_Tutorial:http://wiki.bowron.us/index.php?title=Playlist_Tree_Tutorial]]
--公式チュートリアル。英語。scheme などの解説がある。