公式チュートリアルを基にしたPlaylistTreeの解説(書きかけ)です。
・知識も責任感も検証も不十分なので意図せぬ嘘を含む記述があるかもしれません。
・サンプルとしてあげた使用例は全て動作を確認していますが使用は自己責任で。
・かえって理解の妨げになるものや実用性に乏しいサンプルが多いです(現在いろいろ吟味中)。
・かなりヤケクソ気味のHTML/cssはいつか直します。
・サンプルのSS画像があった方が分かりやすいと思うのですが面倒なので保留。
・「ここ間違ってる」とか「ここ分かり難い」など御意見・御指摘は大歓迎&大募集。
・「こんなの作って」とか「これどうやるの?」など御要望・御質問はuninkoの知識で対応可能なものなら

Tags
%_name%ノードの表示内容(アイコンは返さない)
%_displayname%ノードの表示内容
%_size_abbr%自ノード以下にあるリーフの合計ファイルサイズ
%_size_abb%自ノード以下にあるリーフの合計ファイルサイズ
%_size%自ノード以下にあるリーフの合計ファイルサイズ
%_play_length%自ノード以下にあるリーフの総演奏時間
%_itemcount%自ノード以下にある全てのリーフの数
%_foldercount%子ノードの数
%_folderindex%親からみた自分のインデックス番号
%_overallindex%PlaylistTree全体におけるインデックス番号
%_nestlevel%階層の深さ
%_isquery%クエリなら1を返す
%_isleaf%リーフなら1を返す
%_isfolder%静的フォルダなら1を返す
Functions
@browse_as<>まだ未実装?
%<tag>%アルバムリストと同様
@format<>TitleFormatingを使用
@icon<index>ノードのアイコン画像を指定(変更)する
$playing(tag)演奏中トラックのタグ情報を取得する
$avg(tag)自ノード以下の全リーフからタグ情報を取得しその平均値を返す
$sum(tag)自ノード以下の全リーフからタグ情報を取得しその合計値を返す
@quote<>関数内の文字はトークンとして解釈されない
$parent(tag,n)祖先ノード(自分より上層のノード)からタグ情報を取得する
@query<>そのクエリの子ノードとしてクエリを作成する
$hidetext()括弧でかまれた部分(引数)を表示しない
@hidden自分より下のノード全体を隠すが自分自身は表示する(アイコンの色が薄くなって表示されます)
@hidden2自より下のノード全体、および自分自信を隠す
@hidden3自分に直接ぶら下がる全リーフを隠すがサブフォルダは隠さない。また自分自身は表示される
@fakelevel階層を隠す
@rgb<r,g,b>ノードの文字色を指定する
@limit<max>子ノードの最大数を指定する
@defaultソースが@dropの時、元のディレクトリ構造を再現する
Sources
@databaseデータベースに登録されている全ての曲(ファイル)を対象にする
@drop<path>特定のパスに含まれる曲のみを対象にする
@node<name>特定のノードを対象にする
@playlists@playlist<>で全てのプレイリストのクエリを作る
@playlist<name>特定のプレイリストを対象にする
@and両方に含まれる曲を対象にする
@orどちらかに含まれる曲を対象にする
@not片方にだけ含まれる曲を対象にする
node PT内のノードにはquery/folder/leafの3つの属性がある。
その3つ全てひっくるめてノード。
query データベースから曲を抽出するための検索。実際はその内容や結果も含めて意味することが多い。
抽出するための問い合わせと考えても良いし、その結果(構造が動的に変化するフォルダ)と考えても良い。
dynamic folder 上記queryと同義。旧verの呼び名。検索する行為=query、検索した結果=dynamic folder、って感じかな。
チュートリアルの前半ではこの用語が使われるのに後半のリファレンスではqueryという単語が使われてるので脳内変換。
static folder いわゆるフォルダ=ただの入れ物。アイコンやラベル名は変えられるが子孫の名前や構造を指定できない。
※ただし$parent('%_isfolder%')のように子ノード側から参照する場合はこの限りではない。
subfolder 本来「クエリによって生成されたリーフ以外のノード」を指すが、「リーフも含めた子ノード全般」の意で使われることもある。
個人的にはチュートリアル内で最も曖昧な表現のひとつだと思う。
subquery (ルートフォルダ以外に)ネストされたクエリ。具体的には@playlistsや$queryなどで生成されるクエリなど。
チュートリアル内では使われてないのでどうでも良いか。
leaf 子を持たないノード。より正確には%_isleaf%が1を返すノード。
@hiddenなどでリーフに見える場合や、一曲もヒットしなかったクエリなどは(本当は)リーフと呼ばない。
file 本来は読んで字の如くファイルを指すが、上記leafと同義で使われる場合も多い。
ちなみに単曲ファイルでも「ファイル数≠リーフ数」になるケースはある。
%_name%ノードの表示内容を返す(アイコンは返さない)
当然ですが自ノードに対して使うと再帰的に参照して固まるようです。
一番よく使うのは親の名前を参照する時だと思いますが、同一フィールド内で親を参照すると以降は親の表示内容しか返しません。
例えば、$parent('%_name%')で親名を取得した後に%_name%を(関数でネストせず)使っても自分の名前を返しません。
他のタグでも同じなので$parent側の仕様かもしれませんが、どちらにしろ使用する場合には少し工夫が必要です。
使用例 親ノード名にSwitcherが含まれる場合、自分のアイコンを変更し総演奏時間を表示する
Folder Format:
%_name%$ifgreater($strstr($parent('%_name%'),Switcher),0, $char(91)%_play_length%$char(93)@icon<45>,)
例文では最初に%_name%を書いてますが、これを$ifgreater節の中に入れると先に$parent('%_name%')が評価されるので親名が返ってしまいます。
この例では特に問題にならないのですが親ノード名と自ノード名が両方必要な場合の回避方法が分かりません。
仕方無いので$parent節が評価される前に$putsで保存してますが気持ち悪いです。
%_displayname%ノードの表示内容(アイコンを含む)
タグ・関数の説明
使用例 サンプルの内容
Format
hoge
サンプルの解説・備考
%_size_abbr%自ノード以下にあるリーフの合計ファイルサイズを返す(表示単位は自動で最適化される)
aplなどで間接的に参照している場合、曲ファイルではなくaplのファイルサイズで計算されてしまいます。
%__referenced_file%は使えるのですがサイズは求められないのかな。
使用例 ラベル名の後にクエリ全体の合計サイズを、またアルバムごとにアルバム全体の合計サイズを表示
Label
New Query @format<%_size_abb%>
Format
%genre%|%artist%|%album% @quote<@format<%_size_abb%>>|%title%
単位は最適化された上でMB/GBなどが付加されます。
単位を統一したい場合や1MB以下のファイルサイズを正確に表示したい場合は後述%_size%を使いましょう。
%_size_abb%自ノード以下にあるリーフの合計ファイルサイズ
タグ・関数の説明
使用例 サンプルの内容
Format
hoge
サンプルの解説・備考
%_size%自ノード以下にあるリーフの合計ファイルサイズ
タグ・関数の説明
使用例 サンプルの内容
Format
hoge
サンプルの解説・備考
%_play_length%自ノード以下にあるリーフの総演奏時間を返す
単位は最適化されH:MM:SS形式で表示されます。
1時間未満の場合はHourが省略されMM:SSになります
。 1分未満の場合は00:SSのように表示されます。
72時間を超える場合は>4 daysのように大なり記号付きで表示されます。
表示形式が気に入らない場合や総時間を取得後に加工したい場合などは$sumを使いましょう。
使用例 ラベル名の後にクエリ全体の演奏時間を表示(大なり記号を削除)
Label
New Query @format<$replace(%_play_length%,$char(62),)>
なんとな大なり記号が邪魔に見えるので削除しました。
使用例 アルバムごとに演奏時間を表示
Format
%genre%|%artist%|%album% @quote<@format<
$ifequal($mul($left(%_play_length%,1),$len(%_play_length%)),7,
$add($substr(%_play_length%%,3,4),60)$right(%_play_length%,3),%_play_length%)>>
%title%
個人的にアルバムの演奏時間は1:08:22と表示されるより68:22の方が感覚的に分かりやすいです。
あえて%_play_length%を使った例です。
かなりテキトーです。これもアルバム限定なら何とか....
Format
%genre%|%artist%|%album%
@quote<@format<$div($sum('%length_seconds%'),60):$num($mod($sum('%length_seconds%'),60),2)>>
%title%
これでも同じですが$sumで合計を求めています。(%_play_length%とは関係無いサンプルです)
%_itemcount%自ノード以下にある全てのリーフの数を返す
サブフォルダ以下も含めて全ての子孫リーフの数を返します。
結構よく使うタグだと思います。
全体における割合を算出して色やアイコンを変えるとか、リーフ数に応じて@hidden3で省略する時とか。
まぁ実際は単純に曲数を表示した方が分かりやすいし実用的だったりしますが。
ちなみにチュートリアルではファイル数という表現になってます。
ファイル数でも使用環境によっては間違いじゃないけど誤解を招く表現じゃないかな。
使用例 ラベル名の後に合計曲数を表示する。ただし1曲もヒットしなかった場合は'No Track'と表示する。
Label
@format<$ifgreater(%_itemcount%,0,Query %_itemcount%,No Track)>
この例文とは関係無いですがカウント系のタグはverごとに振る舞いが違う場合があります。
0.9系に移行した直後と現在の2.2beta2では同じ名前のタグでも返す内容が違うので注意されたし。
どちらが意図した挙動でどちらがバグなのかは分かりません。
%_foldercount%子ノードの数を返す
%_itemcount%と違って直接の子しかカウントしません。
また、チュートリアルにはサブフォルダの数を返すと書いてありますが実際はリーフやクエリでもカウントされます。
itemcountの項でも書きましたが現verと旧verでは振る舞いが異なります(2.0系になってからも違いがあります)。
チュートリアルでは2.0系初期verの挙動をそのまま載せてるっぽいです。
使用例 ジャンル名の後にアーティスト数、アーティスト名の後にアルバム数を表示
Format
%genre% @quote<@format<%_foldercount% artists>>|%artist% @quote<@format<%_foldercount% albums>>|%album%|%title%
使用例 アルバムの後に『そのアルバムの曲数/アーティストの総曲数』を表示
Format
%artist% @quote<@format<%_itemcount%>>|%album% @quote<@format<%_foldercount%/$parent('%_itemcount%')>>|%title%
両方とも実用性は無いですがサンプルなので御容赦。
%_foldercount%子ノードの数を返す
%_itemcount%と違って直接の子しかカウントしません。
また、チュートリアルにはサブフォルダの数を返すと書いてありますが実際はリーフやクエリでもカウントされます。
itemcountの項でも書きましたが現verと旧verでは振る舞いが異なります(2.0系になってからも違いがあります)。
チュートリアルでは2.0系初期verの挙動をそのまま載せてるっぽいです。
使用例 ジャンル名の後にアーティスト数、アーティスト名の後にアルバム数を表示
Format
%genre% @quote<@format<%_foldercount% artists>>|%artist% @quote<@format<%_foldercount% albums>>|%album%|%title%
サブフォルダの数(例文ではアーティストやアルバムの数)を表示します。
使用例 アルバムの後に『そのアルバムの曲数/アーティストの総曲数』を表示
Format
%artist% @quote<@format<%_itemcount%>>|%album% @quote<@format<%_foldercount%/$parent('%_itemcount%')>>|%title%
リーフの数(例文では曲数)を表示します。
あえて使い分けましたが子ノードがリーフのみであればitemcountと同じ値を返します。
%_folderindex%親からみた自分のインデックス番号を返す(最初は1から)
名前とは裏腹、自ノードがクエリでも使えます。
ただし、リーフには使えません。
これに限らずPlaylistTree独自のタグおよび関数はリーフに対して使えないみたいです。
※関数を使用すること自体が不可能なので$parentで親の情報を取得するというのも無理です。
使用例 PlaybackQueueに追加された順番に1,2,3,4.....と番号を付けて表示
Label
@format<$ifgreater(%_itemcount%,0,
QUEUE $char(91)%_itemcount%$char(93) - %_play_length%,QUEUE $char(91)no track$char(93))>
Source
@queue
Format
@quote<@format<$ifequal(%_folderindex%,1,next ,$num(%_folderindex%,2) - )>>%title%@hidden3 |hoge
サンプル用に簡素化しましたが実際にこんなかんじで使ってます。
リーフにならないように見えない子ノードを作って隠してます。
@quoteや@formatを外してみたりシングルクォーテーションで括ったりしましたがリーフだと駄目っぽい。
バグだとしたらかなり致命的なわけですが誰も文句言わないのでuninkoが知らないだけかも。
%_foldercount%とかなら分かりますが、このタグはリーフに使いたいケースも多いので困ってます。
いまだに回避方法が分からず@hiddenで強引に非リーフ化してます。
ちなみに後述しますが@hidden系は必ず直後にスペースを入れないと動きません。
(このクエリ作成中に本スレでいろいろお世話になりました。感謝です)
%_overallindex%PlaylistTree全体におけるインデックス番号を返す
これまた間違いではありませんが補足します。
1. まずリーフはカウントされません(仰々しい名前の割に妙に値が小さいのはこれのせい)
2. ルートノードは0です。
3. @hidden系で隠されたノードもカウントされます。
使用例 思いつかん。
使ったことがないです。直接それ自体を表示しても全く意味がないしなぁ。
恐らくはクエリの構造を把握するためのタグだとは思いますがサンプルは保留。
%_nestlevel%階層の深さを返す
ルートノードを0として計算され、ネストされるごとに1ずつ増えます。
@fakelevelで隠れた階層もカウントされます。
使用例 親クエリ名に"Libary"を含むノードはプレイリスト「LibraryView」に送り、それ以外は「PlaylistTree」に送る
Library Playlist
$ifgreater($strstr($parent('%_name%',$sub(%_nestlevel%,1)),Library),0,LibraryView,PlaylistTree)
クエリごとに転送先プレイリストを変えるサンプルです。
例によってuninkoが知らないだけかもしれませんが、転送先を変えるにはデフォルトの設定で対応するしかないみたいです。
ここの設定とMouse&Keyboardを弄ることで非常に柔軟な使い方ができます。
Browserがイマイチ使いづらいって人はこのあたりをカスタマイズしてみると良いかも。
%_isquery%クエリなら1を返す。クエリでない場合は未定義。
注意点はクエリでない場合です。
TitleFormatingのように0を返すわけではありません。
使用例 クエリの場合はUnicode文字のニコニコマークみたいなのを表示
Folder Format:
$if(%_isquery%,$char(9787)) %_name%
これもあまり良いサンプルじゃないかも。差し替え予定。
uninkoのようにアイコン画像をOFFにして絵文字で代用してる人はおらんかね。
%_isleaf%リーフなら1を返す
らしいです。
が、上のほうで触れたようにどうやったらリーフに対してPTタグや関数を使用できるのか分かりません。
どういうケースで1を返すのか確認できません。
%_isfolder%静的フォルダなら1を返す
馬鹿なuninkoを誤解させるには十分すぎる表現です。
New Folderでユーザが手動で作成した静的フォルダはもちろん1を返します。
さらに、クエリ(動的フォルダ)によって生成される各ノードもリーフ以外は静的フォルダに該当します。
例によってリーフは確認してませんが、%_isleaf%というタグがあるので含まれないのでしょう。
つまり、クエリとリーフ以外のノードなら1を返します。
ちなみにルートノードも静的フォルダに分類されます。
使用例 ルート直下の静的フォルダならunicode文字の四角いマークを表示
Folder Format:
$ifequal($mul(%_nestlevel%,%_isfolder%),1,$char(10066),) %_name%
これも良い例じゃないですね。
関係無いですがUnicodeの絵文字をよく使います。
良く使うUnicode文字&番号の一覧表まで作っていろいろ表示させたり無駄なことやってます。
素直にアイコン使った方が楽だしフォントの影響も受けず見栄えも良いんですが....
@browse_as<>定義
タグ・関数の説明
使用例 サンプルの内容
Format
hoge
サンプルの解説・備考
%%基本的にアルバムリストと同様に動作するらしい
TechInfoタグには適用できない点も同じ。
ただし、%%のように複数のタグを記述すると同じ階層にそれぞれのノードが生成される。
あまり使ったことがありません。空のメタデータを回避するのが本来の用途?
PTの拡張機能は何かに使えそうですが既知のバグリストに載ってるので様子見してます。
@format<処理内容>TitleFormatingを使用
タグ・関数の説明
使用例 サンプルの内容
Format
hoge
サンプルの解説・備考
@icon<アイコン番号>ノードのアイコン画像を指定(変更)する
アイコン番号はクエリ作成時にSetで指定する時と同じ(ユーザが追加したアイコンも使用可)です。
ラベルのアイコン画像はクエリ作成時に設定できるためこの関数の使いどころは以下の2つ。
・特定のノードだけデフォルト設定と違うアイコン画像を使いたい場合
・動的にアイコンを変化させたい場合
注意点は、Labelフィールドで使用しても一度しか反映されないということ。
コードによっては全く反映されないこともあります。
動的にラベル用アイコンを変えたい場合はデフォルトの設定で行うしかないようです。
もう一つは、書き込み専用であること。
少なくとも2.2beta2の時点ではアイコン番号を取得する関数やタグはありません。
使用例 階層ごとにアイコン画像を変える
Format
@icon<2>%genre%|@icon<29>%artist%|@icon<11>%album%|%title%
上で述べた用途の一つ目。
Formatフィールドで使う場合でも基本的に@quote/@formatで括る必要はありません。
使用例 コーデックごとにアイコン画像を変える
Format
@quote<@format<$char(91) $div($mul(%_itemcount%,100),$parent('%_itemcount%')) $char(37) $char(93)>>
@icon<$select($strstr('MPVoTrFLMo',$left(%codec%,2)),59,,63,,58,,48,,44)>
 %codec%|%artist%|%album%|%track% %title%
先に書いておきますが汎用性はありません。
mp3/ogg/flac/apeの4つに分類してコーデック用のアイコンを指定します。
$playing('タグ名')演奏中トラックのタグ情報を取得する
タグ名をシングルクォーテーションで括ります。
AutoRefreshをオンにしておけば演奏が始まるタイミングで再抽出されます。
ただし演奏を停止しても空っぽになるわけではなく、次の演奏が開始されるまで前回の抽出結果を表示します。
これは演奏開始時に一度だけ更新するAutoRefreshの仕様によるものなので、%_isplaying%を使用しても回避できません。
使用例 演奏中のアーティストの曲をアルバムごと分けて表示
Label
Same Artist @format<$char(91)$playing('%artist%')$char(93)>
Criteria
artist IS @format<$playing('%artist%')>
Format
%album%|%track% %title%
よくある使い方。同じ年代だとか同じ曲名などの条件で抽出することもできます。
あまりに複雑だったりデータベースが巨大だったりすると曲が変るたびにフカフカ負荷負荷します。
$avg('タグ名') 自ノード以下の全リーフからタグ情報を取得しその平均値を返す
タグ名をシングルクォーテーションで括ります。
チュートリアルの表現は簡潔すぎて逆に少し分かり難いですが、要するに平均値を求める関数です。
小数点第3位を四捨五入して、「3.14」のように小数点第2位までを表示します。
当然ですが結果が整数値であっても小数部分は省略されません。
このフォーマットを避けたい場合は$sum/%_itemcount%を使って自分で書くという手もあります。
注意点は、直接の子ノードではなくリーフを対象にするということ。
例えば、$avg('%play_count%')はリーフから取得できるタグなのでちゃんと動作します。
しかし、$avg('%_foldercount%')は%_foldercount%がリーフから取得できないため0.00になります。
直接の子ノードの平均値や合計値を求める関数は今のところありません。
使用例 アルバム毎に%rating%の平均値を表示(未評価の場合は0として算出)
Format
%album% - @quote<@format<$avg('%rating%')>>|%track% %title%
Criteriaを設定して未評価の曲を除外すると結果は異なりますが少し動作が軽くなります。
本当は「平均評価の高い上位10枚」のようなクエリを作りたかったのですがスマートな書き方が分からんのです。
平均評価の順にソートする方法(無理矢理ver)は別項で解説します。
平均値をマークや棒の長さで表示するサンプルも別項で。
$sum('タグ名')自ノード以下の全リーフからタグ情報を取得しその合計値を返す
タグ\名をシングルクォーテーションで括ります。
文字通り合計値を求める関数。使い方も注意点も$avgと同じになりますが解説しときます。
$sumと同様、直接の子ノードではなくリーフを対象にします。
例えば、$sum('%play_count%')はリーフから取得できるタグなのでちゃんと動作します。
しかし、$sum('%_foldercount%')は%_foldercount%がリーフから取得できないため0になります。
また、この関数と%_itemcount%で$avgと同等以上のこと(1.414213のように小数の桁数を調整したり)ができます。
使用例 アルバム毎に総演奏時間を表示
Format
%album% - @quote<@format<$char(91)$div($sum('%length_seconds%'),60):$mod($sum('%length_seconds%'),60)$char(93)>>
%track% %title%
結果は%_play_length%と同じですが表示フォーマットが少し違います。
1時間以上のアルバムでも68:00のように分単位で表示します。
@quote<>この関数内の文字はトークンとして解釈されない
タグ・関数の説明
使用例 サンプルの内容
Format
hoge
サンプルの解説・備考
$parent('タグ名',階層)祖先ノード(自分より上層のノード)からタグ情報を取得する
タグ名をシングルクォーテーションで括ります。
階層は省略できます。その場合は1になり直接の親を参照します。
当然ですが最高でもルートノードまでしか遡ることはできません。それ以上の値を入れると参照先が無いので値を返しません。
ルートやクエリ名など常に特定の階層を参照したい場合は%_nestlevel%と組み合わせて使いましょう。
負数を入れても子を参照することはできません。ちなみに0の場合は自分自身を参照します。
注意点、というかバグ?があります。
同一フィールド内で一度でも$parentを使用すると、$parent節の外でも祖先ノードを参照してしまいます。
回避方法が分からないので、事前に$putsで自分の情報を確保してから親を参照するという愚策で頑張ってます。
もっとまともな方法を知ってる人いましたら教えて下さい。
使用例 アルバム毎に、「インデックス/アーティストの全アルバム数」を表示(例:1/17、2/17、3/17....17/17)
Format
%artist%|@quote<@format<$char(91)%_folderindex%/$parent('%_foldercount%')$char(93)>> %album%|%title%
この例は何に使うか分かりませんが、$parent自体はいろいろと使える関数だと思います。
ただし上記の変な仕様には注意しましょう。
自ノードの情報を使いたい場合は$parentが評価される前に書く。無理なら$putsで保存しとく。
※情報募集中
@query<クエリの定義>そのクエリの子ノードとしてクエリを作成する
クエリの定義は下のように引数で指定します。
@query
で、先に書いておきあますがこの関数は(uninkoの経験上)非常にフリーズしやすいです。
少し間違うと再帰的にクエリを作ろうとしたりリーフの数だけクエリを作成したりします。
バギーってわけじゃないので正しく使えば落ちたりはしませんが、妙な仕様のせいで正しく書いたつもりでも固まってくれます。
まだ分からない部分もありますが注意点を箇条書き。
・引数はセミコロンで区切って指定します
・引数はサブクエリのそれぞれのフィールドの内容になります
・引数のうち、後の2つは省略できます
・Maximumは設定できません
・複数の@queryを書いても、最初の一つ分しか作成されません。
・Formatフィールドを階層化させたい時は@quoteで囲んで、階層を区切る記号は$char(124)として書きます。
・Criteriaフィールドは全体をシングルクォーテーションで括らないと動かない場合があります。詳細不明。
・(重要)親クエリのMaximumが、@queryで作成するクエリの数になる。
最後のが厄介です。
知らずに「0 tarcks」のまま実行すると永遠にサブクエリを作ろうとして固まります。
試しに「2 tracks」にすると同じ内容のサブクエリが2つ生成されます。謎仕様。
動的にクエリを作りたいというケースがあまり無い(NowPlayingくらい)なのでuninkoは使ってません。
たぶん@playlists実装時の副産物じゃないかなと推測してます。
一応、限定的ですが使い道のある局面がChangeLogに書いてあったと思いますので勉強熱心な方はどうぞ。
使用例 このクエリ直下に「少なくとも1回は演奏したことのある曲を抽出するクエリ」を作成する
Format
@query;;>
Formatで使う区切り記号はそのままだと使えません。
生成されるサブクエリの内容を見ながらいろいろ試してみましたが上の書き方でうまくいきました。
$hidetext(文字列など)括弧でかまれた部分(引数)を表示しない
隠すというより消します。
他ノードから$parent('%_name%')などで間接的に参照しても消えてます。
またPO(Sort by disp)にも影響しません。
何に使うのかわかりません。処理はしたいけど値を返したくない関数をネストしたりするんでしょうか。
※情報募集中
使用例 思いつかん
保留
@hidden自分より下のノード全体を隠すが自分自身は表示する(アイコンの色が薄くなって表示されます)
@hidden2自より下のノード全体、および自分自信を隠す
@hidden3自分に直接ぶら下がる全リーフを隠すがサブフォルダは隠さない。また自分自身は表示される
@hiddenシリーズを使う時は直後にスペースを入れないと動作しません。
それぞれの違いは下記の通り。
この隠れたノードというのは少し振る舞いが不思議というか変です。
%_foldercount%等を使用すると隠れたノードもしっかりカウントされます。
さらに見た目上はリーフになっていても%_isleaf%が1を返すことはありません。
@hidden/@hidden2で下位ノードを隠すと上位ノードをクリックしても隠れたノード(リーフ)はプレイリストに転送されません。
リーフを擬似的に非リーフ化したり、@limitより柔軟にノード省略したい場合などには使えなくもないです。
使用例 リーフ(曲タイトル)は表示しない
Format
%genre%|%artist%|%album%@hidden3 |%title%
繰り返しになりますがスペースを入れるの忘れないでね。
例文の@hidden3を@hiddenに変えるとリーフが転送されなくなります。
@fakelevel階層を隠す
@fakelevelを使用するときは直後にスペースを入れないと動作しません。
@hiddenとは違いその階層だけを隠すので下位ノードは表示されますが動作自体は似ています。
@hidden同様にスキップされるのではなく内部的には存在してるようです。
例えばPOにも影響しますし、下位ノードの%_nestlevel%にも影響(カウントされる)します。
使用例 アルバムリストのbyGenreと同等のツリーを作成
Format
%genre%|%artist%|@fakelevel %date%%album%|%album% $char(91)%date%$char(93)|%track% %title%
Population Order
Sort by display name にチェックする
アルバム名の後にリリース年が表示されます。
しかしソート順はリリース年の優先度が高くなり、結果的にアルバム名順ではなくリリース年が古い順に並びます。
正確には、POフィールドに以下のコードを書くのと同じソートになります。
%genre%|%artist%|%date%|%album%|%track%
この例文は隠れた階層がSort by display nameに影響するというサンプルです。
普通に使うなら素直にPO書いた方がシンプルです。
もう少しマシな例としては、V.Aアルバムの時だけAlbum Artistの階層を作ったりするのに使えるかも。
あとはそうだな。平均値や合計値などPOフィールドでうまく動作しない値でソートするためSort by display nameに頼るしかない状況とか。
@rgbノードの文字色を指定する
custom selection colorを有効ににしていないと動作しません。
引数は0〜255の整数です。
文字列の途中から色を変える等はできません。
選択時の文字色を変えることはできません。(この関数で変えることはできないという意味で)
使用例 アルバム全体で9回以上演奏したことのあるアルバム名は赤色で表示し、それ以外はデフォルトの文字色。
Criteria
%play_count% GREATER 0
Format
%genre%|%artist%|
@quote<@format<$ifgreater($sum('%play_count%'),10,'@rgb<200,0,0>',)>>
%album% $char(91)%date%$char(93)|%title%
@formatでネストする必要はありませんが、ネストした場合は@rgbをシングルクォーテーションで括ります。
ちなみに選択時の文字色や背景色などはcustom selection colorで設定するしかありません。
使用例 最終演奏日を日付ごとに分類して表示(曜日算出ルーチンのサンプル)
Label
History @format<$char(91)$div(%_itemcount%,%_foldercount%) tracks/day$char(93)>
Source
@database
Criteria
%play_count% GREATER 0
Format(実際は改行なし)
$left(%last_played%,10)
'['
$select(
	$add($mod($cwb_datediff(1900-01-01,%last_played%),7),1)
	,
	MON
	,
	TUE
	,
	WED
	,
	THU
	,
	FRI
	,
	'@rgb<0,60,240>'SAT
	,
	'@rgb<240,60,0>'SUN
)
']' 
$ifgreater(1,$put(diff,$cwb_datediff(%last_played%,%cwb_systemdate%)),Today
	,$ifgreater(2,$get(diff),Yesterday,$get(diff) days ago)
)
$substr(%last_played%,12,16) %title%
Maximum
14 subfolders (ご自由に)
Population Order
%last_played%
Reverse チェック
1900以降に対応。
仮にリリース年月日に適用したとしてもLPレコードの誕生が1950年前後なので大丈夫なはず。
基本的には日数に換算して剰余を求めてるだけですがファイル数が多いと重いかもしれません。
恐らくもっとスマートな書き方があるんだろうと思います。
自分で書こうって人は「曜日算出」でググればいくらでもサンプルが出てきます。
流石にTitleFormatingでのサンプルは無いですがCとかJavaなら腐るほどあります。
大抵のサンプルはグレゴリオ暦以降をカバーするものなので100/400年ごとの誤差修正を含みます。
例文ではその処理を削って200年間(2000年は都合良く閏年なので)だけに絞ってます。
合同式ウンヌンは知りませんが結果が合ってりゃ良いかなっと。

備考:cwb_hooksを使ったサンプルに差し替えました。
@limit<数値>子ノードの最大数を指定する
なぜかチュートリアルには載ってませんが旧ver同様に動作します。
自ノードの直接の子ノードのみに影響します。
使用例 アーティストごとに演奏回数トップ5を表示
Criteria
%play_count% GREATER 0
Format
%artist% @limit<5>|$char(91)$num(%play_count%,3)$char(93) %title%
Population Order
$num(%play_count%,3)
Reverse チェック
ノード数じゃなくてリーフ(ファイル)の総演奏時間で制限したりは出来ない?のかな。
あまり正確な記憶ではないけど旧verでは出来たような気がする。
※情報募集中
@default元のディレクトリ構造を再現する
タグ・関数の説明
使用例 サンプルの内容
Format
hoge
サンプルの解説・備考
@database データベースに登録されている全ての曲(ファイル)を対象にする
Sourceを指定しない場合も自動的に@dataseになる
@drop<パス> 特定のパスに含まれる曲を対象にする
Formatに@defaultと書くことで元のディレクトリ構造を再現できる
@node<ノード名> 特定のノードを対象にする
これもあまり使ったことがないので保留項目
@playlist<プレイリスト名> 特定のプレイリストを対象にする
プレイリストをリネームすると空っぽになる
@playlists @playlist<>で全てのプレイリストのクエリを作る
リストを作ったりリネームするのに同期して自動的にクエリ生成やクエリ名変更してくれる
@and A @and B
A,B両方に含まれる曲を対象にする(片方にだけ含まれる曲は対象にしない)
@or A @or B
A,Bどちらかに含まれる曲を対象にする
@not A @not B
Aには含まれているが、Bには含まれない曲のみを対象にする