2014년 5월 24일 토요일

푸바와 태그정리 방법

관리하는 음원이 많아 지면서 필연적으로 접하게 되는 일이 태그 관리입니다. 곡이 많지 않으면 아티스트(가수)별로 분류하기도 하고, 장르별로 구분하기도 합니다. 어떻게 하더라도 나중에 태그 기준으로 정렬을 다시하면 원하는 대로 나타납니다. 하지만 처음에 기준을 명확히 세우지 않으면 나중에 일이 좀  귀찮아집니다.

앨범 아티스트

푸바를 사용하게 되면 자연스럽게 앨범 단위로 폴더를 만들어서 음원을 관리하게 됩니다. 처음 CD를 리핑하면 보통 freedb에서 타이틀(%title%)과 아티스트(%artist%), 그리고 앨범명(%album%)을 찾아줍니다. 보통 아티스트와 앨범 아티스트가 일치합니다. 그래서 앨범  아티스트를 특별히 지정하지 않습니다. 하지만 한명의 아티스트가 아닌 여러명의 아티스트로 구성된 편집앨범(Compilation Album)의 경우 앨범아티스트(%album artist%) 태그를 채워줄 필요가 있습니다. 코딩하기 나름이겠지만 푸바에서는 앨범명과 앨범 아티스트 태그가 같으면 하나의 앨범으로 간주합니다.

푸바에서 사용하는 Title Formatting(TF)에서는 아티스트를 %artist%로 나타냅니다. 그리고 artist, album artist, composer(작곡가), performer(연주자) 순으로 아티스트를 찾습니다. %album artist%는 artist와 album artist의 순서가 바뀝니다. 편집앨범의 경우 보통 "Various Artist" 또는 "VA"로 적습니다만, 나중에 앨범아티스트 별로 정렬해 보면 VA로 된 앨범이 너무 많을 수도 있습니다. 이렇 경우 "Disney", "가요모음" 또는 대표 아티스트명을 사용하기도 합니다.

또 2장 이상으로 구성된 앨범의 경우 %album%과 %album artist%는 똑같이 하고 "Disk Number"(%discnumber%)와 "Total Dics"(%totaldiscs%) 구분합니다. 그러면 ELP에서 다음과 같이 나타납니다.(참고로 이것은 Euros 스킨에서 차용한 것입니다.)



클래식 앨범의 경우 편집앨범이 많습니다. 이렇 경우에는 공통된 사항, 즉, 작곡가, 지휘자, 또는 연주자로 album artist를 정합니다.
장르 대해서는 저는 대부분 무시합니다만, 다른 분들은 어떻게 하시는 지 궁금하군요.
또 %subsong% 태그 처리가 귀찮을 것 같아, CUE  sheet는 아예 사용하지 않습니다.

별점과 통계 데이터

푸바에서는 파일의 메타데이터에 있는 태그를 이용할 수도 있지만, 내부 db를 두어 파일 메타와는 별도로 관리하는 것이 기본입니다. 보통 비표준 태그에 대해서 그렇게 하는데, 파일을 건드리지 않는다는 점에서 마음에 듭니다. 대표적인 것이 별점(%rating%)과 플레이 통계데이터인 play counter(%play_counter%) 입니다. 통계 데이터와는 다르게 별점은 다른 플레이어에서 파일의 메타데이터로 포함시킨 경우가 종종 있습니다. 따라서 별점을 사용하시는 분은 db로 할지, 메타데이터로 할 지를 처음부터 결정하는 것이 좋습니다. 본인이 명확히 인지만 한다면 혼용해서 사용하셔도 좋습니다. 또한 내부 db에 포함된 데이터를 파일 메타데이터로 옮기거나, export해서 다른 프로그램에서 사용할 수 있는 기능도 포함되어 있지만, 시험해 보진 않았습니다.

별점과 비슷한 것으로 Lastfm의 love도 있습니다. love 별점의 5단계 구분과는 다르게 그냥 on/off 입니다. Foobar-Hazel에서는 모두 표시해 줍니다. 모두 표시하면 좀 지저분해 질 수도 있겠습니다.



ABBA 앨범에 대한 ELPlaylist 화면 입니다. super Trouper의 경우 좀 현란합니다. 맨앞의 06은 트랙번호, 그 다음 13은 play counter, 타이틀 뒤의 super script 29는 Lastfm의 play count, 빨간 하트는 Lastfm의 love, 노란색별은 db 별점, 그 뒤의 노란색 5는 별점 5라는 의미, 그 밑은 민트색 민트색 4는 메타데이터의 별점4라는 의미입니다. Mamma Mia의 민트색 별은 메타데이터의 별점을 표시합니다. (이 look & feel도 Euros의 ELP를 모방한 것입니다.)

Lastfm 사용하지 않는 분은 그냥 내버려 두셔도 관계 없습니다.  깔끔하게 없애고 싶으면, ELP화면에서 마우스 우클릭 > Settings... > Field definition의 LastFM.mode를 0으로 만드시면 Lastfm 관련해서는 표시하지 않습니다. 하지만 바로 적용이 안되더군요. 종료했다가 다시 실행해야 합니다. 아마도 cache의 영향 때문인 것 같습니다.


별점 설정/표시는 가운데 컬럼의 중간 부분에 있습니다. 이 부분은 DartOne 4의 코드를 조금 수정해서 사용했습니다.

2014년 5월 23일 금요일

Foobar2000 skin 만들기-3

 Foobar2000-Hazel.zip

이번편은 Graphic Browser (GB)에 대한 내용입니다. 좋아하는 컴포넌트인데 설정에 일본어가 나오는 것을 보면 제작자가 일본 분이 아닌가 하고 추측해 봅니다. 푸바의 제작자인 Peter Pawlowski(피터 파블롭스키)도 이름으로 미루어 짐작해 보면 러시아 분인 것 같습니다. 인터넷에서 자료를 찾다 보면 러시아어로 된 사이트가 많은 것을 보더라도.... 암튼.... 코딩하다 보면 푸바 정말 잘 만들 프로그램으로 보입니다. 제작자에 경외심을 갖게됩니다.

처음 내 눈길을 끈 것은 앨범아트로 가득찬 푸바 화면이었습니다. 하나의 화면으로 소유하고 있는 전체 CD를 볼 수 있다는 점이 마음에 들었습니다. GB가 이런 일을 쉽게 하도록 해 줍니다. 하지만 코딩을 시작하면서 아쉬운 점들이 눈에 띄기 시작합니다. 그 중 하나가 Preferences의 Display에 있는 Album Art 설정을 사용할 수 없다는 점입니다. 따라서 다른 컴포넌트와는 달리 일일이 우선순위에 맞게 수동으로 코딩해 주어야 합니다.  Global Variables을 읽을 수 있는 기능만 있어도 좋았을텐데요. WSH Panel Jscript로 이것을 대체 할 수 있는 코드가 있을 것 같기도 한데 찾지 못했습니다.

하지만 수동으로 자신의 상황에 맞게 코딩해 주면 문제없습니다. 내 입맛에 만 맞으면 되니까요...
왼쪽 컬럼의 GB 앨범 화면에서 마우스 우클릭하면 나타나는 켄텍스트 메뉴에서 Setting(설정) 화면으로 이동합니다.


오른쪽과 가운데 컬럼의 ELPlaylist와 Cover에서는 앨범 커버를 찾았는데, Graphic Browser(GB)에서는 찾지 못하고 까만 구멍들이 보입니다. 다음은 Setting(설정) 화면입니다.


코드을 살펴보면 Folder_120.jpg, Folder.jpg, Front,jpg, J:\Music\Lastfm\Album_image\아티스트-앨범.* 순으로 앨범아트를 찾습니다. 전편에 소개한 Preferences의 Display에 있는 Album Art 설정과는 무관합니다. 그리고 파일내부의 메타데이터로 있는 커버이미지도 사용하지 못합니다.
표시된 부분 J:\Music\Lastfm\Album_image는 제가 사용하는 폴더입니다. 이것을 전편의 Preferences > Biography > Lastfm에서 수정한 여러분의 폴더명으로 바꿔주셔야 합니다.  나머지 3개의 아이콘에서도 이와 똑깥이 수정하시기 바랍니다.


이것으로 설정은 완료됩니다.

Foobar2000 skin 만들기-2

 Foobar2000-Hazel.zip

푸바를 사용해서 음원을 정리하기 시작하는 것은 보통 소유하고 있는 곡이 수백곡이 넘어 가면서부터 인 것 같습니다. 천곡이 넘어가면 태그 관리없이는 힘들어집니다. 푸바를 사용하면 앨범단위로 폴더를 만들어서 관리하는 것이 편리합니다. 보통 장르별로 관리하는 경우도 많은데, 곡의 수가 많이지면 어려워집니다. 저는 가요,팝,경음악,클래식,기타로 대분류하고 각각의 대분류된 폴더 밑에 아티스트(가수) 별로 폴더를 만듭니다. 아티스트 폴더는 다시 앨범(한장의 CD) 별로 폴더를 갖습니다. 맨 하위의 앨범 폴더에는 트랙별로 하나씩 파일이 만들어지고, 이 앨범 폴더를 대표하는 Folder.jpg와 Folder_120.jpg의 이름으로 앨범커버 파일(커버아트)을 포함시킵니다.

Folder.jpg 외에도 Foler_120.jpg를 또다시 만드는 이유는 프로그램의 부하를 줄여주기 위함입니다. 물론 프로그램에서 캐쉬로 어느 정도 보완해 주지만, 한 페이지에 표시해야 할 이미지 파일이 많고, 그 이미지의 사이즈가 크면 버벅대기 시작합니다. 그래서 Folder.jpg는 가능한 큰 사이즈의 파일로, Folder_120.jpg는 120x120 이하의 작은 사이즈로 만듭니다. 이용자에 따라서는 folder 대신에 cover, front등의 이름을 사용하기도 합니다. 다만 하나의 이름으로 통일하는 것이 좋습니다. Foobar2000-Hazel에서는 앨범커버의 표시는 96x96으로 제한됩니다. 따라서 120x120 의 사이즈 보다는 96x96이 최적이지만 약간의 여분을 둔 것입니다. (가운데 컬럼의 Cover 부분은 Foler.jpg를 최우선순위로 사용합니다.)

Folder.jpg 외에도 Back.*, Disc.*, Artist.*를 포함하기도 합니다.

아래는 푸바 File/Preferences의 화면입니다.



여기서 ELP, ESP등의 playlist에서 커버아트로 사용될 이미지 파일의 우선순위를 정합니다. (좌측 컬럼의 앨범(Graphic Browser component)과는 관계가 없습니다. GB에서는 프로그램 코드로 우선순위를 지정해 주어야 합니다.) 위 Front Coder의 경우를 보면 folder_120.jpg의 우선순위가 가장 높습니다. folder_120.jpg가 없으면 folder.jpg, 이것도 없으면 front.jpg 순으로 내려가고, 맨 마지막까지 갑니다.(외부 이미지 뿐 만 아니라, 파일내부 메타 데이터에 포함되어 있는 커버아트도 찾습니다. 외부 커버아트와 내부 커버아트의 우선순위도 정할 수 있습니다.) %로 되어 있는 것은 meta 데이터를 뜻합니다. 맨 마지막 라인은 좀 복잡합니다. 이는 각자의 환경에 맞게 수정해 주어야 합니다.

J:\Music\Lastfm\Album_image\$replace($replace($replace($puts(pos,$strchr(%artist%,'('))$trim($ifgreater($get(pos),1,$substr(%artist%,1,$sub($get(pos),1)),%artist%)),:,_),'/',),'"','')-$replace($replace($replace($puts(pos,$strchr(%album%,'('))$trim($ifgreater($get(pos),1,$substr(%album%,1,$sub($get(pos),1)),%album%)),:,_),'/',),'"','').*

좀 길고, 암호 같습니다. 한 개의 라인입니다. Title Format(TF)로 명명된 푸바에서 사용되는 스크립트 언어입니다. 메뉴의 Help에 보면 설명서가 있습니다. 스킨작성에도 사용되기 때문에 푸바를 계속 사용하시다 보면 자주 보게 됩니다.

맨처음의 "J:\Music\Lastfm\Album_image" 부분을 자신의 컴퓨터 환경에 맞게 바꿔 주시면 됩니다. 나중에 설명되겠지만 Last.fm으로부터 자동으로 다운로드된 앨범 아트 이미지가 저장되는 폴더를 나타냅니다.
Front Cover외에도 Artist에서도 이와 비슷한 라인이 포함되어 있는데 같은 방식으로 수정해 주셔야 합니다. 뭐... 그냥 두거나, 지워버려도 별 지장은 없습니다. 커버아트를 찾을 유력한 찬스 하나가 줄어들 뿐 입니다.

참고로 간단히 내용을 설명하면 태그명 %artist%에서 '(' ,로 시작되는 부분부터 끝까지 지우고, 파일이름으로 사용하지 못하는 문자인 : , / , " 를 바꿔주고, 앞뒤 스페이스를 지우라는 뜻입니다. %album%에 대해서도 같은 식으로 합니다.
예를 들면 아티스트가 "Francis Lai (프란시스 레이)", 앨범 타이틀이 "Love Story (러브 스토리)"로 되어 있으면,
 "J:\Music\Lastfm\Album_image\Francis Lai-Love Story.*" 에서 앨범 이미지를 찾으라는 뜻이 됩니다.

이것은 Biography(전기) 컴포넌트가 서버로부터 앨범과 아티스트 데이터를 찾아 와서, 위에 위에 표시한 폴더에 위에 표시된 파일명으로 파일을 만들어 줘야 가능합니다. 이를 위해 메뉴의 File/Preferences에서 Tools > Biography Sever 부분의 수정이 필요합니다.


%artist%와 %album%에서 '("부분을 제외하고 서버에서 쿼리하라는 의미입니다. 물론 똑똑하고 친절한 서버는 ()부분을 제외하고, 지능적으로 앨범과 아티스트 정보를 찾아 제공할 수도 있습니다. 하지만 영국의 Last.fm은 그리 친절한 것 같진 않습니다.
다행히 여기서는 수정할 것이 없습니다.

Tools > Biography Sever > Last.fm에는 수정할 것이 있습니다. 왜냐하면 내 컴퓨터에 저장할 폴더 위치와 파일명을 지정해 줘야 하기 때문입니다.


Metadata와 Image 부분을 수정해 줘야 합니다.
위에서와 같이 "J:\Music\Lastfm\Album_image" 부분을 위에서와 똑같이 수정해 주시면 됩니다.
Album의 수정도 Artist와 마찮가지입니다.
Wikipedia 부분도 수정해 주어야 할 것 같은데, 대부분 Last.fm에서 잘 찾아오길래 내버려 두었습니다.

가사서버 부분의 수정도 하면 좋습니다.



Tools > Lyric Show 3 에서도 Artist 와 Title 부분을 아래와 같이 수정하면 좀 더 나은 가사찾기가 가능합니다.

Artist: [$puts(pos,$strchr(%artist%,'('))$trim($ifgreater($get(pos),1,$substr(%artist%,1,$sub($get(pos),1)),%artist%))]
Title: [$puts(pos,$strchr(%title%,'('))$trim($ifgreater($get(pos),1,$substr(%title%,1,$sub($get(pos),1)),%title%))]

이것 역시 '(' 부분을 제거하고 쿼리하도록 하기 위한 것입니다.

서버로 부터 찾은 가사를 저장하기 위해서는 다음과 같이 수정해야 합니다.


Filename format 부분을 다음과 같이 수정하고, Custom directory는 원하는 폴더명을 적어주시면 됩니다.

Filename format:
[$replace($replace($replace($puts(pos,$strchr(%artist%,'('))$trim($ifgreater($get(pos),1,$substr(%artist%,1,$sub($get(pos),1)),%artist%)),:,_),'/',),'"','') - ][$replace($replace($replace($puts(pos,$strchr(%title%,'('))$trim($ifgreater($get(pos),1,$substr(%title%,1,$sub($get(pos),1)),%title%)),:,_),'/',),'"','')]

앞으로 앨범커버와 가사 서버가 점차 좋아지면 위와 같이 수정을 할 필요가 없어 질 수도 있습니다.


마지막으로 또하나 수정할 부분이 있는데, 이것은 다음편에 작성하겠습니다.

Foobar2000 skin 만들기-1


 Foobar2000-Hazel.zip

갖고 있던 CD들을 모두 리핑하고 푸바2000으로 태그 정리하기 시작하면서 아쉬웠던 기능들이 하나 둘씩 나타나기 시작했습니다.
결국 내 입맛에 맞는 푸바스킨을 만들게 되었습니다. 스킨적용 방법에 대해 하나하나 설명하기에 앞서 만들어진 스킨을 소개합니다.
전체적인 뷰는 아래와 같습니다.


말이 스킨이지, 실제로는 조그만 프로그램을 만드는 것과 유사한 작업입니다.

포터블이기 떄문에 설치할 필요없이 압축 풀어서 그냥 실행하면 됩니다. 푸바는 포터블과 노멀 모두 설치가 가능한데, 관리 측면에서 포터블이 많이 편리합니다. 노멀모드로 사용하시는 분들은 아마도 Columns UI (CUI)로 작성된 스킨 적용방법은 잘 아실 것으로 생각합니다. (대부분의 스킨은 CUI로 작성되어 있더군요.) 제가 쓰는 환경은 Windows 7 64bit 입니다. 혹시 실행 에러나시는 분은 댓글 달아 주세요. 그리고 사용평도 같이 올려주시면 개선하는데 많은 도움이 될 것 같습니다.




얼핏 보기에 3 컬럼 기반이란 점에서 DarkOne 4와 유사해 보입니다. 그리고 색상과 ELP를 보면 Euros와도 닮아 보입니다. 네... 맞습니다. 이 두 스킨을 기반으로 해서 만들었습니다. (Euros도 DarkOne을 참조한 것으로 보입니다.) 이외에도 xChange, HiFoo에서도 차용한 코드가 있습니다. 처음 사용했던 스킨이 Euros였기 때문에 Euros의 깔끔함이 눈에 익었고, 다크원의 심플함과 잘 짜여진 코드가 좋았습니다. 하지만 둘 다 마음에 안드는 점이 점차 많아지기 시작했습니다. 몇 개의 화면을 더 보시죠...


가수의 약력(전기) 보기 화면 입니다. Last.fm이 제공하는 훌륭한 기능입니다. 선택하면 앨범사진을 볼 수도 있습니다. 자세히 보신 분은 이전 화면에서도 알아 채셨겠지만 플레이 중인 음악과 앨범커버 화면이 사용자의 선택에 따라 다를 수도 있습니다. 또 일치 시킬 수도 있습니다. 위 화면과 같이 ABBA 노래를 들으면서 Smokie 노래에 대한 정보를 볼 수 있습니다. 보통 푸바에서는 컨텍스트 메뉴에서 이 모드를 선택할 수 있는데, 잘 안되는 스킨도 있더군요.


컬럼의 갯수와 크기 조절이 가능합니다. 클래식 음악은 보통 타이틀이 매우 깁니다. 이렇게 놓고 보면 Euros와 유사합니다. Euros에서는 컬럼의 갯수가 2개로 고정되고 앨범커버 화면크기가 고정되어 있는 점이 좀 아쉬웠습니다. 이점이 푸바 스킨에 손을 대기 시작한 계기이기도 합니다. 



Euros 있는 mini모드를 모방했습니다. 다크원에서는 못 찿은 기능입니다.


앨범커버(보통은 뒷면)를 커다랗게 볼 수도 있습니다.

Foobar 1.3.2 기반이고, 기본 컴포넌트외에 추가된 컴포넌트는 모두 user-componets 디렉토리에 들어있습니다.
  1. foo_alsong_lyric : 알송 가사 보기, 왼쪽 컬럼.
  2. foo_audioscrobbler : Last.fm에 scrobble 보내기. Last..fm 사용 안하시는 분은 빼도 됩니다.
  3. foo_customdb :  태그를 위한 로컬 SQL DB.
  4. foo_input_sacd : SACD 코덱.
  5. foo_playcount : play count 통계 데이터.
  6. foo_queuecontents : playlist 외에 임시로 사용할 수 있는 플레이 큐.
  7. foo_quicksearch : Quick search. 오른쪽 아래.
  8. foo_run : 외부 프로그램 실행, 오른쪽 아래에 있는 장식용(?) 아이콘들을 위한 컴포넌트.
  9. foo_skip : 트랙 건너뛰기.
  10. foo_ui_columns : CUI 기본 컴포넌트.
  11. foo_uie_biography : 가수약력 및 앨범 커버 보기, 왼쪽 컬럼.
  12. foo_uie_elplaylist : ELPlaylist. 오른쪽 컬럼과 미니모드.
  13. foo_uie_esplaylist : ESPlaylist. ELPlaylist 와는 다른 성격의 playlist. 오른쪽과 왼쪽 컬럼.
  14. foo_uie_graphical_browser : 앨범 커버 전체 보기. 왼쪽 컬럼.
  15. foo_uie_library_tree : 라이브러리 트리. 왼쪽 컬럼과 미니모드.
  16. foo_uie_lyrics3 : 가사 보기. 왼쪽 컬럼.
  17. foo_uie_panel_splitter : Panel Splitter. 스킨 구성 기본 컴포넌트.
  18. foo_uie_quicksearch : foo_quicksearch를 위한 UI.
  19. foo_uie_vis_channel_spectrum : 채널 스팩트럼, 가운데 컬럼.
  20. foo_uie_vis_peakmeter_spectrum : 피크미터 스팩트럼, 가운데 컬럼.
  21. foo_uie_wsh_panel_mod :  WSH panel. 스킨 코드 기본.
  22. foo_vis_vumeter : 아날로그 UV 미터. 가운데 컬럼.
  23. foo_wave_seekbar : 웨이브 형식의 seekbar(플레이중인 곡의 위치 표시)
이 외에도 사용환경(또는 취향)에 따라. DSP, 코덱, WASPI, remote등을 추가해서 사용하시기 바랍니다.

제대로 사용하기 위해서는 File/Preferences에서 몇가지 설정을 해주어야 합니다. 그리고 태그정리에 대해 사용자의 명확한 입장과 이러한 사용자의 취향이 프로그램에 반영되어야 합니다. 각자의 취향이 달라 결국에는 자신의 스킨을 만들게 되는 것 같습니다. 간혹 프로그램이 사용자의 취향을 만들어 내기도 합니다.

이것에 대해서는 다음편에 올립니다.