字幕檔案規則

為令人員易於除錯以及利於理解方便,廣論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. 輸出數字序列:由1~n的數字序列,除第一筆固定為1外,其餘為上一筆數字+1。
  2. 輸出時間資訊:[字幕開始時間]+" --> "+[下一筆字幕開始時間-0.001]
  3. 輸出字幕文字:此文字僅單行輸出。
  4. 輸出空白行:即每一筆字幕資訊的間格記號。

字幕的文字編碼格式為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演算法。