瀏覽單個文章
vxr
Elite Member
 
vxr的大頭照
 

加入日期: May 2002
您的住址: 地球的上面..
文章: 5,854
Exclamation

補2011/11/05: Groups項目的使用
Group可以說是Header下的子群組, 從下面這張圖便可輕易明白:

這邊我們來看一個比較麻煩一點的案例, 當然依然是以二層式目錄架構為主..
先分析出三種檔案呈現架構:
第一種呈現: 單層+單一專輯

這個呈現架構較為簡單, 他只有一層, 單純在Groups的pattern撰寫上其實沒甚麼特別的難度...
第二種呈現: 單層+多張子專輯(更抽象化的角度來看, 就是一個專輯多張CD物件)

這個情況在pattern的設計上就比前一個要靈活一點...
第三種呈現: 雙層+多個子目錄+每個子目錄存在一張專輯

這個狀況會比較麻煩, 這代表著第一層是為總專輯, 而第二層的每個子目錄皆為CD目錄, 一個CD目錄包含一張CD物件檔..
不管如何, 這三種案例皆要達到一個目標: Groups的一致性呈現
甚麼意思呢? 從第一個呈現來看, 他只有一層架構, 如果透過Groups直接設定, 例如我使用下面的幾種TitleFormatting語句:
%album%, %filename%,$directory(%path%,1)或著%diectoryname%
這樣會有一種問題出現: Group的名稱和Header名稱重疊, 甚麼意思呢? 請看下圖...

從這張圖可以看到, 他只有一張專輯, 可是Header和Group的名稱卻重疊了, 這個資訊重複的情況並不是所希望的...
我只希望他有一個情況: 只會有一個名稱, 也就是如下圖所示:

沒有重疊的資訊, Group反而消失了, 這個情況相當合理, 這是第一種呈現所要達到的結果...
再來看第二種呈現的問題, 他首先是單層目錄下有多張CD專輯檔案...
如果直接使用%album%, %filename%語句等等, 顯然是相當合理的, 可以再參考這張圖..

這是單層目錄架構+多張CD物件, 但是如果直接使用%album%, %filename%, %directoryname%語句等等...
便會違反第一種呈現, 因此要考量一點: 呈現各個Groups, 但是不可違反第一種呈現..
最後是比較麻煩的第三種呈現, 因為它是雙層目錄架構夾帶個張CD物件檔...
同樣直接使用%album%,%filename%語句等等依然可以達到目的..

但是這樣使用違背了第一種呈現規則, 多了第三種呈現, 使得解決上較為麻煩, 處理上也需要一些技巧...

看看上圖這張, 舉一個範例來說明:
D:\Musics\FINAL FANTASY XIII ORIGINAL SOUNDTRACK\FINAL FANTASY XIII ORIGINAL SOUNDTRACK - DISC 4\
對於上面這個路徑來說, 它是雙層結構, 因為它包含了兩個目錄:
1. FINAL FANTASY XIII ORIGINAL SOUNDTRACK
2. FINAL FANTASY XIII ORIGINAL SOUNDTRACK - DISC 4
對於1. 來說, 如果它的名稱存在於2. 的名稱部分裡, 代表它是雙層架構, 這種理解上其實並不困難..
另外再看一個範例:
D:\Musics\FINAL FANTASY VII ADVENT CHILDREN ORIGINAL SOUNDTRACK\
從這個範例來看, 它只有一層目錄, 所以相當單純, 對應於前面那張Dir1與Dir2的區塊圖來說. 它只有Dir1的存在...
如果我們使用這個TitleFormatting來判斷:
$strstr(%directoryname%,$directory(%path%,2))
$directory(%path%,2)表示第一層目錄(存放實體檔案目錄的再上層目錄); %directoryname%則是存放實體檔案的目錄...
對於前面第一個路徑來說:
D:\Musics\FINAL FANTASY XIII ORIGINAL SOUNDTRACK\FINAL FANTASY XIII ORIGINAL SOUNDTRACK - DISC 4\
FINAL FANTASY XIII ORIGINAL SOUNDTRACK被包含在FINAL FANTASY XIII ORIGINAL SOUNDTRACK - DISC 4名稱裡, 因此它是雙層目錄結構, 相當合理. 在看第二個路徑:
D:\Musics\FINAL FANTASY VII ADVENT CHILDREN ORIGINAL SOUNDTRACK\
如果套用剛剛那個語句, 會變成它的目錄結構判斷為:
第一層: Musics
第二層: FINAL FANTASY VII ADVENT CHILDREN ORIGINAL SOUNDTRACK
可以看出這是不相等的, 因此直接判定為它是單層結構, 這樣單雙層的問題就解決了. 只要用一個條件判斷合併就即可:
$if($strstr(%directoryname%,$directory(%path%,2)),雙層目錄, 單層目錄)
對於雙層目錄來說, 只要單純加入使用一個語句便可:
%album%, %filename%, %directoryname%或著$directory(%path%,1)等等, 以下形式:
$if($strstr(%directoryname%,$directory(%path%,2))
, %directoryname%
, 單層目錄)
剩下就只有單層目錄的問題要處理, 這個問題要解決兩種狀況:
1. 如果只有一張CD物件檔案, Group不可呈現
2. 如果有多張CD物件檔案, 要呈現各個Groups
來看種路徑案例呈現:
ex1: 單個檔案
D:\Musics\FINAL FANTASY VII REUNION TRACKS\FINAL FANTASY VII REUNION TRACKS.cue
ex2: 多個檔案
D:\Musics\FINAL FANTASY VII ADVENT CHILDREN ORIGINAL SOUNDTRACK\FINAL FANTASY VII ADVENT CHILDREN ORIGINAL SOUNDTRACK - DISC 1.cue
D:\Musics\FINAL FANTASY VII ADVENT CHILDREN ORIGINAL SOUNDTRACK\FINAL FANTASY VII ADVENT CHILDREN ORIGINAL SOUNDTRACK - DISC 2.cue
對於ex1來說, 單個檔案的CD物件名稱, 對於%directoryname%來說是相等的; 而在ex2而言, %directoryname%與%filename%卻是不相等的, 因此可以使用這個語句判斷:
$strcmp(%filename%,%directoryname%)
如果相等就代表它只有一個CD物件檔案, 反之則是多個CD物件檔案, 和$if條件式合併如下:
$if($strcmp(%filename%,%directoryname%)
,
,%filename%)
條件式表明如果相等, 傳回空, 不出現Group, 否則就傳回%filename%, 使Group呈現. 這個結果是相當合理的....
再把這個條件式與前面的$if條件式合併如下:
$if($strstr(%directoryname%,$directory(%path%,2))
,%directoryname%
,$if($strcmp(%filename%,%directoryname%),,%filename%)
)
這個單雙層目錄呈現的問題便可得到解決, 但是要注意一點!
路徑命名原則是重要的, 否則不一致的情況, 無法得到解決! 這點要注意, 整合性的路徑命名是有效方便檔案管理的...

補2011/11/06: 被選取項目(selected item)閃爍效果
由於DUI不支援豐富的color functions...
因此$rgb(), $blend(), $hsl()等語句是沒辦法使用的...
對於目前正在撥放的被選取項目, 光靠一個箭頭(arrow)...
標示性稍有薄弱, 利用下面的Title Formatting語句實現基本的閃爍(flash)效果...
$if(%isplaying%,$ifequal($mod(%playback_time_seconds%,2),0,<<%title%>>,>>%title%<<),[%title%])
這是一個比較簡單的方式, 當然你也可以結合$progress(), $padcut(), $substr()等語句..
來實現標示更強烈的移動效果, 當然這複雜度就會比較高了...
下面這個是foobar的windows title部分, 看看就好...
$ifgreater($mod(%playback_time_seconds%,10),5,'['%codec%']''['$div(%samplerate%,1000)$ifequal($mod(%samplerate%,1000),0,,$replace($div(%samplerate%,100),$div(%samplerate%,1000),.))KHz']''['%bitrate%Kb']'[%album%],[%artist% - ]['['%tracknumber%']' ][%title%])
 
舊 2011-11-06, 09:45 PM #2
回應時引用此文章
vxr離線中