天天看點

kaldi檔案格式

kaldi檔案分兩大類:清單表單(.scp結尾)和存檔表單(.ark結尾)。它們是配合的。

清單表單的每個元素占一行,每行分兩個字段,前一個是索引(index),後一個檔案(file)。

audio_index1 /paht/to/audio1.wav
audio_index2 /paht/to/audio2.wav
audio_index3 /paht/to/audio3.wav

但是需要說明一點,“檔案”的本質是一個存儲位址,它可能是在磁盤上,也可能是在記憶體上。還可能是一個二進制檔案某位元組的位置。

要充分了解這點,否則後面遇到具體的用法時會糊塗。

存檔表單,用于存儲資料,可以是文本資料,也可以是二進制資料。

存檔表單的内容是關于索引和資料的組合。在文本型的存檔表單中,每個元素是以\n結尾,它與換行符相同,打開後與清單表單非常相似,但本質上隻是一種巧合。

如下文本存檔表單的内容:

text_index1 this the first text\ntext_index2 this is the second text...

它是一個整體,換行符"\n"本身也是檔案内容的一部分。這是與清單表單是不同的。

對于二進制存檔表單,情況又 不同。它是在索引+空格之後再添加一個\0B符号,資料和索引的分隔标志位,且在真實資料之前還添加了頭<header>,來訓示後續的元素資料的大小,以免讀取錯誤。

binary_indext1 \0B<header><content>binary_index2 \0B<header><content>..

對于聲學特征存檔檔案來說,<header>中可以包含特征的幀數、次元、特征類型、占用位元組數和是否壓縮等等。

Kaldi指令如果需要輸入、輸出時,需要指定rspecifier和wspecifier,就是讀訓示符和寫訓示符。例如compute-mfcc-feats [options...] <wav-rspecifier>  <feats-wspecifier>。而每個訓示符要麼是清單表單相關的scp,p|s|cs:path/to/file.scp,要麼存檔清單相關的ark,t|b:path/to/file.ark。

比較特殊的有兩點,一是,可以從标準輸入或者标準輸入作為檔案,檔案位置用“-”表示,結合管道操作組合變化比較多;二是在輸出時,可以同時制定清單表單和存檔表單兩種方式,以逗号隔開。例如:

ark,scp:/path/to/file.ark, /path/to/file.scp,必須是ark在前,scp在後。

繼續閱讀