Julius音素セグメンテーションキットとは
wavファイルとtxtファイルを用意してsegmentation-kitを実行することで、言葉の音素がどのタイミングで発せられているのかをミリ秒で出力してくれます。詳細は下記をご覧ください。
WAVファイルのフォーマット次第では動かない
当初はとりあえずwav形式の音声ファイルならどんなものでも動くと思っていたのですが、たまに出力が空になる現象に遭遇しました。エラーなども出ていなかったため、少し詰まりました。しかしlabファイルと同時に生成されるlogファイルの中身をよく見てみると、Error: adin_sndfile: invalid format
といったエラーがはかれていました。ファイルのフォーマットが違うということで改めてjulius-speech/segmentation-kitのREADMEを見に行くと、次の内容が記載されていました。
音声ファイルは WAV形式で 16kHz, 16bit, PCM(無圧縮)形式である必要があり ます。テキストファイルはテキスト形式で、文字コードは UTF-8です。
つまり使えるフォーマットが決まっており、それに対応する必要があるということでした。ちゃんとドキュメントを熟読してから使わないと思わぬ時間を取られてしまうという例でした。
変換コード
以上よりJuliusに対応するフォーマットにwavファイルを変換しましょう。変換後のwavファイルを用いて実行すれば問題なく動きます。librosa.core.load
のsr
はサンプリングレートのことであり、 16000
Hzに指定します。そして出力の際にsubtype
をPCM_16
とすることで量子化bit数を16bitにする事ができます。
import librosa
import soundfile as sf
y, sr = librosa.core.load('sample.wav', sr=16000, mono=True)
sf.write("new_sample.wav", y, sr, subtype="PCM_16")
参考文献
この記事は以下の情報を参考にして執筆しました。