CUE Sheet 與 CDDB protocol

昨天我說,也許有機會用 CUE 去 freedb 查詢專輯的 meta data,再順手加上 BOM 以及 UTF-8 編碼,不過看來是我太天真了。

根據 Cue sheet 以及 EAC and Cue Sheets 這兩篇文章的說明,我們根本無法從 CUE Sheet 得到整張專輯的「總時數」,而只能看到每一首歌的開始時間、Gap 等資訊,所以這樣推算起來,我們除了最後一首歌的時間之外,都可以從 CUE 檔得知。(題外話:INDEX 的格式是 1:60:60:75,非常不直覺)

CDDB protocol 在送出查詢時必須計算 discid(這有時候也會出現在 cue sheet 裡面),他的計算方式我就不贅述了,有興趣的可以去翻 Wikipedia 的 CDDB。但是 discid 並不是獨特的(Unique),所以在查詢的時候除了加上 discid 之外,還必須把專輯歌數、每一首歌的長度、專輯播放總時數帶進去,而這個 request 就能夠很快地查詢到對應的專輯名稱

cddb query discid ntrks off1 off2 … nsecs

之後再進一步查詢指定的曲目資訊

cddb read categ discid

所以沒有 nsecs (Total playing length of CD in seconds.),就沒有辦法送出一個有效的 CDDB request 了,所以就算了,我今天晚上就可以看 HBO 播的 Music and Lyrics,然後明天又要上班了(死)。

音樂格式的標籤(tag)與編碼

CDs

id3v1: ISO-8859-1
id3v2.3.0: ISO-8859-1, UTF-16 (with BOM)
id3v2.4.0: ISO-8859-1, UTF-16 (with or without BOM), UTF-8
APEv2: UTF-8
Vorbis comment: UTF-8

根據 ID3.org 的說明,目前對 ID3 tag 支援較廣的版本是 ID3v2.3.0,從這版開始,至少我們多了 UTF-16 的支援。但是那些只有 ID3v1 的 mp3 呢?這實在一個令人頭大的問題。

剛剛稍微找了一下,發現了「Linux下mp3标签乱码问题的分析和解决」與「对 mp3 乱码问题的分析和解决」這兩篇文章,他們也提供了幾種方法,可以把幫你把討厭的 ID3v1 標籤移除,加上支援 Unicode 的 ID3v2 和 APEv2。

那事情就這樣結束了嗎?並不完全是,許許多多的情況下我們會看見 ape 以及一個 cue 檔,這個 cue 檔紀錄歌曲名稱、長度、歌手等 meta data,但是這個 cue 檔也是另外一個編碼格式不明的灰色地帶。就算使用支援度相當好的 foobar2000 也不可免俗的會遇到這個問題,只要 foobar2000 讀取的 cue 檔沒有 BOM,他就會以 ISO-8859-1(還是 CP_ACP 啊)將相關的資訊存回去。這時候,只要乖乖的加上 BOM,一切就天下太平。

也許明天我該來寫一個簡單的程式,把 cue 檔的資訊拿去 freedb 查詢之後,以加上 BOM 的 UTF-8 格式存回去。

這也許是我為什麼喜歡用 FLAC 勝過其他的格式,FLAC 就很單純的使用 Vorbis Comment,沒有別的編碼方法,就是 UTF-8。要帶出門的話,直接丟進 iaudio 系列的隨身聽就好,以後移到別的系統也不會有問題。

不過,iaudio 的隨身聽還真是貴啊~~~~~。

以 LaTeX CJK UTF-8 撰寫論文

由於一些不得已的因素,所以我的碩士論文是用中文寫的,而受到 yhsung 還有小豆的大力推薦下,我也決定用 LaTeX 來寫碩士論文。雖然我早在八月時分就畢業了,但是因為許多雜務還有偷懶的因素下,這篇會拖到現在才寫也是情非得以的(繼續找藉口)。而這篇文章就當作個紀念,也把一些之前的東西留起來,雖然以後大概也不會寫論文了 XD

我的環境:FreeBSD 7-BETA2,使用 UTF-8 編碼

  1. 安裝 ports 下的 print/latex-cjk:
    由於我想要用 UTF-8 來撰寫,所以記得 make config 一下把 UTF8ARPHIC 這個選項打開,加入之後會用到的字型。
  2. 修改 /usr/local/share/texmf/tex/latex/CJK/UTF8:
    因為我們需要把 chapter 1 換成「第一章」這樣的字眼,所以我們之後會需要 KOMA-script 的幫忙,你可以按照你的格式進行修改,我這邊是這樣改的。

    \newcommand\prechaptername{第}
    \newcommand\postchaptername{章}
    \renewcommand\chapterformat{ \prechaptername\CJKnumber{ \value{chapter} }\postchaptername~~ }

    之後你只需要告訴 LaTeX 我要使用 KOMA-script,他就會幫你做的好好的。

    \documentclass{scrreprt}
    \usepackage{CJKutf8}
    \CJKcaption{zh-Hant}

  3. 修改 Table of Content 的編號:
    上面那個步驟並不會影響 Table Of Content 的章節號碼,他還是會將 chapter 標成 1. 而不是我的想要的「第一章」,這個時候我是使用 titlesec 和 titletoc 這兩個 package,接著你就可以自己來啦,我這邊是這樣寫的。

    % 換索引的 title
    \titlecontents{chapter}
    [0em]
    {}
    {第\CJKnumber{\thecontentslabel}章~~}
    {}{\titlerule*{.}\contentspage}
    \titlecontents{section}
    [4em]
    {}
    {\contentslabel{2em}}
    {}{\titlerule*{.} \contentspage}
    \titlecontents{subsection}
    [8em]
    {}
    {\contentslabel{3em}}
    {}{\titlerule*{.} \contentspage}

  4. 邊界設定:
    我是以交大的規定來做設定,在 preamble 加上這一行就好

    \usepackage[ top=2.5cm,bottom=2.5cm,left=3cm,right=2cm ]{ geometry }

  5. 加入程式碼:
    當然你可以用 \verb 直接丟進去,不過我是用 listings 這個 package ,再使用 \textsf 將字體換成 san-serif 會漂亮一點點。而在搭配 CJK 的時候要特別注意,要記得設定 extendedchars=false,才不會有奇怪的問題。

    目前我的設定是這樣

    \lstset{ %
    language=C++,
    basicstyle=\footnotesize,
    showstringspaces=false,
    numbers=left,
    numberstyle=\footnotesize,
    showspaces=false,
    showtabs=false,
    extendedchars=false,
    }

其他關於 bibtex 還有 ps2eps 等東西我就懶惰寫了,我想我還有很多要學,每次遇到問題的時候也必須好好的看 manual,也好好讀 newsgroup,也許有一天我還會繼續讀 「大家來學 LaTeX」。

btw, 現在 pdflatex 雖然可以正確搜尋中文字,但是中間的英文又找不到了 XD