字幕檔案規則
為令人員易於除錯以及利於理解方便,廣論App使用SRT(SubRip)檔案格式作為字幕格式,此格式可以簡單的使用文字編輯器開啟、編輯與除錯,時間解析度可達千分之一秒,此字幕檔案可相容於其他支援SRT格式的播放器。
字幕檔案位於資源下載區,廣論App現在已經納入字幕,不需要再動態下載。
字幕編碼規則
廣論App的字幕檔案由字幕編輯器所輸出,字幕文字為最簡單的文字輸出,不包含字形標籤(如<i>Elephant's Dream</i>, <font color="cyan">Some text</font>等),以001A.SRT為例,開頭內容如下:
1 00:00:00,217 --> 00:00:08,162 南無本師釋迦牟尼佛; 2 00:00:08,163 --> 00:00:16,053 南無本師釋迦牟尼佛; 3 00:00:16,054 --> 00:00:24,216 南無本師釋迦牟尼佛; 4 00:00:24,217 --> 00:00:30,547 無上甚深微妙法, 5 00:00:30,548 --> 00:00:36,642 百千萬劫難遭遇, 6 00:00:36,643 --> 00:00:42,701 我今見聞得受持, 7 00:00:42,702 --> 00:00:48,597 願解如來真實義。 8 00:00:48,598 --> 00:00:57,976 今天我們開始修習《菩提道次第廣論》, 9 00:00:57,977 --> 00:01:03,237 這是宗喀巴大師所造的。
字幕編輯器的輸出規則如下所列,請注意下列每一筆資訊皆以換行結尾。
- 輸出數字序列:由1~n的數字序列,除第一筆固定為1外,其餘為上一筆數字+1。
- 輸出時間資訊:[字幕開始時間]+" --> "+[下一筆字幕開始時間-0.001]
- 輸出字幕文字:此文字僅單行輸出。
- 輸出空白行:即每一筆字幕資訊的間格記號。
字幕的文字編碼格式為UTF-8,若使用不支援Unicode Code的文字編輯器開啟會變成亂碼,若將此字幕檔案應用於其他播放器中,必須先檢查該播放器所支援的字幕編碼是否為UTF-8,已知如KMPlayer不支援UTF-8格式字幕編碼,要在這類的播放器使用必須先將編碼重新輸出為Big5或GB編碼。
字幕解碼規則
由上述編碼規則可瞭解,除(1)數字序列外,有用的資訊為字幕開始時間、結束時間與字幕文字三項,廣論App在解碼字幕檔案時,不使用數字序列,僅取字幕開始時間、結束時間與字幕文字三項資訊,儲存於資料結構SubtitleElement中,依序將整個檔案的資料取出後取出後存入陣列中(SubtitleElement的陣列),字幕在陣列中的位置即為數字序列相關的資訊。
在程式中,字幕檔案的解讀由 eyes.blue.Util.loadSubtitle 所處理,有興趣可研讀該程式碼以瞭解詳細執行過程。
使用者與廣論App的互動過程中,或許會拉動進度條或點選上一句/下一句的按鈕,當發生這類的事件時,廣論App必須根據進度條上面的時間去SubtitleElement陣列中查找相對應的字幕來顯示,這類以時間去查找相對應的字幕的方法,末學使用二元搜尋法(Binary Search)來降低搜尋時間,該函式位於eyes.blue.Util.subtitleBSearch中,研讀前您可能需要先了解Divide and Conquer演算法。