Table of Contents
HTK と SPTK で MFCC を計算する方法です。 コマンドはコピーするだけなので簡単ですが、ここへたどり着くまでの道のりが険しかったです。
HTK
HTK で MFCC を計算するには HCopy と HList が使えます。 私の場合は HList があれば十分でした、
これらを使うことで、 39次元の MFCC 、 正確には MFCC, Power, ΔMFCC, ΔPower, ΔΔMFCC, ΔΔPower が出力できます。
config
HTK で wav ファイル から MFCC を計算する場合、 計算の基礎となるパラメータを config
ファイル で設定できます。 設定しなくても使うことはできます。
以下がconfig
ファイルの例です。
HCopy
HCopy
は Wave(.wav)ファイル から MFCC を計算できます。 計算された値はファイルに書き込まれます。
上のコードにより、 sample.mfc
という、 MFCCデータの入ったファイルが作成されます。 HTK が定める形式のバイナリファイルです。
出力ファイルのフォーマットは、調べましたが私では読み解くことができませんでした。
HList
HList
は HCopy
によって作成された MFCCファイル を解析・表示できます。 また、 HList
単体でも Wave(.wav) から MFCC を計算できます。
- MFCCファイルを表示
HCopy
によって出力された内容を表示する方法です。標準出力に表示されます。 ファイルに保存する場合はリダイレクトを使います。
- MFCCを計算して表示
-
config.txt
はHCopy
で使用するものと同じファイルです。
使いそうなパラメータ
- -s N
表示を開始するサンプルデータの番号。 デフォルトで 0。
- -e N
表示を終了するサンプルデータの番号。 デフォルトで 0。
その他のオプションは HList
を引数なしで実行すると表示されます。
SPTK
SPTK でも Wave(.wav) から MFCC(12次元) を計算できます。 mfcc
コマンドで、 MFCC と Power を出力できます。 delta
コマンドでデルタを計算できますが、試してはいません。
オプションにこだわらないでシンプルにしたコードが次のコードです。
これで MFCC のファイルが作成されます。 作成されたファイルのフォーマットは バイナリ形式で float
の値を詰めた形です。
出力されたファイルを たとえば C++ で見ようとした場合次のようなコードで読み込みます。 (Qt 使っていますが、 重要なのはそこではなく、 fread
のところです。)
Python だと struct.unpack
を用いて値を展開することができます。