音声データ(e.g. mp3)とテキスト(text)から, 音声データに対して文字や音素のアラインメント(どの文字/音素がどの時刻に位置するか)をしたい.
この分野のツールのまとめ
Installing and Using the Penn Forced Aligner (P2FA) Chinese
https://congzhanglinguist.wordpress.com/2018/07/30/p2fa_chinese/
HTK(HTS) をベースにするものが多くありますが, HTK はライセンスが微妙 http://htk.eng.cam.ac.uk/docs/license.shtml なので, Montreal Forced Aligner や Gentle を見てみます.
text-to-speech で音声を生成すれば, テキストだけで audio と transcript(台本)を用意することができます.
用語
- HTK : Hiden Markov Model Toolkit http://htk.eng.cam.ac.uk/
- Forced Aligner 強制アライナー?
- Transcript 台本
- Phoneme 音素 https://ja.wikipedia.org/wiki/%E9%9F%B3%E7%B4%A0
- Phone 音, 単音 https://en.wikipedia.org/wiki/Phone_(phonetics)
- Viseme 口形素(音素に対応した口の形状. Visual 的なもの)
- Vowel 母音
- Syllable 音節
- Grapheme 書記素 https://ja.wikipedia.org/wiki/%E6%9B%B8%E8%A8%98%E7%B4%A0
- G2P Grapheme-to-Phoneme
- IPA 国際音声記号 International Phonetic Alphabet https://en.wikipedia.org/wiki/International_Phonetic_Alphabet
- Lexicon : 語彙目録(語彙の辞書)
Montreal Forced Aligner
音声認識ツールキット Kaldi http://kaldi-asr.org/doc/about.html をベースにしている.
Windows バイナリなどがあってとりあえず動かせて楽で良いですが, 使い方にくせがあります.
結果は TextGrid 形式で出力されます. GUI があるっぽい?
アラインは以下のようにする.
bin/mfa_align /path/to/input /path/to/librispeech/lexicon.txt english /path/to/output_aligned
.wav などファイルを個別で指定はできず, フォルダ単位でのバッチ処理になるので注意.
.lab(台本を大文字アルファベットだけなどで構成したもの)が必要.
出力フォルダはすでに存在するディレクトリを指定するとエラーになります.
面倒ですが, 毎回出力フォルダは存在しないディレクトリを指定する必要があります(もしくは mfa_align
の前に毎回出力フォルダを削除するか)
また, wav のサンプリングレートは 44.1k Hz あたりが推奨. 16K とかだと処理中に落ちたりする.
サンプリングレート変換は sox あたりをつかうとよい.
成功すると, .TextGrid
ファイルが生成されます(コンソールでは, 成功したかどうかはレポートしてくれない模様)
oovs_found.txt
アラインメントの検出に失敗すると, .TextGrid
が生成されず, oovs_found.txt などのファイルが生成されます.
(OOV = Out of vocabrary)
辞書にない単語があったり, アルファベット以外の文字(カンマやピリオドなど)の文字が .lab
にあります. .lab
の内容をチェックしましょう.
(とくに, .lab
にはピリオドを含めてはいけないのですが, ピリオドを含めてしまうケースがよくあります)
Gentle
これも Kaldi をベースにしている. Kaldi は Apache 2.0 ライセンスでよい. Gentle も MIT ライセンスでよい.
ツールまとめ
ありがとうございます.
Speech analysis and transcription tools
データセット
- 3D 顔スキャンと音声 Biwi 3D Audiovisual Corpus of Affective Communication - B3D(AC)^2 http://www.vision.ee.ethz.ch/datasets/b3dac2.en.html
TODO
- Picth(抑揚)などの情報も同時に取得できないか?
- とりあえず, 別途 Praat を使えば pitch は取得できるっぽいが http://www.fon.hum.uva.nl/praat/
- Phoneme Recognition using RecNet 試したい https://github.com/joergfranke/phoneme_recognition