From 1ba2daf84786aa974dc66e6afe9bc32d8692e4f5 Mon Sep 17 00:00:00 2001 From: Cardroid Date: Sun, 16 Oct 2022 19:02:15 +0900 Subject: [PATCH 1/2] Feat: Apply existing changes --- .gitignore | 29 +- README.md | 52 +- run.bat | 1 + run_resf0.bat | 1 + run_vocoder.bat | 1 + source/dic/.gitkeep | 0 source/dic/hangul_ext.table | 460 +++++++++++++++++ source/hed/.gitkeep | 0 source/hed/korean_question_v2.1.hed | 350 +++++++++++++ source/singing_database/.gitkeep | 0 train/conf/LICENSE.md | 37 -- .../hn-sinc-nsf_sr44k_pwgD.yaml | 134 +++++ train/conf/train/acoustic/data/myconfig.yaml | 32 +- .../train/acoustic/data/myconfig_rmdn.yaml | 16 - .../train/acoustic/model/acoustic_conv.yaml | 15 - .../train/acoustic/model/acoustic_custom.yaml | 33 ++ .../train/acoustic/model/acoustic_rmdn.yaml | 17 - train/conf/train/acoustic/train/myconfig.yaml | 55 ++- ...fig_RAdam_CosineAnnealingWarmRestarts.yaml | 31 -- .../acoustic/train/myconfig_RAdam_StepLR.yaml | 30 -- .../train/myconfig_RAdam_StepLR_2nd.yaml | 30 -- train/conf/train/duration/data/myconfig.yaml | 20 +- .../train/duration/data/myconfig_rmdn.yaml | 16 - .../train/duration/model/duration_custom.yaml | 14 + .../train/duration/model/duration_lstm.yaml | 14 - .../train/duration/model/duration_rmdn.yaml | 15 - train/conf/train/duration/train/myconfig.yaml | 39 +- ...fig_RAdam_CosineAnnealingWarmRestarts.yaml | 31 -- .../duration/train/myconfig_RAdam_StepLR.yaml | 30 -- .../train/myconfig_RAdam_StepLR_2nd.yaml | 30 -- .../conf/train/postfilter/data/bap_data.yaml | 31 ++ .../conf/train/postfilter/data/mgc_data.yaml | 31 ++ .../conf/train/postfilter/data/myconfig.yaml | 31 ++ .../conf/train/postfilter/model/myconfig.yaml | 39 ++ .../postfilter/model/postfilter_bap.yaml | 35 ++ .../postfilter/model/postfilter_mgc.yaml | 35 ++ train/conf/train/postfilter/train/bap.yaml | 71 +++ .../train/postfilter/train/bap_cycle.yaml | 74 +++ train/conf/train/postfilter/train/mgc.yaml | 69 +++ .../train/postfilter/train/mgc_cycle.yaml | 74 +++ .../conf/train/postfilter/train/myconfig.yaml | 71 +++ train/conf/train/timelag/data/myconfig.yaml | 20 +- .../train/timelag/data/myconfig_rmdn.yaml | 16 - .../train/timelag/model/timelag_custom.yaml | 14 + .../conf/train/timelag/model/timelag_ffn.yaml | 13 - .../train/timelag/model/timelag_rmdn.yaml | 15 - train/conf/train/timelag/train/myconfig.yaml | 39 +- ...fig_RAdam_CosineAnnealingWarmRestarts.yaml | 31 -- .../timelag/train/myconfig_RAdam_StepLR.yaml | 30 -- .../train/myconfig_RAdam_StepLR_2nd.yaml | 30 -- train/config.yaml | 87 ++-- train/config_rmdn.yaml | 97 ---- train/dic/README.md | 13 - train/dic/kana2phonemes_001_oto2lab.table | 338 ------------- train/dic/kana2phonemes_002_oto2lab.table | 382 -------------- train/enuconfig.yaml | 40 +- train/hed/LICENSE.md | 55 --- train/hed/README.md | 32 -- train/hed/jp_qst001_nnsvs.hed | 465 ------------------ train/hed/jp_qst002_nnsvs.hed | 402 --------------- train/hed/jp_qst003_nnsvs.hed | 336 ------------- .../hed/jp_qst_crazy_mono_007_enunu_173D.hed | 189 ------- .../hed/jp_qst_crazy_mono_010_enunu_209D.hed | 227 --------- .../hed/jp_qst_crazy_mono_011_enunu_194D.hed | 212 -------- .../hed/jp_qst_crazy_mono_012_enunu_212D.hed | 230 --------- .../hed/jp_qst_crazy_mono_013_enunu_221D.hed | 239 --------- .../jp_qst_crazy_mono_014_enunu_mdn_206D.hed | 220 --------- .../jp_qst_crazy_mono_015_enunu_mdn_209D.hed | 223 --------- train/install_pytorch_for_CPU.bat | 6 - train/install_pytorch_for_CUDA102.bat | 6 - train/install_pytorch_for_CUDA113.bat | 6 - .../nnsvs_shell_scripts/feature_generation.sh | 77 --- train/nnsvs_shell_scripts/generate.sh | 49 -- train/nnsvs_shell_scripts/train_acoustic.sh | 50 -- train/nnsvs_shell_scripts/train_duration.sh | 48 -- train/nnsvs_shell_scripts/train_timelag.sh | 48 -- train/nnsvs_shell_scripts/yaml_parser.sh | 43 -- train/prepare_release.py | 50 +- train/preprocess_data.py | 6 +- train/run.bat | 2 - train/run.sh | 177 +++++-- train/run_resf0.sh | 286 +++++++++++ train/run_rmdn.bat | 2 - train/run_rmdn.sh | 231 --------- train/run_vocoder.sh | 103 ++++ train/scripts/extract_static_scaler.py | 52 ++ train/scripts/feature_generation.sh | 67 +++ train/scripts/generate.sh | 22 + train/scripts/merge_postfilters.py | 55 +++ .../parse_options.sh | 7 +- train/scripts/prepare_postfilter.sh | 67 +++ train/scripts/prepare_voc_features.sh | 38 ++ train/scripts/scaler_joblib2npy.py | 45 ++ train/scripts/scaler_joblib2npy_voc.py | 86 ++++ .../synthesis.sh | 43 +- train/scripts/train_acoustic.sh | 33 ++ train/scripts/train_acoustic_resf0.sh | 35 ++ train/scripts/train_duration.sh | 34 ++ train/scripts/train_postfilter.sh | 44 ++ train/scripts/train_timelag.sh | 34 ++ train/scripts/yaml_parser.sh | 19 + train/stage0/segment_lab.py | 71 ++- 102 files changed, 3080 insertions(+), 4951 deletions(-) create mode 100644 run.bat create mode 100644 run_resf0.bat create mode 100644 run_vocoder.bat create mode 100644 source/dic/.gitkeep create mode 100644 source/dic/hangul_ext.table create mode 100644 source/hed/.gitkeep create mode 100644 source/hed/korean_question_v2.1.hed create mode 100644 source/singing_database/.gitkeep delete mode 100644 train/conf/LICENSE.md create mode 100644 train/conf/parallel_wavegan/hn-sinc-nsf_sr44k_pwgD.yaml delete mode 100644 train/conf/train/acoustic/data/myconfig_rmdn.yaml delete mode 100644 train/conf/train/acoustic/model/acoustic_conv.yaml create mode 100644 train/conf/train/acoustic/model/acoustic_custom.yaml delete mode 100644 train/conf/train/acoustic/model/acoustic_rmdn.yaml delete mode 100644 train/conf/train/acoustic/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml delete mode 100644 train/conf/train/acoustic/train/myconfig_RAdam_StepLR.yaml delete mode 100644 train/conf/train/acoustic/train/myconfig_RAdam_StepLR_2nd.yaml delete mode 100644 train/conf/train/duration/data/myconfig_rmdn.yaml create mode 100644 train/conf/train/duration/model/duration_custom.yaml delete mode 100644 train/conf/train/duration/model/duration_lstm.yaml delete mode 100644 train/conf/train/duration/model/duration_rmdn.yaml delete mode 100644 train/conf/train/duration/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml delete mode 100644 train/conf/train/duration/train/myconfig_RAdam_StepLR.yaml delete mode 100644 train/conf/train/duration/train/myconfig_RAdam_StepLR_2nd.yaml create mode 100644 train/conf/train/postfilter/data/bap_data.yaml create mode 100644 train/conf/train/postfilter/data/mgc_data.yaml create mode 100644 train/conf/train/postfilter/data/myconfig.yaml create mode 100644 train/conf/train/postfilter/model/myconfig.yaml create mode 100644 train/conf/train/postfilter/model/postfilter_bap.yaml create mode 100644 train/conf/train/postfilter/model/postfilter_mgc.yaml create mode 100644 train/conf/train/postfilter/train/bap.yaml create mode 100644 train/conf/train/postfilter/train/bap_cycle.yaml create mode 100644 train/conf/train/postfilter/train/mgc.yaml create mode 100644 train/conf/train/postfilter/train/mgc_cycle.yaml create mode 100644 train/conf/train/postfilter/train/myconfig.yaml delete mode 100644 train/conf/train/timelag/data/myconfig_rmdn.yaml create mode 100644 train/conf/train/timelag/model/timelag_custom.yaml delete mode 100644 train/conf/train/timelag/model/timelag_ffn.yaml delete mode 100644 train/conf/train/timelag/model/timelag_rmdn.yaml delete mode 100644 train/conf/train/timelag/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml delete mode 100644 train/conf/train/timelag/train/myconfig_RAdam_StepLR.yaml delete mode 100644 train/conf/train/timelag/train/myconfig_RAdam_StepLR_2nd.yaml delete mode 100644 train/config_rmdn.yaml delete mode 100644 train/dic/README.md delete mode 100644 train/dic/kana2phonemes_001_oto2lab.table delete mode 100644 train/dic/kana2phonemes_002_oto2lab.table delete mode 100644 train/hed/LICENSE.md delete mode 100644 train/hed/README.md delete mode 100644 train/hed/jp_qst001_nnsvs.hed delete mode 100644 train/hed/jp_qst002_nnsvs.hed delete mode 100644 train/hed/jp_qst003_nnsvs.hed delete mode 100644 train/hed/jp_qst_crazy_mono_007_enunu_173D.hed delete mode 100644 train/hed/jp_qst_crazy_mono_010_enunu_209D.hed delete mode 100644 train/hed/jp_qst_crazy_mono_011_enunu_194D.hed delete mode 100644 train/hed/jp_qst_crazy_mono_012_enunu_212D.hed delete mode 100644 train/hed/jp_qst_crazy_mono_013_enunu_221D.hed delete mode 100644 train/hed/jp_qst_crazy_mono_014_enunu_mdn_206D.hed delete mode 100644 train/hed/jp_qst_crazy_mono_015_enunu_mdn_209D.hed delete mode 100644 train/install_pytorch_for_CPU.bat delete mode 100644 train/install_pytorch_for_CUDA102.bat delete mode 100644 train/install_pytorch_for_CUDA113.bat delete mode 100644 train/nnsvs_shell_scripts/feature_generation.sh delete mode 100644 train/nnsvs_shell_scripts/generate.sh delete mode 100644 train/nnsvs_shell_scripts/train_acoustic.sh delete mode 100644 train/nnsvs_shell_scripts/train_duration.sh delete mode 100644 train/nnsvs_shell_scripts/train_timelag.sh delete mode 100644 train/nnsvs_shell_scripts/yaml_parser.sh delete mode 100644 train/run.bat create mode 100644 train/run_resf0.sh delete mode 100644 train/run_rmdn.bat delete mode 100644 train/run_rmdn.sh create mode 100644 train/run_vocoder.sh create mode 100644 train/scripts/extract_static_scaler.py create mode 100644 train/scripts/feature_generation.sh create mode 100644 train/scripts/generate.sh create mode 100644 train/scripts/merge_postfilters.py rename train/{nnsvs_shell_scripts => scripts}/parse_options.sh (95%) create mode 100644 train/scripts/prepare_postfilter.sh create mode 100644 train/scripts/prepare_voc_features.sh create mode 100644 train/scripts/scaler_joblib2npy.py create mode 100644 train/scripts/scaler_joblib2npy_voc.py rename train/{nnsvs_shell_scripts => scripts}/synthesis.sh (51%) create mode 100644 train/scripts/train_acoustic.sh create mode 100644 train/scripts/train_acoustic_resf0.sh create mode 100644 train/scripts/train_duration.sh create mode 100644 train/scripts/train_postfilter.sh create mode 100644 train/scripts/train_timelag.sh create mode 100644 train/scripts/yaml_parser.sh diff --git a/.gitignore b/.gitignore index e110c34..04ce408 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,33 @@ +ETK_python +/tensorboard* +/source/* +!/source/dic +/source/dic/* +!/source/dic/.gitkeep +!/source/hed +/source/hed/* +!/source/hed/.gitkeep +!/source/singing_database +/source/singing_database/* +!/source/singing_database/.gitkeep +/target* +/train/conf/prepare_features.old +/train/backup +/outputs +/model_exp +/venv-start.ps1 +/release +/release_Storage +/z_* + +!/source/dic/hangul_ext.table +!/source/hed/korean_question_v2.1.hed + __pycache__ nnsvs -singing_database + +*.old +*.old.* *.ini *.lab diff --git a/README.md b/README.md index b8f0590..1f41027 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,17 @@ # ENUNU Training Kit -USTとLABとWAVがあれば楽にモデル生成できます。 +### Fork of the ENUNU Training Kit (ETK) for the DYVAUX notebooks. +May not work for local training. -## 用途 +With UST, LAB, and WAV, you can easily generate models. -UST ファイルが同梱されている歌唱データベースから、[ENUNU](https://github.com/oatsu-gh/ENUNU) 用の歌声モデルを生成します。 +## Purpose -## 動作環境 +Generate singing voice models for [ENUNU](https://github.com/oatsu-gh/ENUNU) from the singing database bundled with UST files. -- Windows 10 +## Requirements -## 必要なもの - -- 歌唱データベース +- Singing dataset - UST - LAB - WAV - -## 使い方 - -1. フォルダ "train" を開きます。 -2. **install_pytorch_for_CPU.bat** をダブルクリックします。CUDA 環境がある場合は、代わりに **install_pytorch_for_CUDA102.bat** または **install_pytorch_for_CUDA113.bat** をダブルクリックします。 (初回のみ) -3. フォルダ "singing_database" に、学習させたい歌唱データベースを丸ごと入れます。音声は **16bit/44.1kHz** にしておくこと。 -4. run.bat または run_rmdn.bat をダブルクリックします。 -5. 待ちます。学習データが多いほど時間がかかります。 (波音リツDBを使うと、i7-7700 + GTX1070 で実行した場合、通常モデルは1時間くらい、RMDNのほうは10時間くらいかかります。) -6. release フォルダの中に unnamed_--- というフォルダができるので、フォルダ名を変更してください。 -7. 名前を変更したフォルダに、readme.txt と character.txt と 空の oto.ini を入れてください。 -8. 名前を変更したフォルダを、UTAU の voice フォルダに入れたら完成です。 - -## 更新履歴 - -- v0.0.1 (2021-06-13) - - 学習キット試作 -- v0.0.2 (2021-06-14) - - hedファイルを差し替えて母音無声化に対応 - - enuconfigなどの編集を不要にした -- v0.0.3 (2021-06-27) - - train/conf/prepare_features のフォルダを作成し、myconfig でオーバーライドできるようにした。 - - train/conf/train 以下の各モデルのフォルダに myconfig がないのを修正 -- v0.1.0 (2021-06-27) - - train/conf/prepare_features のフォルダを削除 - - ステージ7としてリリース用フォルダ作成機能を追加 - - ステージ0で無限ル―プすることがある不具合を修正 - - 5ms 未満の音素でエラーが出ないようにする機能を追加 - - どこのステージを実行中か分かりやすくした -- v0.1.1 (2021-07-21) - - ステージ7が実行されない不具合を修正 - - ステージ0で、LABファイル中の最後の休符の終了時刻を、USTの休符終了時刻に合わせる機能を追加 - - natsort がインストールされない不具合を修正 -- v0.2.0 (2021-09-17) - - DBチェック機能を強化([ENUNU/train](https://github.com/oatsu-gh/ENUNU/tree/main/train) から複製) -- v1.0.0 (2021-11-03) - - Python Embeddable + Portable Git をポータブル環境にした。([ENUNU/train](https://github.com/oatsu-gh/ENUNU/tree/main/train) から複製) - - LICENSE を GPL 2 に変更 diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..148a13b --- /dev/null +++ b/run.bat @@ -0,0 +1 @@ +"C:\Program Files\Git\bin\bash.exe" train\run.sh --stage %1 --stop_stage %2 \ No newline at end of file diff --git a/run_resf0.bat b/run_resf0.bat new file mode 100644 index 0000000..87050f4 --- /dev/null +++ b/run_resf0.bat @@ -0,0 +1 @@ +"C:\Program Files\Git\bin\bash.exe" train\run_resf0.sh --stage %1 --stop_stage %2 \ No newline at end of file diff --git a/run_vocoder.bat b/run_vocoder.bat new file mode 100644 index 0000000..bf358c2 --- /dev/null +++ b/run_vocoder.bat @@ -0,0 +1 @@ +"C:\Program Files\Git\bin\bash.exe" train\run_vocoder.sh --stage %1 --stop_stage %2 \ No newline at end of file diff --git a/source/dic/.gitkeep b/source/dic/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/source/dic/hangul_ext.table b/source/dic/hangul_ext.table new file mode 100644 index 0000000..174983f --- /dev/null +++ b/source/dic/hangul_ext.table @@ -0,0 +1,460 @@ +R pau +pau pau +sil sil +br br +: vf +Edge vf +edge vf +vf vf +~ exh +exh exh +trash trash +g g +n n +d d +r r +l l +m m +b b +s s +j j +ch ch +k k +t t +p p +h h +kk kk +tt tt +pp pp +ss ss +jj jj +K K +T T +P P +N N +RR RR +L L +M M +NG NG +a a +eo eo +o o +u u +eu eu +i i +e e +y y +w w +ア a +あ a +イ i +い i +いぇ y e +ウ u +う u +ヴ b u +ヴァ b a +ヴぁ b a +ウィ w i +うぃ w i +ヴぃ b i +ヴゥ b u +ヴぅ b u +ウェ w e +うぇ w e +ヴェ b e +ヴぇ b e +ウォ w o +うぉ w o +ヴォ b o +ヴぉ b o +エ e +え e +オ o +お o +カ k a +か k a +ガ g a +が g a +キ k i +き k i +ギ g i +ぎ g i +キェ k y e +きぇ k y e +ギェ g y e +ぎぇ g y e +キャ k y a +きゃ k y a +ギャ g y a +ぎゃ g y a +キュ k y u +きゅ k y u +ギュ g y u +ぎゅ g y u +キョ k y o +きょ k y o +ギョ g y o +ぎょ g y o +ク k u +く k u +グ g u +ぐ g u +クァ k w a +くぁ k w a +グァ g w a +ぐぁ g w a +クィ k w i +くぃ k w i +グィ g w i +ぐぃ g w i +クゥ k w u +くぅ k w u +グゥ g w u +ぐぅ g w u +クェ k w e +くぇ k w e +グェ g w e +ぐぇ g w e +クォ k w o +くぉ k w o +グォ g w o +ぐぉ g w o +グヮ g w a +ぐゎ g w a +ケ k e +け k e +ゲ g e +げ g e +コ k o +こ k o +ゴ g o +ご g o +サ s a +さ s a +ザ j a +ざ j a +シ s i +し s i +ジ j i +じ j i +シィ s i +しぃ s i +シェ s e +しぇ s e +ジェ j e +じぇ j e +シャ s a +しゃ s a +ジャ j a +じゃ j a +シュ s u +しゅ s u +ジュ j u +じゅ j u +ショ s o +しょ s o +ジョ j o +じょ j o +ス s u +す s u +ズ j u +ず j u +スィ s i +すぃ s i +ズィ j i +ずぃ j i +セ s e +せ s e +ゼ j e +ぜ j e +ソ s o +そ s o +ゾ j o +ぞ j o +タ t a +た t a +ダ d a +だ d a +チ ch i +ち ch i +チェ ch e +ちぇ ch e +チャ ch a +ちゃ ch a +ヂャ j a +ぢゃ j a +チュ ch u +ちゅ ch u +チョ ch o +ちょ ch o +ッ cl +っ cl +ツ ch u +つ ch u +ヅ j u +づ j u +ツァ ch a +つぁ ch a +ヅァ j a +ツィ ch i +つぃ ch i +ヅィ j i +づぃ j i +ツェ ch e +つぇ ch e +ヅェ j e +づぇ j e +ツォ ch o +つぉ ch o +ヅォ j o +づぉ j o +テ t e +て t e +デ d e +で d e +ティ t i +てぃ t i +ディ d i +でぃ d i +でぇ d y e +テャ t y a +てゃ t y a +デャ d y a +でゃ d y a +テュ t y u +てゅ t y u +デュ d y u +でゅ d y u +テョ t y o +てょ t y o +デョ d y o +でょ d y o +ト t o +と t o +ド d o +ど d o +トゥ t u +とぅ t u +ドゥ d u +どぅ d u +ナ n a +な n a +ニ n i +に n i +ニェ n y e +にぇ n y e +ニャ n y a +にゃ n y a +ニュ n y u +にゅ n y u +ニョ n y o +にょ n y o +ヌ n u +ぬ n u +ネ n e +ね n e +ノ n o +の n o +ハ h a +は h a +バ b a +ば b a +パ p a +ぱ p a +ヒ h i +ひ h i +ビ b i +び b i +ピ p i +ぴ p i +ヒェ h y e +ひぇ h y e +ビェ b y e +びぇ b y e +ピェ p y e +ぴぇ p y e +ヒャ h y a +ひゃ h y a +ビャ b y a +びゃ b y a +ピャ p y a +ぴゃ p y a +ヒュ h y u +ひゅ h y u +ビュ b y u +びゅ b y u +ピュ p y u +ぴゅ p y u +ヒョ h y o +ひょ h y o +ビョ b y o +びょ b y o +ピョ p y o +ぴょ p y o +フ p u +ふ p u +ブ b u +ぶ b u +プ p u +ぷ p u +ファ p a +ふぁ p a +フィ p i +ふぃ p i +フェ p e +ふぇ p e +フォ p o +ふぉ p o +ヘ h e +へ h e +べ b e +ペ p e +ぺ p e +ホ h o +ほ h o +ボ B o +ぼ b o +ポ p o +ぽ p o +マ m a +ま m a +ミ m i +み m i +ミェ m y e +みぇ m y e +ミャ m y a +みゃ m y a +ミュ m y u +みゅ m y u +ミョ m y o +みょ m y o +ム m u +む m u +メ m e +め m e +モ m o +も m o +ヤ y a +や y a +ユ y u +ゆ y u +ヨ y o +よ y o +ラ r a +ら r a +リ r i +り r i +りぇ r y e +りゃ r y a +りゅ r y u +りょ r y o +ル r u +る r u +レ r e +れ r e +ロ r o +ろ r o +ワ w a +わ w a +ヰ i +ゐ i +ヱ e +ゑ e +ヲ o +を o +ン N +ん N +フャ h y a +ふゃ h y a +フュ h y u +ふゅ h y u +フィェ h y e +ふぃぇ h y e +フョ h y o +ふょ h y o +ヴゃ b y a +ヴゅ b y u +ヴュ b y u +ヴぃぇ b y e +ヴょ b y o +うぅ w u +ウゥ w u +てぇ t y e +テェ t y e +てぃぇ t y e +ティェ t y e +ぢ j i +ヂ j i +ぢゅ j u +ヂュ j u +ぢぇ j e +ヂェ j e +ぢょ j o +ヂョ j o +’あ vf a +’ア vf a +’い vf i +’イ vf i +’う vf u +’ウ vf u +’え vf e +’エ vf e +’お vf o +’オ vf o +’ん vf N +あ’ vf a +ア’ vf a +い’ vf i +イ’ vf i +う’ vf u +ウ’ vf u +え’ vf e +エ’ vf e +お’ vf o +オ’ vf o +ん’ vf N +'あ vf a +'ア vf a +'い vf i +'イ vf i +'う vf u +'ウ vf u +'え vf e +'エ vf e +'お vf o +'オ vf o +'ん vf N +あ' vf a +ア' vf a +い' vf i +イ' vf i +う' vf u +ウ' vf u +え' vf e +エ' vf e +お' vf o +オ' vf o +ん' vf N ++あ vf a ++ア vf a ++い vf i ++イ vf i ++う vf u ++ウ vf u ++え vf e ++エ vf e ++お vf o ++オ vf o ++ん vf N +あ+ a vf +ア+ a vf +い+ i vf +イ+ i vf +う+ u vf +ウ+ u vf +え+ e vf +エ+ e vf +お+ o vf +オ+ o vf +ん+ N vf \ No newline at end of file diff --git a/source/hed/.gitkeep b/source/hed/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/source/hed/korean_question_v2.1.hed b/source/hed/korean_question_v2.1.hed new file mode 100644 index 0000000..3ca1332 --- /dev/null +++ b/source/hed/korean_question_v2.1.hed @@ -0,0 +1,350 @@ +# feature dim: 282 for acoustic model, 278 for duration/timelag +# in_rest_idx: 15 +# in_lf0_idx: 233 + + +# The following was copied from the "intunist/nnsvs-english-support" hed +# tone flags +QS "falsetto" {*^F_*} +QS "head_voice" {*^H_*} +QS "soft" {*^SF_*} +QS "strong" {*^ST_*} +QS "open_wide_vowel" {*^OPN_*} +QS "closed_narrow_vowel" {*^CLS_*} +QS "whisper_devoiced" {*^W_*} +QS "bright_resonance" {*^BR_*} +QS "dark_resonance" {*^DR_*} +QS "fry_rattle" {*^R_*} +QS "nasal_resonance" {*^N_*} +# custom flags +QS "additional_1" {*^1_*} +QS "additional_2" {*^2_*} +QS "additional_3" {*^3_*} + + +# Phonetic definitions + +QS "L-Silence" {*^pau-*,*^sil-*,*^br-*} +QS "C-Silence" {*-pau+*,*-sil+*,*-br+*} +QS "R-Silence" {*+pau=*,*+sil=*,*+br=*} + +QS "L-Phone_Consonant_Yangsuneum" {*^b-*,*^pp-*,*^p-*,*^P-*,*^m-*,*^M-*} +QS "C-Phone_Consonant_Yangsuneum" {*-b+*,*-pp+*,*-p+*,*-P+*,*-m+*,*-M+*} +QS "R-Phone_Consonant_Yangsuneum" {*+b=*,*+pp=*,*+p=*,*+P=*,*+m=*,*+M=*} + +QS "L-Phone_Consonant_Chijoeum" {*^d-*,*^tt-*,*^t-*,*^s-*,*^ss-*,*^n-*,*^N-*,*^r-*,*^l-*,*^RR-*,*^L-*,*^T-*} +QS "C-Phone_Consonant_Chijoeum" {*-d+*,*-tt+*,*-t+*,*-s+*,*-ss+*,*-n+*,*-N+*,*-r+*,*-l+*,*-RR+*,*-L+*,*-T+*} +QS "R-Phone_Consonant_Chijoeum" {*+d=*,*+tt=*,*+t=*,*+s=*,*+ss=*,*+n=*,*+N=*,*+r=*,*+l=*,*+RR=*,*+L=*,*+T=*} + +QS "L-Phone_Consonant_Gyeonggugaeeum" {*^j-*,*^jj-*,*^ch-*} +QS "C-Phone_Consonant_Gyeonggugaeeum" {*-j+*,*-jj+*,*-ch+*} +QS "R-Phone_Consonant_Gyeonggugaeeum" {*+j=*,*+jj=*,*+ch=*} + +QS "L-Phone_Consonant_Yeongugaeeum" {*^g-*,*^kk-*,*^k-*,*^K-*,*^NG-*} +QS "C-Phone_Consonant_Yeongugaeeum" {*-g+*,*-kk+*,*-k+*,*-K+*,*-NG+*} +QS "R-Phone_Consonant_Yeongugaeeum" {*+g=*,*+kk=*,*+k=*,*+K=*,*+NG=*} + +QS "L-Phone_Consonant_Jangaeeum_Payeoreum_Pyeongeum" {*^b-*,*^d-*,*^g-*,*^P-*,*^T-*,*^K-*} +QS "C-Phone_Consonant_Jangaeeum_Payeoreum_Pyeongeum" {*-b+*,*-d+*,*-g+*,*-P+*,*-T+*,*-K+*} +QS "R-Phone_Consonant_Jangaeeum_Payeoreum_Pyeongeum" {*+b=*,*+d=*,*+g=*,*+P=*,*+T=*,*+K=*} + +QS "L-Phone_Consonant_Jangaeeum_Payeoreum_Gyeongeum" {*^pp-*,*^tt-*,*^kk-*} +QS "C-Phone_Consonant_Jangaeeum_Payeoreum_Gyeongeum" {*-pp+*,*-tt+*,*-kk+*} +QS "R-Phone_Consonant_Jangaeeum_Payeoreum_Gyeongeum" {*+pp=*,*+tt=*,*+kk=*} + +QS "L-Phone_Consonant_Jangaeeum_Payeoreum_Yugieum" {*^p-*,*^t-*,*^k-*} +QS "C-Phone_Consonant_Jangaeeum_Payeoreum_Yugieum" {*-p+*,*-t+*,*-k+*} +QS "R-Phone_Consonant_Jangaeeum_Payeoreum_Yugieum" {*+p=*,*+t=*,*+k=*} + +QS "L-Phone_Consonant_Jangaeeum_Machareum_Pyeongeum" {*^s-*,*^h-*} +QS "C-Phone_Consonant_Jangaeeum_Machareum_Pyeongeum" {*-s+*,*-h+*} +QS "R-Phone_Consonant_Jangaeeum_Machareum_Pyeongeum" {*+s=*,*+h=*} + +QS "L-Phone_Consonant_Gongmyeongeum_Bieum" {*^m-*,*^M-*,*^n-*,*^N-*,*^NG-*} +QS "C-Phone_Consonant_Gongmyeongeum_Bieum" {*-m+*,*-M+*,*-n+*,*-N+*,*-NG+*} +QS "R-Phone_Consonant_Gongmyeongeum_Bieum" {*+m=*,*+M=*,*+n=*,*+N=*,*+NG=*} + +QS "L-Phone_Consonant_Gongmyeongeum_Yueum" {*^r-*,*^l-*,*^RR-*,*^L-*} +QS "C-Phone_Consonant_Gongmyeongeum_Yueum" {*-r+*,*-l+*,*-RR+*,*-L+*} +QS "R-Phone_Consonant_Gongmyeongeum_Yueum" {*+r=*,*+l=*,*+RR=*,*+L=*} + +QS "L-Phone_Vowel_Jeonseol_Pyeongsun" {*^i-*,*^e-*} +QS "C-Phone_Vowel_Jeonseol_Pyeongsun" {*-i+*,*-e+*} +QS "R-Phone_Vowel_Jeonseol_Pyeongsun" {*+i=*,*+e=*} + +QS "L-Phone_Vowel_Jeonseol_Wonsun" {*^y-*,*^i-*,*^w-*,*^e-*} +QS "C-Phone_Vowel_Jeonseol_Wonsun" {*-y+*,*-i+*,*-w+*,*-e+*} +QS "R-Phone_Vowel_Jeonseol_Wonsun" {*+y=*,*+i=*,*+w=*,*+e=*} + +QS "L-Phone_Vowel_Huseol_Pyeongsun" {*^eu-*,*^eo-*,*^a-*} +QS "C-Phone_Vowel_Huseol_Pyeongsun" {*-eu+*,*-eo+*,*-a+*} +QS "R-Phone_Vowel_Huseol_Pyeongsun" {*+eu=*,*+eo=*,*+a=*} + +QS "L-Phone_Vowel_Huseol_Wonsun" {*^u-*,*^o-*} +QS "C-Phone_Vowel_Huseol_Wonsun" {*-u+*,*-o+*} +QS "R-Phone_Vowel_Huseol_Wonsun" {*+u=*,*+o=*} + +QS "L-Phone_Vowel_High" {*^i-*,*^y-*,*^eu-*,*^u-*} +QS "C-Phone_Vowel_High" {*-i+*,*-y+*,*-eu+*,*-u+*} +QS "R-Phone_Vowel_High" {*+i=*,*+y=*,*+eu=*,*+u=*} + +QS "L-Phone_Vowel_Middle" {*^e-*,*^w-*,*^eo-*,*^o-*} +QS "C-Phone_Vowel_Middle" {*-e+*,*-w+*,*-eo+*,*-o+*} +QS "R-Phone_Vowel_Middle" {*+e=*,*+w=*,*+eo=*,*+o=*} + +QS "L-Phone_Vowel_Low" {*^e-*,*^a-*} +QS "C-Phone_Vowel_Low" {*-e+*,*-a+*} +QS "R-Phone_Vowel_Low" {*+e=*,*+a=*} + +QS "L-Phone_Lead_Consonant" {*^g-*,*^n-*,*^d-*,*^r-*,*^l-*,*^m-*,*^b-*,*^s-*,*^j-*,*^ch-*,*^k-*,*^t-*,*^p-*,*^h-*,*^kk-*,*^tt-*,*^pp-*,*^ss-*,*^jj-*} +QS "C-Phone_Lead_Consonant" {*-g+*,*-n+*,*-d+*,*-r+*,*-l+*,*-m+*,*-b+*,*-s+*,*-j+*,*-ch+*,*-k+*,*-t+*,*-p+*,*-h+*,*-kk+*,*-tt+*,*-pp+*,*-ss+*,*-jj+*} +QS "R-Phone_Lead_Consonant" {*+g=*,*+n=*,*+d=*,*+r=*,*+l=*,*+m=*,*+b=*,*+s=*,*+j=*,*+ch=*,*+k=*,*+t=*,*+p=*,*+h=*,*+kk=*,*+tt=*,*+pp=*,*+ss=*,*+jj=*} + +QS "L-Phone_Middle_Vowel" {*^a-*,*^eo-*,*^o-*,*^u-*,*^eu-*,*^i-*,*^e-*,*^y-*,*^w-*} +QS "C-Phone_Middle_Vowel" {*-a+*,*-eo+*,*-o+*,*-u+*,*-eu+*,*-i+*,*-e+*,*-y+*,*-w+*} +QS "R-Phone_Middle_Vowel" {*+a=*,*+eo=*,*+o=*,*+u=*,*+eu=*,*+i=*,*+e=*,*+y=*,*+w=*} + +QS "L-Phone_Last_Consonant" {*^K-*,*^T-*,*^P-*,*^N-*,*^RR-*,*^L-*,*^M-*,*^NG-*} +QS "C-Phone_Last_Consonant" {*-K+*,*-T+*,*-P+*,*-N+*,*-RR+*,*-L+*,*-M+*,*-NG+*} +QS "R-Phone_Last_Consonant" {*+K=*,*+T=*,*+P=*,*+N=*,*+RR=*,*+L=*,*+M=*,*+NG=*} + +QS "L-Phone_Consonant" {*^g-*,*^n-*,*^d-*,*^r-*,*^l-*,*^m-*,*^b-*,*^s-*,*^j-*,*^ch-*,*^k-*,*^t-*,*^p-*,*^h-*,*^kk-*,*^tt-*,*^pp-*,*^ss-*,*^jj-*,*^K-*,*^T-*,*^P-*,*^N-*,*^RR-*,*^L-*,*^M-*,*^NG-*} +QS "C-Phone_Consonant" {*-g+*,*-n+*,*-d+*,*-r+*,*-l+*,*-m+*,*-b+*,*-s+*,*-j+*,*-ch+*,*-k+*,*-t+*,*-p+*,*-h+*,*-kk+*,*-tt+*,*-pp+*,*-ss+*,*-jj+*,*-K+*,*-T+*,*-P+*,*-N+*,*-RR+*,*-L+*,*-M+*,*-NG+*} +QS "R-Phone_Consonant" {*+g=*,*+n=*,*+d=*,*+r=*,*+l=*,*+m=*,*+b=*,*+s=*,*+j=*,*+ch=*,*+k=*,*+t=*,*+p=*,*+h=*,*+kk=*,*+tt=*,*+pp=*,*+ss=*,*+jj=*,*+K=*,*+T=*,*+P=*,*+N=*,*+RR=*,*+L=*,*+M=*,*+NG=*} + +QS "L-Phone_Vowel" {*^a-*,*^eo-*,*^o-*,*^u-*,*^eu-*,*^i-*,*^e-*,*^y-*,*^w-*} +QS "C-Phone_Vowel" {*-a+*,*-eo+*,*-o+*,*-u+*,*-eu+*,*-i+*,*-e+*,*-y+*,*-w+*} +QS "R-Phone_Vowel" {*+a=*,*+eo=*,*+o=*,*+u=*,*+eu=*,*+i=*,*+e=*,*+y=*,*+w=*} + +QS "L-Phone_Consonant_g_k_kk_K" {*^g-*,*^k-*,*^kk-*,*^K-*} +QS "C-Phone_Consonant_g_k_kk_K" {*-g+*,*-k+*,*-kk+*,*-K+*} +QS "R-Phone_Consonant_g_k_kk_K" {*+g=*,*+k=*,*+kk=*,*+K=*} + +QS "L-Phone_Consonant_d_t_tt_T" {*^d-*,*^t-*,*^tt-*,*^T-*} +QS "C-Phone_Consonant_d_t_tt_T" {*-d+*,*-t+*,*-tt+*,*-T+*} +QS "R-Phone_Consonant_d_t_tt_T" {*+d=*,*+t=*,*+tt=*,*+T=*} + +QS "L-Phone_Consonant_b_p_pp_P" {*^b-*,*^p-*,*^pp-*,*^P-*} +QS "C-Phone_Consonant_b_p_pp_P" {*-b+*,*-p+*,*-pp+*,*-P+*} +QS "R-Phone_Consonant_b_p_pp_P" {*+b=*,*+p=*,*+pp=*,*+P=*} + +QS "L-Phone_Consonant_j_jj_ch" {*^j-*,*^jj-*,*^ch-*} +QS "C-Phone_Consonant_j_jj_ch" {*-j+*,*-jj+*,*-ch+*} +QS "R-Phone_Consonant_j_jj_ch" {*+j=*,*+jj=*,*+ch=*} + +QS "L-Phone_Consonant_s_ss" {*^s-*,*^ss-*} +QS "C-Phone_Consonant_s_ss" {*-s+*,*-ss+*} +QS "R-Phone_Consonant_s_ss" {*+s=*,*+ss=*} + +QS "L-Phone_Consonant_n_N" {*^n-*,*^N-*} +QS "C-Phone_Consonant_n_N" {*-n+*,*-N+*} +QS "R-Phone_Consonant_n_N" {*+n=*,*+N=*} + +QS "L-Phone_Consonant_m_M" {*^m-*,*^M-*} +QS "C-Phone_Consonant_m_M" {*-m+*,*-M+*} +QS "R-Phone_Consonant_m_M" {*+m=*,*+M=*} + +QS "L-Phone_Consonant_r_l_RR_L" {*^r-*,*^l-*,*^RR-*,*^L-*} +QS "C-Phone_Consonant_r_l_RR_L" {*-r+*,*-l+*,*-RR+*,*-L+*} +QS "R-Phone_Consonant_r_l_RR_L" {*+r=*,*+l=*,*+RR=*,*+L=*} + +QS "C-VUV_Voiced" {*-a+*,*-eo+*,*-o+*,*-u+*,*-eu+*,*-i+*,*-e+*,*-y+*,*-w+*,*-n+*,*-r+*,*-l+*,*-m+*,*-N+*,*-RR+*,*-L+*,*-M+*,*-NG+*,*-vf+*} + +QS "C-VUV_Unvoiced" {*-sil+*,*-pau+*,*-br+*,*-exh+*,*-g+*,*-d+*,*-b+*,*-s+*,*-j+*,*-ch+*,*-k+*,*-t+*,*-p+*,*-h+*,*-kk+*,*-tt+*,*-pp+*,*-ss+*,*-jj+*,*-K+*,*-T+*,*-P+*} + +QS "L-Phone_pau" {*^pau-*} +QS "C-Phone_pau" {*-pau+*} +QS "R-Phone_pau" {*+pau=*} +QS "L-Phone_sil" {*^sil-*} +QS "C-Phone_sil" {*-sil+*} +QS "R-Phone_sil" {*+sil=*} +QS "L-Phone_vf" {*^vf-*} +QS "C-Phone_vf" {*-vf+*} +QS "R-Phone_vf" {*+vf=*} +QS "L-Phone_exh" {*^exh-*} +QS "C-Phone_exh" {*-exh+*} +QS "R-Phone_exh" {*+exh=*} +QS "L-Phone_trash" {*^trash-*} +QS "C-Phone_trash" {*-trash+*} +QS "R-Phone_trash" {*+trash=*} +QS "L-Phone_g" {*^g-*} +QS "C-Phone_g" {*-g+*} +QS "R-Phone_g" {*+g=*} +QS "L-Phone_n" {*^n-*} +QS "C-Phone_n" {*-n+*} +QS "R-Phone_n" {*+n=*} +QS "L-Phone_d" {*^d-*} +QS "C-Phone_d" {*-d+*} +QS "R-Phone_d" {*+d=*} +QS "L-Phone_r" {*^r-*} +QS "C-Phone_r" {*-r+*} +QS "R-Phone_r" {*+r=*} +QS "L-Phone_l" {*^l-*} +QS "C-Phone_l" {*-l+*} +QS "R-Phone_l" {*+l=*} +QS "L-Phone_m" {*^m-*} +QS "C-Phone_m" {*-m+*} +QS "R-Phone_m" {*+m=*} +QS "L-Phone_b" {*^b-*} +QS "C-Phone_b" {*-b+*} +QS "R-Phone_b" {*+b=*} +QS "L-Phone_s" {*^s-*} +QS "C-Phone_s" {*-s+*} +QS "R-Phone_s" {*+s=*} +QS "L-Phone_j" {*^j-*} +QS "C-Phone_j" {*-j+*} +QS "R-Phone_j" {*+j=*} +QS "L-Phone_ch" {*^ch-*} +QS "C-Phone_ch" {*-ch+*} +QS "R-Phone_ch" {*+ch=*} +QS "L-Phone_k" {*^k-*} +QS "C-Phone_k" {*-k+*} +QS "R-Phone_k" {*+k=*} +QS "L-Phone_t" {*^t-*} +QS "C-Phone_t" {*-t+*} +QS "R-Phone_t" {*+t=*} +QS "L-Phone_p" {*^p-*} +QS "C-Phone_p" {*-p+*} +QS "R-Phone_p" {*+p=*} +QS "L-Phone_h" {*^h-*} +QS "C-Phone_h" {*-h+*} +QS "R-Phone_h" {*+h=*} +QS "L-Phone_kk" {*^kk-*} +QS "C-Phone_kk" {*-kk+*} +QS "R-Phone_kk" {*+kk=*} +QS "L-Phone_tt" {*^tt-*} +QS "C-Phone_tt" {*-tt+*} +QS "R-Phone_tt" {*+tt=*} +QS "L-Phone_pp" {*^pp-*} +QS "C-Phone_pp" {*-pp+*} +QS "R-Phone_pp" {*+pp=*} +QS "L-Phone_ss" {*^ss-*} +QS "C-Phone_ss" {*-ss+*} +QS "R-Phone_ss" {*+ss=*} +QS "L-Phone_jj" {*^jj-*} +QS "C-Phone_jj" {*-jj+*} +QS "R-Phone_jj" {*+jj=*} +QS "L-Phone_K" {*^K-*} +QS "C-Phone_K" {*-K+*} +QS "R-Phone_K" {*+K=*} +QS "L-Phone_T" {*^T-*} +QS "C-Phone_T" {*-T+*} +QS "R-Phone_T" {*+T=*} +QS "L-Phone_P" {*^P-*} +QS "C-Phone_P" {*-P+*} +QS "R-Phone_P" {*+P=*} +QS "L-Phone_N" {*^N-*} +QS "C-Phone_N" {*-N+*} +QS "R-Phone_N" {*+N=*} +QS "L-Phone_RR" {*^RR-*} +QS "C-Phone_RR" {*-RR+*} +QS "R-Phone_RR" {*+RR=*} +QS "L-Phone_L" {*^L-*} +QS "C-Phone_L" {*-L+*} +QS "R-Phone_L" {*+L=*} +QS "L-Phone_M" {*^M-*} +QS "C-Phone_M" {*-M+*} +QS "R-Phone_M" {*+M=*} +QS "L-Phone_NG" {*^NG-*} +QS "C-Phone_NG" {*-NG+*} +QS "R-Phone_NG" {*+NG=*} +QS "L-Phone_a" {*^a-*} +QS "C-Phone_a" {*-a+*} +QS "R-Phone_a" {*+a=*} +QS "L-Phone_eo" {*^eo-*} +QS "C-Phone_eo" {*-eo+*} +QS "R-Phone_eo" {*+eo=*} +QS "L-Phone_o" {*^o-*} +QS "C-Phone_o" {*-o+*} +QS "R-Phone_o" {*+o=*} +QS "L-Phone_u" {*^u-*} +QS "C-Phone_u" {*-u+*} +QS "R-Phone_u" {*+u=*} +QS "L-Phone_eu" {*^eu-*} +QS "C-Phone_eu" {*-eu+*} +QS "R-Phone_eu" {*+eu=*} +QS "L-Phone_i" {*^i-*} +QS "C-Phone_i" {*-i+*} +QS "R-Phone_i" {*+i=*} +QS "L-Phone_e" {*^e-*} +QS "C-Phone_e" {*-e+*} +QS "R-Phone_e" {*+e=*} +QS "L-Phone_y" {*^y-*} +QS "C-Phone_y" {*-y+*} +QS "R-Phone_y" {*+y=*} +QS "L-Phone_w" {*^w-*} +QS "C-Phone_w" {*-w+*} +QS "R-Phone_w" {*+w=*} + + +# The following was copied from the "nnsvs/nnsvs" hed + +# absolute pitch (L/C/R) +CQS "d1_absolute_pitch" {/D:(\NOTE)!} +CQS "e1_absolute_pitch" {/E:(\NOTE)]} +CQS "f1_absolute_pitch" {/F:(\NOTE)#} + +# relative pitch (L/C/R) +CQS "d2_relative_pitch" {!(\d+)#} +CQS "e2_relative_pitch" {](\d+)^} +CQS "f2_relative_pitch" {#(\d+)#} + +# phoneme-level positional features (C) +CQS "p12_position" {-(\d+)!} +CQS "p13_position" {!(\d+)[} + +# distance between consonant and vowel +CQS "p14_distance_from_vowel" {[(\d+)$} +CQS "p15_distance_from_vowel" {$(\d+)]} + +# number of phonemes in a syllable (L/C/R) +CQS "a1_number_of_phonemes" {/A:(\d+)-} +CQS "b1_number_of_phonemes" {/B:(\d+)_} +CQS "c1_number_of_phonemes" {/C:(\d+)+} + +# syllable potional features (L/C/R) +CQS "a2_position" {-(\d+)-} +CQS "a3_position" {-(\d+)@} +CQS "b2_position" {_(\d+)_} +CQS "b3_position" {_(\d+)@} +CQS "c2_position" {+(\d+)+} +CQS "c3_position" {+(\d+)@} + +# length of current note (C) +CQS "e6_length_by_syllable" {!(\d+)@} +CQS "e7_length_by_10ms" {@(\d+)#} +CQS "e8_length_by_96th_note" {#(\d+)+} + +# length of previous note (L) +CQS "d6_length_by_syllable" {|(\d+)&} +CQS "d7_length_by_10ms" {&(\d+);} +CQS "d8_length_by_96th_note" {;(\d+)-} + +# length of next note (R) +CQS "f6_length_by_syllable" {$(\d+)+} +CQS "f7_length_by_10ms" {+(\d+)%} +CQS "f8_length_by_96th_note" {%(\d+);} + +# note-level positional features in measures (C) +CQS "e10_position_by_note_in_measure" {](\d+)$} +CQS "e11_position_by_note_in_measure" {$(\d+)|} +CQS "e12_position_by_10ms_in_measure" {|(\d+)[} +CQS "e13_position_by_10ms_in_measure" {[(\d+)&} +CQS "e14_position_by_96th_note_in_measure" {&(\d+)]} +CQS "e15_position_by_96th_note_in_measure" {](\d+)=} +CQS "e16_position_by_percent_in_measure" {=(\d+)^} +CQS "e17_position_by_percent_in_measure" {^(\d+)~} + +# note-level positional features in phrase (C) +CQS "e18_position_by_note" {~(\d+)#} +CQS "e19_position_by_note" {#(\d+)_} +CQS "e20_position_by_10ms" {_(\d+);} +CQS "e21_position_by_10ms" {;(\d+)$} +CQS "e22_position_by_96th_note" {$(\d+)&} +CQS "e23_position_by_96th_note" {&(\d+)%} +CQS "e24_position_by_percent" {%(\d+)[} +CQS "e25_position_by_percent" {[(\d+)|} + +# pitch diff +CQS "e57" {~([pm]\d+)+} +CQS "e58" {+([pm]\d+)!} \ No newline at end of file diff --git a/source/singing_database/.gitkeep b/source/singing_database/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/train/conf/LICENSE.md b/train/conf/LICENSE.md deleted file mode 100644 index 7ea9fa4..0000000 --- a/train/conf/LICENSE.md +++ /dev/null @@ -1,37 +0,0 @@ -# LICENSE - -MIT License - -## MIT License - -### Target files - -- All files in the directory - -### Copyright - -Copyright (c) 2020 Ryuichi Yamamoto - -### License text - -> MIT License -> -> Copyright (c) 2020 Ryuichi Yamamoto -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. \ No newline at end of file diff --git a/train/conf/parallel_wavegan/hn-sinc-nsf_sr44k_pwgD.yaml b/train/conf/parallel_wavegan/hn-sinc-nsf_sr44k_pwgD.yaml new file mode 100644 index 0000000..652f38a --- /dev/null +++ b/train/conf/parallel_wavegan/hn-sinc-nsf_sr44k_pwgD.yaml @@ -0,0 +1,134 @@ +# This config is for 44.1kHz sampling audio with 5ms shift. +# Generator: hn-sinc-nsf +# Discriminator: PWG's discriminator +# conditional features: [mgc, lf0, vuv, bap] +# stream sizes: [60, 1, 1, 5] + +########################################################### +# FEATURE EXTRACTION SETTING # +########################################################### +sampling_rate: 44100 # Sampling rate. +fft_size: 2048 # FFT size. +hop_size: 221 # Hop size. +win_length: 2205 # Window length. + # If set to null, it will be the same as fft_size. +window: "hann" # Window function. +num_mels: 180 # Number of mel basis. +fmin: 100 # Minimum freq in mel basis calculation. +fmax: 22050 # Maximum frequency in mel basis calculation. +global_gain_scale: 1.0 # Will be multiplied to all of waveform. +trim_silence: false # Whether to trim the start and end of silence. +trim_threshold_in_db: 60 # Need to tune carefully if the recording is not good. +trim_frame_size: 2048 # Frame size in trimming. +trim_hop_size: 512 # Hop size in trimming. +format: "npy" # Feature file format. "npy" or "hdf5" is supported. + +########################################################### +# GENERATOR NETWORK ARCHITECTURE SETTING # +########################################################### +generator_type: HnSincNSF +generator_params: + sample_rate: 44100 + upsample_rate: 221 + cin_channels: 67 + out_channels: 1 + out_lf0_idx: 60 + # out_lf0_mean: 5.885598413281433 + # out_lf0_scale: 0.23067350503371858 + # out_lf0_mean: 5.916914616514854 + # out_lf0_scale: 0.24763718908317203 + out_lf0_mean: 5.9137223796778455 + out_lf0_scale: 0.24146765603411127 + out_vuv_idx: 61 + sine_amp: 0.1 + noise_std: 0.003 + hidden_dim: 64 + cnn_kernel_s: 5 + filter_block_num: 5 + cnn_num_in_block: 10 + harmonic_num: 7 + sinc_order: 31 + # NOTE: leave empty for `upsample_net` to use NSF-style upsampling + upsample_net: + upsample_params: + +########################################################### +# DISCRIMINATOR NETWORK ARCHITECTURE SETTING # +########################################################### +discriminator_params: + in_channels: 1 # Number of input channels. + out_channels: 1 # Number of output channels. + kernel_size: 3 # Number of output channels. + layers: 10 # Number of conv layers. + conv_channels: 64 # Number of chnn layers. + bias: true # Whether to use bias parameter in conv. + use_weight_norm: true # Whether to use weight norm. + # If set to true, it will be applied to all of the conv layers. + nonlinear_activation: "LeakyReLU" # Nonlinear function after each conv. + nonlinear_activation_params: # Nonlinear function parameters + negative_slope: 0.2 # Alpha in LeakyReLU. + +########################################################### +# STFT LOSS SETTING # +########################################################### +stft_loss_params: + fft_sizes: [2048, 4096, 512] # List of FFT size for STFT-based loss. + hop_sizes: [221, 442, 92] # List of hop size for STFT-based loss + win_lengths: [1103, 2205, 441] # List of window length for STFT-based loss. + window: "hann_window" # Window function for STFT-based loss + +########################################################### +# ADVERSARIAL LOSS SETTING # +########################################################### +lambda_adv: 4.0 # Loss balancing coefficient. + +########################################################### +# DATA LOADER SETTING # +########################################################### +batch_size: 2 # Batch size. +batch_max_steps: 66300 # Length of each audio in batch. Make sure dividable by hop_size. +pin_memory: true # Whether to pin memory in Pytorch DataLoader. +num_workers: 0 # Number of workers in Pytorch DataLoader. +remove_short_samples: true # Whether to remove samples the length of which are less than batch_max_steps. +allow_cache: true # Whether to allow cache in dataset. If true, it requires cpu memory. + +########################################################### +# OPTIMIZER & SCHEDULER SETTING # +########################################################### +generator_optimizer_params: + lr: 0.0001 # Generator's learning rate. + eps: 1.0e-6 # Generator's epsilon. + weight_decay: 0.0 # Generator's weight decay coefficient. +generator_scheduler_params: + step_size: 100000 # Generator's scheduler step size. + gamma: 0.5 # Generator's scheduler gamma. + # At each step size, lr will be multiplied by this parameter. +generator_grad_norm: 10 # Generator's gradient norm. +discriminator_optimizer_params: + lr: 0.0001 # Discriminator's learning rate. + eps: 1.0e-6 # Discriminator's epsilon. + weight_decay: 0.0 # Discriminator's weight decay coefficient. +discriminator_scheduler_params: + step_size: 100000 # Discriminator's scheduler step size. + gamma: 0.5 # Discriminator's scheduler gamma. + # At each step size, lr will be multiplied by this parameter. +discriminator_grad_norm: 1 # Discriminator's gradient norm. + +########################################################### +# INTERVAL SETTING # +########################################################### +#discriminator_train_start_steps: 100000 # Number of steps to start to train discriminator. +#train_max_steps: 400000 # Number of training steps. +#save_interval_steps: 10000 # Interval steps to save checkpoint. +#eval_interval_steps: 1000 # Interval steps to evaluate the network. +#log_interval_steps: 100 # Interval steps to record the training log. +discriminator_train_start_steps: 100000 # Number of steps to start to train discriminator. +train_max_steps: 380000 # Number of training steps. +save_interval_steps: 500 # Interval steps to save checkpoint. +eval_interval_steps: 500 # Interval steps to evaluate the network. +log_interval_steps: 100 # Interval steps to record the training log. + +########################################################### +# OTHER SETTING # +########################################################### +num_save_intermediate_results: 4 # Number of results to be saved as intermediate results. diff --git a/train/conf/train/acoustic/data/myconfig.yaml b/train/conf/train/acoustic/data/myconfig.yaml index 06157d6..e5a0fc1 100644 --- a/train/conf/train/acoustic/data/myconfig.yaml +++ b/train/conf/train/acoustic/data/myconfig.yaml @@ -1,5 +1,3 @@ -# @package _group_ - # training set train_no_dev: in_dir: @@ -11,6 +9,30 @@ dev: out_dir: # data loader -num_workers: 4 -batch_size: 8 -pin_memory: true +num_workers: 2 +batch_size: 8 +pin_memory: true + +# Filter long segments that easily cause OOM error +filter_long_segments: true +# If a segment is longer than this value, it will not be used for training +# 30 [sec] / 0.005 [sec] = 6000 [frames] +filter_num_frames: 6000 + +# NOTE: the following parameters must be carefully set +# log-F0 and rest parameter indices in the input features +# it depends on the hed file + +in_rest_idx: 15 +in_lf0_idx: 233 + +# The log-F0 index in the output features +out_lf0_idx: 180 + +# mini-batch sampling +# If max_time_frames is specified, (max_time_frames) frames are randomly sampled +# to create a mini-batch. Otherwise, all frames are used. +# consider setting the value (e.g., 256 or 512) to avoid GPU OOM. +max_time_frames: -1 + +sample_rate: 44100 diff --git a/train/conf/train/acoustic/data/myconfig_rmdn.yaml b/train/conf/train/acoustic/data/myconfig_rmdn.yaml deleted file mode 100644 index 6f6abba..0000000 --- a/train/conf/train/acoustic/data/myconfig_rmdn.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# @package _group_ - -# training set -train_no_dev: - in_dir: - out_dir: - -# development set -dev: - in_dir: - out_dir: - -# data loader -num_workers: 8 -batch_size: 2 -pin_memory: true diff --git a/train/conf/train/acoustic/model/acoustic_conv.yaml b/train/conf/train/acoustic/model/acoustic_conv.yaml deleted file mode 100644 index 2c0b3fb..0000000 --- a/train/conf/train/acoustic/model/acoustic_conv.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# @package _group_ -# (mgc, lf0, vuv, bap) -stream_sizes: [180, 3, 1, 15] -has_dynamic_features: [true, true, false, true] -num_windows: 3 -# If None, automatically set based on stream sizes -stream_weights: - -netG: - _target_: nnsvs.model.Conv1dResnet - in_dim: 225 - out_dim: 199 - hidden_dim: 128 - num_layers: 6 - dropout: 0.1 diff --git a/train/conf/train/acoustic/model/acoustic_custom.yaml b/train/conf/train/acoustic/model/acoustic_custom.yaml new file mode 100644 index 0000000..ea1662f --- /dev/null +++ b/train/conf/train/acoustic/model/acoustic_custom.yaml @@ -0,0 +1,33 @@ +# (mgc, lf0, vuv, bap) +stream_sizes: [180, 3, 1, 15] +has_dynamic_features: [true, true, false, true] +num_windows: 3 +# If None, automatically set based on stream sizes +stream_weights: + +netG: + _target_: nnsvs.model.ResSkipF0FFConvLSTM + in_dim: 282 + out_dim: 199 + ff_hidden_dim: 2048 + conv_hidden_dim: 1024 + lstm_hidden_dim: 256 + dropout: 0.1 + num_lstm_layers: 2 + bidirectional: true + skip_inputs: true + init_type: "kaiming_normal" + # Last MDN layer (disabled by default) + use_mdn: true + num_gaussians: 8 + dim_wise: true + # NOTE: you MUST set in_lf0_idx and out_lf0_idx correctly + # otherwise the model does't work at all + in_lf0_idx: 233 + out_lf0_idx: 180 + # Please leave the following parameters unspecified if you want to + # find the corresponding values automatically from in/out scalers. + in_lf0_min: null + in_lf0_max: null + out_lf0_mean: null + out_lf0_scale: null \ No newline at end of file diff --git a/train/conf/train/acoustic/model/acoustic_rmdn.yaml b/train/conf/train/acoustic/model/acoustic_rmdn.yaml deleted file mode 100644 index 96f96d9..0000000 --- a/train/conf/train/acoustic/model/acoustic_rmdn.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# @package _group_ -# (mgc, lf0, vuv, bap) -stream_sizes: [180, 3, 1, 15] -has_dynamic_features: [true, true, false, true] -num_windows: 3 -# If None, automatically set based on stream sizes -stream_weights: - -netG: - _target_: nnsvs.model.Conv1dResnetMDN - in_dim: 210 - out_dim: 199 - hidden_dim: 128 - num_layers: 6 - dropout: 0.1 - num_gaussians: 4 - dim_wise: true diff --git a/train/conf/train/acoustic/train/myconfig.yaml b/train/conf/train/acoustic/train/myconfig.yaml index 1369569..38405c9 100644 --- a/train/conf/train/acoustic/train/myconfig.yaml +++ b/train/conf/train/acoustic/train/myconfig.yaml @@ -1,29 +1,52 @@ -# @package _group_ +out_dir: target/exp +log_dir: tensorboard/acoustic -out_dir: exp -nepochs: 50 -checkpoint_epoch_interval: 20 +# Use automatic mixed precision training or not +# only works on supported GPUs +use_amp: false -stream_wise_loss: false -use_detect_anomaly: true +# steps can either be specified by steps or epochs +max_train_steps: -1 +nepochs: 100 +checkpoint_epoch_interval: 30 + +# mse (mean squared error; l2 loss) or mae (mean absolute error; l1 loss) +# NOTE: no effect for MDN models +feats_criterion: l1 + +# Weight for pitch regularization loss +# If > 0.0, add a pitch regularization loss that biases the model to +# predict closer F0 to the F0 derived from the musical score. +# This is conceptually same as imposing a prior distribution of the residual F0 +# to be N(0, sigma) (if we use L2 loss) +# https://arxiv.org/abs/2108.02776 +pitch_reg_weight: 0.1 + +# decay_size * 0.005 sec. decay to compute pitch reg weights +pitch_reg_decay_size: 90 + +force_fix_vuv: true + +stream_wise_loss: false +use_detect_anomaly: false optim: optimizer: - name: RAdam + name: RAdam params: - lr: 0.001 - betas: [0.9, 0.999] - weight_decay: 0.0 + lr: 0.001 + betas: [0.9, 0.999] + weight_decay: 0.0 lr_scheduler: - name: StepLR + name: StepLR params: - step_size: 20 - gamma: 0.5 + step_size: 20 + gamma: 0.5 resume: checkpoint: - load_optimizer: false + load_optimizer: cudnn: - benchmark: false - deterministic: true + benchmark: false + deterministic: true diff --git a/train/conf/train/acoustic/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml b/train/conf/train/acoustic/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml deleted file mode 100644 index 989344a..0000000 --- a/train/conf/train/acoustic/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 300 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.003 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: CosineAnnealingWarmRestarts - params: - T_0: 20 - T_mult: 0.5 - eta_min : 0 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/acoustic/train/myconfig_RAdam_StepLR.yaml b/train/conf/train/acoustic/train/myconfig_RAdam_StepLR.yaml deleted file mode 100644 index c13aee0..0000000 --- a/train/conf/train/acoustic/train/myconfig_RAdam_StepLR.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 200 -checkpoint_epoch_interval: 50 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.003 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: StepLR - params: - step_size: 20 - gamma: 0.5 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/acoustic/train/myconfig_RAdam_StepLR_2nd.yaml b/train/conf/train/acoustic/train/myconfig_RAdam_StepLR_2nd.yaml deleted file mode 100644 index 971ddb6..0000000 --- a/train/conf/train/acoustic/train/myconfig_RAdam_StepLR_2nd.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 150 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.0003 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: StepLR - params: - step_size: 10 - gamma: 0.5 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/duration/data/myconfig.yaml b/train/conf/train/duration/data/myconfig.yaml index 06157d6..d56e17c 100644 --- a/train/conf/train/duration/data/myconfig.yaml +++ b/train/conf/train/duration/data/myconfig.yaml @@ -1,5 +1,3 @@ -# @package _group_ - # training set train_no_dev: in_dir: @@ -11,6 +9,18 @@ dev: out_dir: # data loader -num_workers: 4 -batch_size: 8 -pin_memory: true +num_workers: 2 +batch_size: 64 +pin_memory: true + +# Filter long segments that easily cause OOM error +filter_long_segments: false +# If a segment is longer than this value, it will not be used for training +# 30 [sec] / 0.005 [sec] = 6000 [frames] +filter_num_frames: 6000 + +# mini-batch sampling +# If max_time_frames is specified, (max_time_frames) frames are randomly sampled +# to create a mini-batch. Otherwise, all frames are used. +# consider setting the value (e.g., 256 or 512) to avoid GPU OOM. +max_time_frames: -1 diff --git a/train/conf/train/duration/data/myconfig_rmdn.yaml b/train/conf/train/duration/data/myconfig_rmdn.yaml deleted file mode 100644 index 66f6adb..0000000 --- a/train/conf/train/duration/data/myconfig_rmdn.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# @package _group_ - -# training set -train_no_dev: - in_dir: - out_dir: - -# development set -dev: - in_dir: - out_dir: - -# data loader -num_workers: 8 -batch_size: 16 -pin_memory: true diff --git a/train/conf/train/duration/model/duration_custom.yaml b/train/conf/train/duration/model/duration_custom.yaml new file mode 100644 index 0000000..79a013a --- /dev/null +++ b/train/conf/train/duration/model/duration_custom.yaml @@ -0,0 +1,14 @@ +stream_sizes: [1] +has_dynamic_features: [false] +stream_weights: [1] + +netG: + _target_: nnsvs.model.MDNv2 + in_dim: 278 + out_dim: 1 + hidden_dim: 256 + dropout: 0.3 + num_layers: 3 + num_gaussians: 8 + dim_wise: true + init_type: "kaiming_normal" \ No newline at end of file diff --git a/train/conf/train/duration/model/duration_lstm.yaml b/train/conf/train/duration/model/duration_lstm.yaml deleted file mode 100644 index efffbcd..0000000 --- a/train/conf/train/duration/model/duration_lstm.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# @package _group_ - -stream_sizes: [1] -has_dynamic_features: [false] -stream_weights: [1] - -netG: - _target_: nnsvs.model.LSTMRNN - in_dim: 221 - out_dim: 1 - hidden_dim: 64 - num_layers: 2 - bidirectional: true - dropout: 0.5 diff --git a/train/conf/train/duration/model/duration_rmdn.yaml b/train/conf/train/duration/model/duration_rmdn.yaml deleted file mode 100644 index a87827b..0000000 --- a/train/conf/train/duration/model/duration_rmdn.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# @package _group_ - -stream_sizes: [1] -has_dynamic_features: [false] -stream_weights: [1] - -netG: - _target_: nnsvs.model.RMDN - in_dim: 206 - out_dim: 1 - hidden_dim: 256 - num_layers: 2 - bidirectional: true - dropout: 0.5 - num_gaussians: 4 diff --git a/train/conf/train/duration/train/myconfig.yaml b/train/conf/train/duration/train/myconfig.yaml index 1369569..707181e 100644 --- a/train/conf/train/duration/train/myconfig.yaml +++ b/train/conf/train/duration/train/myconfig.yaml @@ -1,29 +1,34 @@ -# @package _group_ +out_dir: target/exp +log_dir: tensorboard/duration -out_dir: exp -nepochs: 50 -checkpoint_epoch_interval: 20 +use_amp: false -stream_wise_loss: false -use_detect_anomaly: true +max_train_steps: -1 +nepochs: 100 +checkpoint_epoch_interval: 30 + +#feats_criterion: mse + +stream_wise_loss: false +use_detect_anomaly: false optim: optimizer: - name: RAdam + name: RAdam params: - lr: 0.001 - betas: [0.9, 0.999] - weight_decay: 0.0 + lr: 0.001 + betas: [0.9, 0.999] + weight_decay: 0.0 lr_scheduler: - name: StepLR + name: StepLR params: - step_size: 20 - gamma: 0.5 + step_size: 20 + gamma: 0.5 resume: - checkpoint: - load_optimizer: false + checkpoint: + load_optimizer: false cudnn: - benchmark: false - deterministic: true + benchmark: false + deterministic: true diff --git a/train/conf/train/duration/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml b/train/conf/train/duration/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml deleted file mode 100644 index a324e93..0000000 --- a/train/conf/train/duration/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 300 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.002 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: CosineAnnealingWarmRestarts - params: - T_0: 20 - T_mult: 0.5 - eta_min : 0 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/duration/train/myconfig_RAdam_StepLR.yaml b/train/conf/train/duration/train/myconfig_RAdam_StepLR.yaml deleted file mode 100644 index cfaa4e1..0000000 --- a/train/conf/train/duration/train/myconfig_RAdam_StepLR.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 150 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.001 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: StepLR - params: - step_size: 20 - gamma: 0.5 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/duration/train/myconfig_RAdam_StepLR_2nd.yaml b/train/conf/train/duration/train/myconfig_RAdam_StepLR_2nd.yaml deleted file mode 100644 index d5475c2..0000000 --- a/train/conf/train/duration/train/myconfig_RAdam_StepLR_2nd.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 100 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.0001 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: StepLR - params: - step_size: 10 - gamma: 0.5 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/postfilter/data/bap_data.yaml b/train/conf/train/postfilter/data/bap_data.yaml new file mode 100644 index 0000000..232a430 --- /dev/null +++ b/train/conf/train/postfilter/data/bap_data.yaml @@ -0,0 +1,31 @@ +# training set +train_no_dev: + in_dir: + out_dir: + +# development set +dev: + in_dir: + out_dir: + +# data loader +num_workers: 4 +batch_size: 12 +pin_memory: true + +# Filter long segments that easily cause OOM error +filter_long_segments: false +# If a segment is longer than this value, it will not be used for training +# 30 [sec] / 0.005 [sec] = 6000 [frames] +filter_num_frames: 6000 + +in_scaler_path: null +out_scaler_path: null + +# mini-batch sampling +# If max_time_frames is specified, (max_time_frames) frames are randomly sampled +# to create a mini-batch. Otherwise, all frames are used. +# consider setting the value (e.g., 256 or 512) to avoid GPU OOM. +max_time_frames: -1 + +sample_rate: 44100 diff --git a/train/conf/train/postfilter/data/mgc_data.yaml b/train/conf/train/postfilter/data/mgc_data.yaml new file mode 100644 index 0000000..4c8f2f3 --- /dev/null +++ b/train/conf/train/postfilter/data/mgc_data.yaml @@ -0,0 +1,31 @@ +# training set +train_no_dev: + in_dir: + out_dir: + +# development set +dev: + in_dir: + out_dir: + +# data loader +num_workers: 2 +batch_size: 2 +pin_memory: true + +# Filter long segments that easily cause OOM error +filter_long_segments: true +# If a segment is longer than this value, it will not be used for training +# 30 [sec] / 0.005 [sec] = 6000 [frames] +filter_num_frames: 6000 + +in_scaler_path: null +out_scaler_path: null + +# mini-batch sampling +# If max_time_frames is specified, (max_time_frames) frames are randomly sampled +# to create a mini-batch. Otherwise, all frames are used. +# consider setting the value (e.g., 256 or 512) to avoid GPU OOM. +max_time_frames: -1 + +sample_rate: 44100 diff --git a/train/conf/train/postfilter/data/myconfig.yaml b/train/conf/train/postfilter/data/myconfig.yaml new file mode 100644 index 0000000..4c8f2f3 --- /dev/null +++ b/train/conf/train/postfilter/data/myconfig.yaml @@ -0,0 +1,31 @@ +# training set +train_no_dev: + in_dir: + out_dir: + +# development set +dev: + in_dir: + out_dir: + +# data loader +num_workers: 2 +batch_size: 2 +pin_memory: true + +# Filter long segments that easily cause OOM error +filter_long_segments: true +# If a segment is longer than this value, it will not be used for training +# 30 [sec] / 0.005 [sec] = 6000 [frames] +filter_num_frames: 6000 + +in_scaler_path: null +out_scaler_path: null + +# mini-batch sampling +# If max_time_frames is specified, (max_time_frames) frames are randomly sampled +# to create a mini-batch. Otherwise, all frames are used. +# consider setting the value (e.g., 256 or 512) to avoid GPU OOM. +max_time_frames: -1 + +sample_rate: 44100 diff --git a/train/conf/train/postfilter/model/myconfig.yaml b/train/conf/train/postfilter/model/myconfig.yaml new file mode 100644 index 0000000..397630d --- /dev/null +++ b/train/conf/train/postfilter/model/myconfig.yaml @@ -0,0 +1,39 @@ +# (mgc, lf0, vuv, bap, vib, vib_flags) +stream_sizes: [60, 1, 1, 5, 2, 1] +has_dynamic_features: [false, false, false, false, false, false] +num_windows: 1 +# If None, automatically set based on stream sizes +stream_weights: + +netG: + _target_: nnsvs.postfilters.MultistreamPostFilter + # If stream_sizes here is not specified, it will be set automatically. + stream_sizes: null + mgc_postfilter: + _target_: nnsvs.postfilters.Conv2dPostFilter + in_dim: 58 + channels: 2 + kernel_size: [1, 1] + init_type: "kaiming_normal" + noise_type: "frame_wise" + noise_scale: 1.0 + smoothing_width: 100 + mgc_offset: 2 + bap_postfilter: + _target_: nnsvs.postfilters.Conv2dPostFilter + in_dim: 5 + channels: 2 + kernel_size: [1, 1] + init_type: "kaiming_normal" + noise_type: "bin_wise" + noise_scale: 1.0 + smoothing_width: 5 + bap_offset: 0 + lf0_postfilter: null + +netD: + _target_: nnsvs.discriminators.Conv2dD + # If in_dim is not specified, it will be automatically set based on adv_streams + in_dim: null + channels: 2 + last_sigmoid: false \ No newline at end of file diff --git a/train/conf/train/postfilter/model/postfilter_bap.yaml b/train/conf/train/postfilter/model/postfilter_bap.yaml new file mode 100644 index 0000000..b643f8f --- /dev/null +++ b/train/conf/train/postfilter/model/postfilter_bap.yaml @@ -0,0 +1,35 @@ +# (mgc, lf0, vuv, bap, vib, vib_flags) +stream_sizes: [60, 1, 1, 5, 2, 1] +has_dynamic_features: [false, false, false, false, false, false] +num_windows: 1 +# If None, automatically set based on stream sizes +stream_weights: + +netG: + _target_: nnsvs.postfilters.MultistreamPostFilter + # If stream_sizes here is not specified, it will be set automatically. + stream_sizes: null + mgc_postfilter: null + bap_postfilter: + _target_: nnsvs.postfilters.Conv2dPostFilter + in_dim: 5 + channels: 32 + kernel_size: [5, 1] + init_type: "kaiming_normal" + noise_type: "bin_wise" + noise_scale: 1.0 + smoothing_width: 5 + mgc_offset: 2 + bap_offset: 0 + lf0_postfilter: null + +netD: + _target_: nnsvs.discriminators.Conv2dD + # If in_dim is not specified, it will be automatically set based on adv_streams + in_dim: null + channels: 16 + kernel_size: [7, 3] + padding: null + padding_mode: "zeros" + last_sigmoid: false + init_type: "kaiming_normal" \ No newline at end of file diff --git a/train/conf/train/postfilter/model/postfilter_mgc.yaml b/train/conf/train/postfilter/model/postfilter_mgc.yaml new file mode 100644 index 0000000..648052e --- /dev/null +++ b/train/conf/train/postfilter/model/postfilter_mgc.yaml @@ -0,0 +1,35 @@ +# (mgc, lf0, vuv, bap, vib, vib_flags) +stream_sizes: [60, 1, 1, 5, 2, 1] +has_dynamic_features: [false, false, false, false, false, false] +num_windows: 1 +# If None, automatically set based on stream sizes +stream_weights: + +netG: + _target_: nnsvs.postfilters.MultistreamPostFilter + # If stream_sizes here is not specified, it will be set automatically. + stream_sizes: null + mgc_postfilter: + _target_: nnsvs.postfilters.Conv2dPostFilter + in_dim: 58 + channels: 64 + kernel_size: [5, 5] + init_type: "kaiming_normal" + noise_type: "frame_wise" + noise_scale: 1.0 + smoothing_width: 100 + mgc_offset: 2 + bap_offset: 0 + bap_postfilter: null + lf0_postfilter: null + +netD: + _target_: nnsvs.discriminators.Conv2dD + # If in_dim is not specified, it will be automatically set based on adv_streams + in_dim: null + channels: 32 + kernel_size: [7, 3] + padding: null + padding_mode: "zeros" + last_sigmoid: false + init_type: "kaiming_normal" \ No newline at end of file diff --git a/train/conf/train/postfilter/train/bap.yaml b/train/conf/train/postfilter/train/bap.yaml new file mode 100644 index 0000000..6589901 --- /dev/null +++ b/train/conf/train/postfilter/train/bap.yaml @@ -0,0 +1,71 @@ +out_dir: target/exp +log_dir: tensorboard/postfilter_bap + +# Use automatic mixed precision training or not +# only works on supported GPUs +use_amp: true + +# steps can either be specified by steps or epochs +max_train_steps: -1 +nepochs: 100 +checkpoint_epoch_interval: 40 + +# GAN type (lsgan or vanilla-gan) +gan_type: lsgan +# MSE loss weight +mse_weight: 0.0 +# Adversarial loss weight +adv_weight: 1.0 +# [mgc, lf0, vuv, bap, vib, vib_flags] +adv_streams: [false, false, false, true, false, false] +# Feature matching loss weight +fm_weight: 10.0 +# Don't set the value > 0 unless you are sure what you are doing +# mask 0 to n-th mgc for adversarial loss +# e.g, for n=2, 0-th and 1-th mgc coefficients will be masked +mask_nth_mgc_for_adv_loss: 0 +# Mask out unvoiced frames in the adversarial loss +vuv_mask: true + +stream_wise_loss: false +use_detect_anomaly: false + +optim: + netG: + optimizer: + name: RAdam + params: + lr: 0.001 + betas: [0.9, 0.999] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 20 + gamma: 0.5 + clip_norm: 1.0 + netD: + optimizer: + name: Adam + params: + lr: 0.001 + betas: [0.9, 0.999] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 50 + gamma: 0.5 + clip_norm: 1.0 + +resume: + netG: + checkpoint: + load_optimizer: false + netD: + checkpoint: + load_optimizer: false + +cudnn: + benchmark: false + deterministic: true \ No newline at end of file diff --git a/train/conf/train/postfilter/train/bap_cycle.yaml b/train/conf/train/postfilter/train/bap_cycle.yaml new file mode 100644 index 0000000..48b2e70 --- /dev/null +++ b/train/conf/train/postfilter/train/bap_cycle.yaml @@ -0,0 +1,74 @@ +out_dir: exp +log_dir: tensorboard/exp/postfilter_bap + +# Use automatic mixed precision training or not +# only works on supported GPUs +use_amp: true + +# steps can either be specified by steps or epochs +max_train_steps: -1 +nepochs: 200 +checkpoint_epoch_interval: 100 + +# [mgc, lf0, vuv, bap, vib, vib_flags] +adv_streams: [false, false, false, true, false, false] + +# GAN type (lsgan or vanilla-gan) +gan_type: lsgan + +mse_weight: 0.0 +adv_weight: 1.0 +fm_weight: 10.0 + +mask_nth_mgc_for_adv_loss: 0 +vuv_mask: true + +# Don't set the value > 0 unless you are sure what you are doing +# mask 0 to n-th mgc for adversarial loss +# e.g, for n=2, 0-th and 1-th mgc coefficients will be masked +mask_nth_mgc_for_adv_loss: 0 +# Mask out unvoiced frames in the adversarial loss +vuv_mask: true + +stream_wise_loss: false +use_detect_anomaly: false + +optim: + netG: + optimizer: + name: RAdam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 50 + gamma: 0.5 + clip_norm: 1.0 + netD: + optimizer: + name: RAdam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 50 + gamma: 0.5 + clip_norm: 1.0 + +resume: + netG: + checkpoint: + load_optimizer: false + netD: + checkpoint: + load_optimizer: false + +cudnn: + benchmark: false + deterministic: true diff --git a/train/conf/train/postfilter/train/mgc.yaml b/train/conf/train/postfilter/train/mgc.yaml new file mode 100644 index 0000000..62dadbc --- /dev/null +++ b/train/conf/train/postfilter/train/mgc.yaml @@ -0,0 +1,69 @@ +out_dir: target/exp +log_dir: tensorboard/postfilter_mgc + +# Use automatic mixed precision training or not +# only works on supported GPUs +use_amp: true + +# steps can either be specified by steps or epochs +max_train_steps: -1 +nepochs: 100 +checkpoint_epoch_interval: 40 + +# [mgc, lf0, vuv, bap, vib, vib_flags] +adv_streams: [false, false, false, true, false, false] + +# GAN type (lsgan or vanilla-gan) +gan_type: lsgan + +mse_weight: 0.0 +adv_weight: 1.0 +fm_weight: 10.0 + +mask_nth_mgc_for_adv_loss: 0 + +# Mask out unvoiced frames in the adversarial loss +vuv_mask: true + +stream_wise_loss: false +use_detect_anomaly: false + +optim: + netG: + optimizer: + name: RAdam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 20 + gamma: 0.5 + clip_norm: 1.0 + netD: + optimizer: + name: RAdam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 20 + gamma: 0.5 + clip_norm: 1.0 + +resume: + netG: + checkpoint: + load_optimizer: false + netD: + checkpoint: + load_optimizer: false + +cudnn: + benchmark: false + deterministic: true diff --git a/train/conf/train/postfilter/train/mgc_cycle.yaml b/train/conf/train/postfilter/train/mgc_cycle.yaml new file mode 100644 index 0000000..db02c17 --- /dev/null +++ b/train/conf/train/postfilter/train/mgc_cycle.yaml @@ -0,0 +1,74 @@ +out_dir: target/exp +log_dir: tensorboard/postfilter_mgc + +# Use automatic mixed precision training or not +# only works on supported GPUs +use_amp: true + +# steps can either be specified by steps or epochs +max_train_steps: -1 +nepochs: 200 +checkpoint_epoch_interval: 100 + +# [mgc, lf0, vuv, bap, vib, vib_flags] +adv_streams: [false, false, false, true, false, false] + +# GAN type (lsgan or vanilla-gan) +gan_type: lsgan + +mse_weight: 0.0 +adv_weight: 1.0 +fm_weight: 10.0 + +mask_nth_mgc_for_adv_loss: 0 +vuv_mask: true + +# Don't set the value > 0 unless you are sure what you are doing +# mask 0 to n-th mgc for adversarial loss +# e.g, for n=2, 0-th and 1-th mgc coefficients will be masked +mask_nth_mgc_for_adv_loss: 2 +# Mask out unvoiced frames in the adversarial loss +vuv_mask: true + +stream_wise_loss: false +use_detect_anomaly: false + +optim: + netG: + optimizer: + name: RAdam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 50 + gamma: 0.5 + clip_norm: 1.0 + netD: + optimizer: + name: RAdam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 50 + gamma: 0.5 + clip_norm: 1.0 + +resume: + netG: + checkpoint: + load_optimizer: false + netD: + checkpoint: + load_optimizer: false + +cudnn: + benchmark: false + deterministic: true diff --git a/train/conf/train/postfilter/train/myconfig.yaml b/train/conf/train/postfilter/train/myconfig.yaml new file mode 100644 index 0000000..f044b36 --- /dev/null +++ b/train/conf/train/postfilter/train/myconfig.yaml @@ -0,0 +1,71 @@ +out_dir: target/exp +log_dir: tensorboard/postfilter + +# Use automatic mixed precision training or not +# only works on supported GPUs +use_amp: true + +# steps can either be specified by steps or epochs +max_train_steps: -1 +nepochs: 100 +checkpoint_epoch_interval: 20 + +# GAN type (lsgan or vanilla-gan) +gan_type: lsgan +# MSE loss weight +mse_weight: 0.0 +# Adversarial loss weight +adv_weight: 1.0 +# [mgc, lf0, vuv, bap, vib, vib_flags] +adv_streams: [true, false, false, true, false, false] +# Feature matching loss weight +fm_weight: 10.0 +# Don't set the value > 0 unless you are sure what you are doing +# mask 0 to n-th mgc for adversarial loss +# e.g, for n=2, 0-th and 1-th mgc coefficients will be masked +mask_nth_mgc_for_adv_loss: 0 +# Mask out unvoiced frames in the adversarial loss +vuv_mask: false + +stream_wise_loss: false +use_detect_anomaly: true + +optim: + netG: + optimizer: + name: Adam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 20 + gamma: 0.5 + clip_norm: 1.0 + netD: + optimizer: + name: Adam + params: + lr: 0.0001 + betas: [0.5, 0.9] + weight_decay: 0.0 + lr_scheduler: + name: StepLR + params: + step_size: 20 + gamma: 0.5 + clip_norm: 1.0 + +resume: + netG: + checkpoint: + load_optimizer: false + netD: + checkpoint: + load_optimizer: false + +cudnn: + benchmark: false + deterministic: true \ No newline at end of file diff --git a/train/conf/train/timelag/data/myconfig.yaml b/train/conf/train/timelag/data/myconfig.yaml index 06157d6..d56e17c 100644 --- a/train/conf/train/timelag/data/myconfig.yaml +++ b/train/conf/train/timelag/data/myconfig.yaml @@ -1,5 +1,3 @@ -# @package _group_ - # training set train_no_dev: in_dir: @@ -11,6 +9,18 @@ dev: out_dir: # data loader -num_workers: 4 -batch_size: 8 -pin_memory: true +num_workers: 2 +batch_size: 64 +pin_memory: true + +# Filter long segments that easily cause OOM error +filter_long_segments: false +# If a segment is longer than this value, it will not be used for training +# 30 [sec] / 0.005 [sec] = 6000 [frames] +filter_num_frames: 6000 + +# mini-batch sampling +# If max_time_frames is specified, (max_time_frames) frames are randomly sampled +# to create a mini-batch. Otherwise, all frames are used. +# consider setting the value (e.g., 256 or 512) to avoid GPU OOM. +max_time_frames: -1 diff --git a/train/conf/train/timelag/data/myconfig_rmdn.yaml b/train/conf/train/timelag/data/myconfig_rmdn.yaml deleted file mode 100644 index 66f6adb..0000000 --- a/train/conf/train/timelag/data/myconfig_rmdn.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# @package _group_ - -# training set -train_no_dev: - in_dir: - out_dir: - -# development set -dev: - in_dir: - out_dir: - -# data loader -num_workers: 8 -batch_size: 16 -pin_memory: true diff --git a/train/conf/train/timelag/model/timelag_custom.yaml b/train/conf/train/timelag/model/timelag_custom.yaml new file mode 100644 index 0000000..bffab0c --- /dev/null +++ b/train/conf/train/timelag/model/timelag_custom.yaml @@ -0,0 +1,14 @@ +stream_sizes: [1] +has_dynamic_features: [false] +stream_weights: [1] + +netG: + _target_: nnsvs.model.MDNv2 + in_dim: 278 + out_dim: 1 + hidden_dim: 256 + dropout: 0.2 + num_layers: 3 + num_gaussians: 4 + dim_wise: true + init_type: "kaiming_normal" diff --git a/train/conf/train/timelag/model/timelag_ffn.yaml b/train/conf/train/timelag/model/timelag_ffn.yaml deleted file mode 100644 index 29bdc05..0000000 --- a/train/conf/train/timelag/model/timelag_ffn.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# @package _group_ - -stream_sizes: [1] -has_dynamic_features: [false] -stream_weights: [1] - -netG: - _target_: nnsvs.model.FeedForwardNet - in_dim: 221 - out_dim: 1 - hidden_dim: 128 - num_layers: 2 - dropout: 0.5 diff --git a/train/conf/train/timelag/model/timelag_rmdn.yaml b/train/conf/train/timelag/model/timelag_rmdn.yaml deleted file mode 100644 index a87827b..0000000 --- a/train/conf/train/timelag/model/timelag_rmdn.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# @package _group_ - -stream_sizes: [1] -has_dynamic_features: [false] -stream_weights: [1] - -netG: - _target_: nnsvs.model.RMDN - in_dim: 206 - out_dim: 1 - hidden_dim: 256 - num_layers: 2 - bidirectional: true - dropout: 0.5 - num_gaussians: 4 diff --git a/train/conf/train/timelag/train/myconfig.yaml b/train/conf/train/timelag/train/myconfig.yaml index 1369569..1b2dd56 100644 --- a/train/conf/train/timelag/train/myconfig.yaml +++ b/train/conf/train/timelag/train/myconfig.yaml @@ -1,29 +1,34 @@ -# @package _group_ +out_dir: target/exp +log_dir: tensorboard/timelag -out_dir: exp -nepochs: 50 -checkpoint_epoch_interval: 20 +use_amp: false -stream_wise_loss: false -use_detect_anomaly: true +max_train_steps: -1 +nepochs: 100 +checkpoint_epoch_interval: 30 + +#feats_criterion: mse + +stream_wise_loss: false +use_detect_anomaly: false optim: optimizer: - name: RAdam + name: RAdam params: - lr: 0.001 - betas: [0.9, 0.999] - weight_decay: 0.0 + lr: 0.001 + betas: [0.9, 0.999] + weight_decay: 0.0 lr_scheduler: - name: StepLR + name: StepLR params: - step_size: 20 - gamma: 0.5 + step_size: 20 + gamma: 0.5 resume: - checkpoint: - load_optimizer: false + checkpoint: + load_optimizer: false cudnn: - benchmark: false - deterministic: true + benchmark: false + deterministic: true diff --git a/train/conf/train/timelag/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml b/train/conf/train/timelag/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml deleted file mode 100644 index 29e0f68..0000000 --- a/train/conf/train/timelag/train/myconfig_RAdam_CosineAnnealingWarmRestarts.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 140 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.002 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: CosineAnnealingWarmRestarts - params: - T_0: 20 - T_mult: 0.5 - eta_min : 0 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/timelag/train/myconfig_RAdam_StepLR.yaml b/train/conf/train/timelag/train/myconfig_RAdam_StepLR.yaml deleted file mode 100644 index 05da36e..0000000 --- a/train/conf/train/timelag/train/myconfig_RAdam_StepLR.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 100 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.001 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: StepLR - params: - step_size: 20 - gamma: 0.5 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/conf/train/timelag/train/myconfig_RAdam_StepLR_2nd.yaml b/train/conf/train/timelag/train/myconfig_RAdam_StepLR_2nd.yaml deleted file mode 100644 index 0353e03..0000000 --- a/train/conf/train/timelag/train/myconfig_RAdam_StepLR_2nd.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# @package _group_ - -out_dir: exp -nepochs: 50 -checkpoint_epoch_interval: 20 - -stream_wise_loss: false -use_detect_anomaly: true - -optim: - optimizer: - name: RAdam - params: - lr: 0.0001 - betas: [0.9, 0.999] - weight_decay: 0 - lr_scheduler: - name: StepLR - params: - step_size: 10 - gamma: 0.5 - verbose: True - -resume: - checkpoint: - load_optimizer: false - -cudnn: - benchmark: false - deterministic: true diff --git a/train/config.yaml b/train/config.yaml index 5555b04..4aa5ef3 100644 --- a/train/config.yaml +++ b/train/config.yaml @@ -1,89 +1,73 @@ -### General settings nnsvs_root: nnsvs -## Singer's name -spk: unnamed -## exp tag(for managing experiments) -tag: portable_enunu_training_kit +spk: ExpModel +tag: cp6 -## Output directory -# All the generated labels, intermediate files, and segmented wav files -# will be saved in the following directory -out_dir: data +out_dir: target/data -## Songs to be excluded from trainig. exclude_songs: [] -## Lyric -> Phonemes table -## HTS-style question used for extracting musical/linguistic context from musicxml files -table_path: dic/kana2phonemes_002_oto2lab.table -question_path: hed/jp_qst_crazy_mono_013_enunu_221D.hed +table_path: source/dic/hangul_ext.table +question_path: source/hed/korean_question_v2.1.hed -# Audio sampling rate -# [CAUTION] Changing sample_rate may affect the dimension number of acoustic features. -# DO NOT CHANGE this unless you know the relationship between the dim of bap and sample_rate. sample_rate: 44100 - -########################################################### -# DATA PREPARATION SETTING (STAGE 0) # -########################################################### stage0: - ## Directory of unzipped singing voice database - db_root: singing_database + db_root: source/singing_database + lang_mode: kor + ### How to segment LAB and WAV before training # Changing this config might help you avoid "SegmentationFault" on stage 1. # Choices are [null, long, middle, short] (middle is recommended) - # If "never", LAB is not devided. # If "long", LAB is devided at "pau"-"pau" or "pau""-"sil phoneme pattern. # If "middle", LAB is devided at the start of each "pau"s. # If "short", LAB is devided at the start of each "pau" phoneme. segmentation_mode: middle - middle_frequency: 3 + middle_frequency: 2 # Choices are [strict, middle, lenient] vowel_duration_check: middle - -########################################################### -# FEATURE EXTRACTION SETTING (STAGE 1) # -########################################################### +# stage 1 timelag_features: defaults duration_features: defaults acoustic_features: static_deltadelta -# optional arg of "aperiodicity = pyworld.d4c()" in nnsvs/data/data_source.py (line 155) -# d4c_threshold: 0.58 +trajectory_smoothing: false +trajectory_smoothing_cutoff: 50 + +# test arguments for proper f0 range +# f0_floor: 150 +# f0_ceil: 700 -########################################################### -# TRAINING SETTING (STAGE 2 - STAGE 4) # -########################################################### +# test argument for correct VUV +correct_vuv: false -# Models -# To customize, put your config or change ones in -# conf/train/{timelag,duration,acoustic}/ and -# specify the config name below -# NOTE: *_model: model definition, *_train: general train configs, *_data: data configs (e.g., batch size) +# test argument for relative_f0 +relative_f0: false -acoustic_model: acoustic_conv + +# stage 4 +# symlink during training in notebook. +acoustic_model: acoustic_custom acoustic_train: myconfig acoustic_data: myconfig -duration_model: duration_lstm +duration_model: duration_custom duration_train: myconfig duration_data: myconfig -timelag_model: timelag_ffn +timelag_model: timelag_custom timelag_train: myconfig timelag_data: myconfig -# Pretrained model dir (leave empty to disable) -# pretrained_expdir: exp/ritsu_enunu_rmdn_0831 -pretrained_expdir: +# postfilter stuff +postfilter_model: postfilter_merged +postfilter_train: mgc +postfilter_data: myconfig +pretrained_expdir: -########################################################### -# SYNTHESIS SETTING (STAGE 6) # -########################################################### +# stage 6 timelag_synthesis: defaults duration_synthesis: defaults acoustic_synthesis: defaults @@ -91,4 +75,9 @@ acoustic_synthesis: defaults # latest.pth or best.pth are recommended timelag_eval_checkpoint: best_loss.pth duration_eval_checkpoint: best_loss.pth -acoustic_eval_checkpoint: best_loss.pth +acoustic_eval_checkpoint: latest.pth + +# # vocoder stuff (stage 8) +vocoder_model: hn-sinc-nsf_sr44k_pwgD +pretrained_vocoder_checkpoint: +vocoder_eval_checkpoint: diff --git a/train/config_rmdn.yaml b/train/config_rmdn.yaml deleted file mode 100644 index e12397d..0000000 --- a/train/config_rmdn.yaml +++ /dev/null @@ -1,97 +0,0 @@ -### General settings -nnsvs_root: nnsvs -## Singer's name -spk: unnamed -## exp tag(for managing experiments) -tag: portable_enunu_training_kit - -## Output directory -# All the generated labels, intermediate files, and segmented wav files -# will be saved in the following directory -out_dir: data - -## Songs to be excluded from trainign. -exclude_songs: [] - -## Lyric -> Phonemes table -## HTS-style question used for extracting musical/linguistic context from musicxml files -table_path: dic/kana2phonemes_002_oto2lab.table -question_path: hed/jp_qst_crazy_mono_014_enunu_mdn_206D.hed - -# Audio sampling rate -# [CAUTION] Changing sample_rate may affect the dimension number of acoustic features. -# DO NOT CHANGE this unless you know the relationship between the dim of bap and sample_rate. -sample_rate: 44100 - - -########################################################### -# DATA PREPARATION SETTING (STAGE 0) # -########################################################### -stage0: - ## Directory of unzipped singing voice database - db_root: singing_database - ### How to segment LAB and WAV before training - # Changing this config might help you avoid "SegmentationFault" on stage 1. - # Choices are [null, long, middle, short] (middle is recommended) - # If "never", LAB is not devided. - # If "long", LAB is devided at "pau"-"pau" or "pau""-"sil phoneme pattern. - # If "middle", LAB is devided at the start of each "pau"s. - # If "short", LAB is devided at the start of each "pau" phoneme. - segmentation_mode: middle - middle_frequency: 7 - - # Choices are [strict, middle, lenient] - vowel_duration_check: middle - - -########################################################### -# FEATURE EXTRACTION SETTING (STAGE 1) # -########################################################### -timelag_features: defaults -duration_features: defaults -acoustic_features: static_deltadelta -# optional arg of "aperiodicity = pyworld.d4c()" in nnsvs/data/data_source.py (line 155) -# d4c_threshold: 0.73 - - -########################################################### -# TRAINING SETTING (STAGE 2 - STAGE 4) # -########################################################### - -# Models -# To customize, put your config or change ones in -# conf/train/{timelag,duration,acoustic}/ and -# specify the config name below -# NOTE: *_model: model definition, *_train: general train configs, *_data: data configs (e.g., batch size) - -acoustic_model: acoustic_rmdn -acoustic_train: myconfig_RAdam_StepLR -acoustic_train_2nd: myconfig_RAdam_StepLR_2nd -acoustic_data: myconfig_rmdn - -duration_model: duration_rmdn -duration_train: myconfig_RAdam_StepLR -duration_train_2nd: myconfig_RAdam_StepLR_2nd -duration_data: myconfig_rmdn - -timelag_model: timelag_rmdn -timelag_train: myconfig_RAdam_StepLR -timelag_train_2nd: myconfig_RAdam_StepLR_2nd -timelag_data: myconfig_rmdn - -# Pretrained model dir (leave empty to disable) -# pretrained_expdir: exp/ritsu_enunu_rmdn_0831 -pretrained_expdir: - - -########################################################### -# SYNTHESIS SETTING (STAGE 6) # -########################################################### -timelag_synthesis: defaults -duration_synthesis: defaults -acoustic_synthesis: defaults - -# latest.pth or best.pth are recommended -timelag_eval_checkpoint: best_loss.pth -duration_eval_checkpoint: best_loss.pth -acoustic_eval_checkpoint: best_loss.pth diff --git a/train/dic/README.md b/train/dic/README.md deleted file mode 100644 index ce866e8..0000000 --- a/train/dic/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# dic - -かな→ローマ字変換表 - -## ファイル説明 - -### kana2phonemes_001_oto2lab.table - -- 2021-07-15 作成 -- `ふゅ` → `fy u` を追加 - -- `フュ` → `fy U` を追加 - diff --git a/train/dic/kana2phonemes_001_oto2lab.table b/train/dic/kana2phonemes_001_oto2lab.table deleted file mode 100644 index 5bec81b..0000000 --- a/train/dic/kana2phonemes_001_oto2lab.table +++ /dev/null @@ -1,338 +0,0 @@ -息 br -br br -pau pau -R pau -sil sil -ア A -あ a -イ I -い i -いぇ y e -ウ U -う u -ヴ v u -ヴァ v A -ヴぁ v a -ウィ w I -うぃ w i -ヴぃ v i -ヴゥ v U -ヴぅ v u -ウェ w E -うぇ w e -ヴェ v E -ヴぇ v e -ウォ w O -うぉ w o -ヴォ v O -ヴぉ v o -エ E -え e -オ O -お o -カ k A -か k a -ガ g A -が g a -キ k I -き k i -ギ g I -ぎ g i -キェ ky E -きぇ ky e -ギェ gy E -ぎぇ gy e -キャ ky A -きゃ ky a -ギャ gy A -ぎゃ gy a -キュ ky U -きゅ ky u -ギュ gy U -ぎゅ gy u -キョ ky O -きょ ky o -ギョ gy O -ぎょ gy o -ク k U -く k u -グ g U -ぐ g u -クァ k w A -くぁ k w a -グァ g w A -ぐぁ g w a -クィ k w I -くぃ k w i -グィ g w I -ぐぃ g w i -クゥ k w U -くぅ k w u -グゥ g w U -ぐぅ g w u -クェ k w E -くぇ k w e -グェ g w E -ぐぇ g w e -クォ k w O -くぉ k w o -グォ g w O -ぐぉ g w o -ぐゎ g w a -ぐゎ g w A -ケ k E -け k e -ゲ g E -げ g e -コ k O -こ k o -ゴ g O -ご g o -サ s A -さ s a -ザ z A -ざ z a -シ sh I -し sh i -ジ j I -じ j i -シィ s I -しぃ s i -シェ sh E -しぇ sh e -ジェ j E -じぇ j e -シャ sh A -しゃ sh a -ジャ j A -じゃ j a -シュ sh U -しゅ sh u -ジュ j U -じゅ j u -ショ sh O -しょ sh o -ジョ j O -じょ j o -ス s U -す s u -ズ z U -ず z u -スィ s I -すぃ s i -ズィ z I -ずぃ z i -セ s E -せ s e -ゼ z E -ぜ z e -ソ s O -そ s o -ゾ z O -ぞ z o -タ t A -た t a -ダ d A -だ d a -チ ch I -ち ch i -ヂ j I -チェ ch E -ちぇ ch e -ヂェ j E -ぢぇ j e -チャ ch A -ちゃ ch a -ヂャ j A -ぢゃ j a -チュ ch U -ちゅ ch u -ヂュ j U -チョ ch O -ちょ ch o -ヂョ j O -ッ cl -っ cl -ツ ts U -つ ts u -ヅ z U -づ z u -ツァ ts A -つぁ ts a -ヅァ z A -ツィ ts I -つぃ ts i -ヅィ z I -づぃ z i -ツェ ts E -つぇ ts e -ヅェ z E -づぇ z e -ツォ ts O -つぉ ts o -ヅォ z O -づぉ z o -テ t E -て t e -デ d E -で d e -ティ t I -てぃ t i -ディ d I -でぃ d i -でぇ dy e -テャ ty A -てゃ ty a -デャ dy A -でゃ dy a -テュ ty U -てゅ ty u -デュ dy U -でゅ dy u -テョ ty O -てょ ty o -デョ dy O -でょ dy o -ト t O -と t o -ド d O -ど d o -トゥ t U -とぅ t u -ドゥ d U -どぅ d u -ナ n A -な n a -ニ n I -に n i -ニェ ny E -にぇ ny e -ニャ ny A -にゃ ny a -ニュ ny U -にゅ ny u -ニョ ny O -にょ ny o -ヌ n U -ぬ n u -ネ n E -ね n e -ノ n O -の n o -ハ h A -は h a -バ b A -ば b a -パ p A -ぱ p a -ヒ h I -ひ h i -ビ B I -び b i -ピ p I -ぴ p i -ヒェ hy E -ひぇ hy e -ビェ by E -びぇ by e -ピェ py E -ぴぇ py e -ヒャ hy A -ひゃ hy a -ビャ by A -びゃ by a -ピャ py A -ぴゃ py a -ヒュ hy U -ひゅ hy u -ビュ by U -びゅ by u -ピュ py U -ぴゅ py u -ヒョ hy O -ひょ hy o -ビョ by O -びょ by o -ピョ py O -ぴょ py o -フ f U -ふ f u -ブ b U -ぶ b u -プ p U -ぷ p u -ファ f A -ふぁ f a -フィ f I -ふぃ f i -フェ f E -ふぇ f e -フォ f O -ふぉ f o -ヘ h E -へ h e -べ b e -ペ p E -ぺ p e -ホ h O -ほ h o -ボ B O -ぼ b o -ポ p O -ぽ p o -マ m A -ま m a -ミ m I -み m i -ミェ my E -みぇ my e -ミャ my A -みゃ my a -ミュ my U -みゅ my u -ミョ my O -みょ my o -ム m U -む m u -メ m E -め m e -モ m O -も m o -ヤ y A -や y a -ユ y U -ゆ y u -ヨ y O -よ y o -ラ r A -ら r a -リ r I -り r i -りぇ ry e -りゃ ry a -りゅ ry u -りょ ry o -ル r U -る r u -レ r E -れ r e -ロ r O -ろ r o -ワ w A -わ w a -ヰ I -ゐ i -ヱ E -ゑ e -ヲ O -を o -ン N -ん N -フャ fy A -ふゃ fy A -フュ fy U -ふゅ fy u -フィェ fy E -ふぃぇ fy e -フョ fy O -ふょ fy o diff --git a/train/dic/kana2phonemes_002_oto2lab.table b/train/dic/kana2phonemes_002_oto2lab.table deleted file mode 100644 index 72f7441..0000000 --- a/train/dic/kana2phonemes_002_oto2lab.table +++ /dev/null @@ -1,382 +0,0 @@ -息 br -br br -pau pau -R pau -sil sil -ア A -あ a -イ I -い i -いぇ y e -ウ U -う u -ヴ v u -ヴァ v A -ヴぁ v a -ウィ w I -うぃ w i -ヴぃ v i -ヴゥ v U -ヴぅ v u -ウェ w E -うぇ w e -ヴェ v E -ヴぇ v e -ウォ w O -うぉ w o -ヴォ v O -ヴぉ v o -エ E -え e -オ O -お o -カ k A -か k a -ガ g A -が g a -キ k I -き k i -ギ g I -ぎ g i -キェ ky E -きぇ ky e -ギェ gy E -ぎぇ gy e -キャ ky A -きゃ ky a -ギャ gy A -ぎゃ gy a -キュ ky U -きゅ ky u -ギュ gy U -ぎゅ gy u -キョ ky O -きょ ky o -ギョ gy O -ぎょ gy o -ク k U -く k u -グ g U -ぐ g u -クァ k w A -くぁ k w a -グァ g w A -ぐぁ g w a -クィ k w I -くぃ k w i -グィ g w I -ぐぃ g w i -クゥ k w U -くぅ k w u -グゥ g w U -ぐぅ g w u -クェ k w E -くぇ k w e -グェ g w E -ぐぇ g w e -クォ k w O -くぉ k w o -グォ g w O -ぐぉ g w o -グヮ g w A -ぐゎ g w a -ケ k E -け k e -ゲ g E -げ g e -コ k O -こ k o -ゴ g O -ご g o -サ s A -さ s a -ザ z A -ざ z a -シ sh I -し sh i -ジ j I -じ j i -シィ s I -しぃ s i -シェ sh E -しぇ sh e -ジェ j E -じぇ j e -シャ sh A -しゃ sh a -ジャ j A -じゃ j a -シュ sh U -しゅ sh u -ジュ j U -じゅ j u -ショ sh O -しょ sh o -ジョ j O -じょ j o -ス s U -す s u -ズ z U -ず z u -スィ s I -すぃ s i -ズィ z I -ずぃ z i -セ s E -せ s e -ゼ z E -ぜ z e -ソ s O -そ s o -ゾ z O -ぞ z o -タ t A -た t a -ダ d A -だ d a -チ ch I -ち ch i -チェ ch E -ちぇ ch e -チャ ch A -ちゃ ch a -ヂャ j A -ぢゃ j a -チュ ch U -ちゅ ch u -チョ ch O -ちょ ch o -ッ cl -っ cl -ツ ts U -つ ts u -ヅ z U -づ z u -ツァ ts A -つぁ ts a -ヅァ z A -ツィ ts I -つぃ ts i -ヅィ z I -づぃ z i -ツェ ts E -つぇ ts e -ヅェ z E -づぇ z e -ツォ ts O -つぉ ts o -ヅォ z O -づぉ z o -テ t E -て t e -デ d E -で d e -ティ t I -てぃ t i -ディ d I -でぃ d i -でぇ dy e -テャ ty A -てゃ ty a -デャ dy A -でゃ dy a -テュ ty U -てゅ ty u -デュ dy U -でゅ dy u -テョ ty O -てょ ty o -デョ dy O -でょ dy o -ト t O -と t o -ド d O -ど d o -トゥ t U -とぅ t u -ドゥ d U -どぅ d u -ナ n A -な n a -ニ n I -に n i -ニェ ny E -にぇ ny e -ニャ ny A -にゃ ny a -ニュ ny U -にゅ ny u -ニョ ny O -にょ ny o -ヌ n U -ぬ n u -ネ n E -ね n e -ノ n O -の n o -ハ h A -は h a -バ b A -ば b a -パ p A -ぱ p a -ヒ h I -ひ h i -ビ B I -び b i -ピ p I -ぴ p i -ヒェ hy E -ひぇ hy e -ビェ by E -びぇ by e -ピェ py E -ぴぇ py e -ヒャ hy A -ひゃ hy a -ビャ by A -びゃ by a -ピャ py A -ぴゃ py a -ヒュ hy U -ひゅ hy u -ビュ by U -びゅ by u -ピュ py U -ぴゅ py u -ヒョ hy O -ひょ hy o -ビョ by O -びょ by o -ピョ py O -ぴょ py o -フ f U -ふ f u -ブ b U -ぶ b u -プ p U -ぷ p u -ファ f A -ふぁ f a -フィ f I -ふぃ f i -フェ f E -ふぇ f e -フォ f O -ふぉ f o -ヘ h E -へ h e -べ b e -ペ p E -ぺ p e -ホ h O -ほ h o -ボ B O -ぼ b o -ポ p O -ぽ p o -マ m A -ま m a -ミ m I -み m i -ミェ my E -みぇ my e -ミャ my A -みゃ my a -ミュ my U -みゅ my u -ミョ my O -みょ my o -ム m U -む m u -メ m E -め m e -モ m O -も m o -ヤ y A -や y a -ユ y U -ゆ y u -ヨ y O -よ y o -ラ r A -ら r a -リ r I -り r i -りぇ ry e -りゃ ry a -りゅ ry u -りょ ry o -ル r U -る r u -レ r E -れ r e -ロ r O -ろ r o -ワ w A -わ w a -ヰ I -ゐ i -ヱ E -ゑ e -ヲ O -を o -ン N -ん N -フャ fy A -ふゃ fy A -フュ fy U -ふゅ fy u -フィェ fy E -ふぃぇ fy e -フョ fy O -ふょ fy o -ヴゅ vy u -ヴュ vy U -うぅ w u -ウゥ w U -てぇ ty e -テェ ty E -てぃぇ ty e -ティェ ty E -ぢ j i -ヂ j I -ぢゅ j u -ヂュ j U -ぢぇ j e -ヂェ j E -ぢょ j o -ヂョ j O -・あ GlottalStop a -・ア GlottalStop A -・い GlottalStop i -・イ GlottalStop I -・う GlottalStop u -・ウ GlottalStop U -・え GlottalStop e -・エ GlottalStop E -・お GlottalStop o -・オ GlottalStop O -・ん GlottalStop N -’あ Edge a -’ア Edge A -’い Edge i -’イ Edge I -’う Edge u -’ウ Edge U -’え Edge e -’エ Edge E -’お Edge o -’オ Edge O -’ん Edge N -あ’ Edge a -ア’ Edge A -い’ Edge i -イ’ Edge I -う’ Edge u -ウ’ Edge U -え’ Edge e -エ’ Edge E -お’ Edge o -オ’ Edge O -ん’ Edge N diff --git a/train/enuconfig.yaml b/train/enuconfig.yaml index 6b87b0e..5e958be 100644 --- a/train/enuconfig.yaml +++ b/train/enuconfig.yaml @@ -1,10 +1,11 @@ # Copyright (c) 2020 Ryuichi Yamamoto # Copyright (c) 2020 oatsu -# Is trained with ENUNU specific recipe trained_for_enunu: true -# Table (lyric -> phonemes) file path. -table_path: dic/kana2phonemes_002_oto2lab.table + +table_path: source/dic/hangul_ext.table +question_path: source/hed/korean_question_v2.1.hed +lang_mode: kor defaults: - hydra/job_logging: colorlog @@ -12,45 +13,54 @@ defaults: verbose: 100 -# Setting for output WAV file. sample_rate: 44100 gain_normalize: false -# How was the model trained. frame_period: 5 -question_path: hed/jp_qst_crazy_mono_014_enunu_mdn_206D.hed log_f0_conditioning: true +vibrato_scale: 1.0 # Use ground truth duration or not # if true, time-lag and duration models will not be used. ground_truth_duration: false - # If not empty, try to search statisics in the directory -stats_dir: dump/unnamed/norm +stats_dir: target/dump/ExpModel/norm # If not empty, try to search models in the directory -model_dir: exp/unnamed_portable_enunu_training_kit +model_dir: model_exp/ExpModel_cp6 acoustic: - question_path: null - checkpoint: best_loss.pth + question_path: source/hed/korean_question_v2.1.hed + checkpoint: latest.pth in_scaler_path: null out_scaler_path: null # model_yaml: subphone_features: coarse_coding - relative_f0: true - post_filter: true + relative_f0: false + # 'post_ftiler' is legacy option for ENUNU prior to 5.1. + post_filter_type: merlin + # change 'merlin' to 'nnsvs' if you trained a postfilter model duration: + question_path: source/hed/korean_question_v2.1.hed checkpoint: best_loss.pth - question_path: null in_scaler_path: null out_scaler_path: null timelag: - question_path: null + question_path: source/hed/korean_question_v2.1.hed checkpoint: best_loss.pth in_scaler_path: null out_scaler_path: null allowed_range: [-150, 150] allowed_range_rest: [-150, 250] + +postfilter: + question_path: source/hed/korean_question_v2.1.hed + checkpoint: latest.pth + in_scaler_path: null + out_scaler_path: null + +vocoder: + checkpoint: latest.pkl + in_scaler_path: null \ No newline at end of file diff --git a/train/hed/LICENSE.md b/train/hed/LICENSE.md deleted file mode 100644 index 5a50686..0000000 --- a/train/hed/LICENSE.md +++ /dev/null @@ -1,55 +0,0 @@ -# LICENSE - -Modified BSD License - -## Modified BSD License - -### Target files - -- \*.hed - -### License text - - /* ----------------------------------------------------------------- */ - /* The HMM-Based Speech Synthesis System (HTS) */ - /* developed by HTS Working Group */ - /* http://hts.sp.nitech.ac.jp/ */ - /* ----------------------------------------------------------------- */ - /* */ - /* Copyright (c) 2001-2015 Nagoya Institute of Technology */ - /* Department of Computer Science */ - /* */ - /* 2001-2008 Tokyo Institute of Technology */ - /* Interdisciplinary Graduate School of */ - /* Science and Engineering */ - /* */ - /* All rights reserved. */ - /* */ - /* Redistribution and use in source and binary forms, with or */ - /* without modification, are permitted provided that the following */ - /* conditions are met: */ - /* */ - /* - Redistributions of source code must retain the above copyright */ - /* notice, this list of conditions and the following disclaimer. */ - /* - Redistributions in binary form must reproduce the above */ - /* copyright notice, this list of conditions and the following */ - /* disclaimer in the documentation and/or other materials provided */ - /* with the distribution. */ - /* - Neither the name of the HTS working group nor the names of its */ - /* contributors may be used to endorse or promote products derived */ - /* from this software without specific prior written permission. */ - /* */ - /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND */ - /* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, */ - /* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ - /* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ - /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS */ - /* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */ - /* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */ - /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, */ - /* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ - /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, */ - /* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY */ - /* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ - /* POSSIBILITY OF SUCH DAMAGE. */ - /* ----------------------------------------------------------------- */ \ No newline at end of file diff --git a/train/hed/README.md b/train/hed/README.md deleted file mode 100644 index 94ac951..0000000 --- a/train/hed/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# hed - -NNSVS向けHTSフルコンテキストラベル用ファイル - - - -# ファイル内容 - -### jp_qst_crazy_mono_012_enunu_212D - -- 010 ベース -- 音素 `fy` 関連の QS を追加 - -### jp_qst_crazy_mono_013_enunu_221D - -- 012 ベース -- 音素を追加 - - `GlottalStop` - - `Edge` - -### jp_qst_crazy_mono_014_enunu_rmdn_206D - -- 013 ベース -- RMDNの活舌対策に、子音や母音のグループを削減 - - 有声母音と無声母音のグループを削除 - - 有声子音と無声子音のグループを削除 - - 拗音のグループを削除 - -### jp_qst_crazy_mono_015_enunu_rmdn_209D - -- 014 ベース -- BPM 情報を追加 diff --git a/train/hed/jp_qst001_nnsvs.hed b/train/hed/jp_qst001_nnsvs.hed deleted file mode 100644 index fcd390c..0000000 --- a/train/hed/jp_qst001_nnsvs.hed +++ /dev/null @@ -1,465 +0,0 @@ -QS "C-Phone_Language_Independent_Silence" {s@*} -QS "C-Phone_Language_Independent_Pause" {p@*} -QS "C-Phone_Language_Independent_Break" {b@*} -QS "C-Phone_Language_Independent_Consonant" {c@*} -QS "C-Phone_Language_Independent_Vowel" {v@*} - -QS "L-Phone_Yuuseion" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "L-Phone_Museion" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "L-Phone_Muon" {*^sil-*,*^pau-*} - -QS "L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "L-Phone_Yuusei_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*} -QS "L-Phone_Museika_Boin" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "L-Phone_Maejita_Boin" {*^i-*,*^e-*,*^I-*,*^E-*} -QS "L-Phone_Yuusei_Maejita_Boin" {*^i-*,*^e-*} -QS "L-Phone_Museika_Maejita_Boin" {*^I-*,*^E-*} -QS "L-Phone_Atojita_Boin" {*^a-*,*^u-*,*^o-*,*^A-*,*^U-*,*^O-*} -QS "L-Phone_Yuusei_Atojita_Boin" {*^a-*,*^u-*,*^o-*} -QS "L-Phone_Museika_Atojita_Boin" {*^A-*,*^U-*,*^O-*} -QS "L-Phone_Sema_Boin" {*^i-*,*^u-*,*^I-*,*^U-*} -QS "L-Phone_Yuusei_Sema_Boin" {*^i-*,*^u-*} -QS "L-Phone_Museika_Sema_Boin" {*^I-*,*^U-*} -QS "L-Phone_Han_Sema_Boin" {*^e-*,*^o-*,*^E-*,*^O-*} -QS "L-Phone_Yuusei_Han_Sema_Boin" {*^e-*,*^o-*} -QS "L-Phone_Museika_Han_Sema_Boin" {*^E-*,*^O-*} -QS "L-Phone_Hiro_Boin" {*^a-*,*^A-*} -QS "L-Phone_Yuusei_Hiro_Boin" {*^a-*} -QS "L-Phone_Museika_Hiro_Boin" {*^A-*} - -QS "L-Phone_Boin_A" {*^a-*,*^A-*} -QS "L-Phone_Boin_I" {*^i-*,*^I-*} -QS "L-Phone_Boin_U" {*^u-*,*^U-*} -QS "L-Phone_Boin_E" {*^e-*,*^E-*} -QS "L-Phone_Boin_O" {*^o-*,*^O-*} - -QS "L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "L-Phone_Kuchibiruon" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^f-*,*^p-*,*^py-*} -QS "L-Phone_Hagukion" {*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*} -QS "L-Phone_Kougaion" {*^g-*,*^gy-*,*^y-*,*^k-*,*^ky-*} -QS "L-Phone_Seimonon" {*^h-*,*^hy-*} -QS "L-Phone_Masatsuon" {*^v-*,*^z-*,*^j-*,*^f-*,*^s-*,*^sh-*,*^h-*,*^hy-*} -QS "L-Phone_Hasatsuon" {*^ts-*,*^ch-*} -QS "L-Phone_Haretsuon" {*^b-*,*^by-*,*^d-*,*^dy-*,*^g-*,*^gy-*,*^p-*,*^py-*,*^t-*,*^ty-*,*^k-*,*^ky-*} -QS "L-Phone_Bion" {*^m-*,*^my-*,*^n-*,*^ny-*,*^N-*} -QS "L-Phone_Han_Boin" {*^w-*,*^r-*,*^ry-*,*^y-*} - -QS "L-Phone_Yuusei_Kuchibiru_Haretsuon" {*^b-*,*^by-*} -QS "L-Phone_Yuusei_Kuchibiru_Bion" {*^m-*,*^my-*} -QS "L-Phone_Yuusei_Haguki_Masatsuon" {*^z-*,*^j-*} -QS "L-Phone_Yuusei_Haguki_Haretsuon" {*^d-*,*^dy-*} -QS "L-Phone_Yuusei_Haguki_Bion" {*^n-*,*^ny-*,*^N-*} -QS "L-Phone_Yuusei_Haguki_Han_Boin" {*^r-*,*^ry-*} -QS "L-Phone_Yuusei_Kougai_Haretsuon" {*^g-*,*^gy-*} -QS "L-Phone_Musei_Kuchibiru_Haretsuon" {*^p-*,*^py-*} -QS "L-Phone_Musei_Haguki_Masatsuon" {*^s-*,*^sh-*} -QS "L-Phone_Musei_Haguki_Hasatsuon" {*^ts-*,*^ch-*} -QS "L-Phone_Musei_Haguki_Haretsuon" {*^t-*,*^ty-*} -QS "L-Phone_Musei_Kougai_Haretsuon" {*^k-*,*^ky-*} -QS "L-Phone_Musei_Seimon_Masatsuon" {*^h-*,*^hy-*} - -QS "L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*} - -QS "L-Phone_A" {*^A-*} -QS "L-Phone_E" {*^E-*} -QS "L-Phone_I" {*^I-*} -QS "L-Phone_N" {*^N-*} -QS "L-Phone_O" {*^O-*} -QS "L-Phone_U" {*^U-*} -QS "L-Phone_a" {*^a-*} -QS "L-Phone_b" {*^b-*} -QS "L-Phone_br" {*^br-*} -QS "L-Phone_by" {*^by-*} -QS "L-Phone_ch" {*^ch-*} -QS "L-Phone_cl" {*^cl-*} -QS "L-Phone_d" {*^d-*} -QS "L-Phone_dy" {*^dy-*} -QS "L-Phone_e" {*^e-*} -QS "L-Phone_f" {*^f-*} -QS "L-Phone_g" {*^g-*} -QS "L-Phone_gy" {*^gy-*} -QS "L-Phone_h" {*^h-*} -QS "L-Phone_hy" {*^hy-*} -QS "L-Phone_i" {*^i-*} -QS "L-Phone_j" {*^j-*} -QS "L-Phone_k" {*^k-*} -QS "L-Phone_ky" {*^ky-*} -QS "L-Phone_m" {*^m-*} -QS "L-Phone_my" {*^my-*} -QS "L-Phone_n" {*^n-*} -QS "L-Phone_ny" {*^ny-*} -QS "L-Phone_o" {*^o-*} -QS "L-Phone_p" {*^p-*} -QS "L-Phone_pau" {*^pau-*} -QS "L-Phone_py" {*^py-*} -QS "L-Phone_r" {*^r-*} -QS "L-Phone_ry" {*^ry-*} -QS "L-Phone_s" {*^s-*} -QS "L-Phone_sh" {*^sh-*} -QS "L-Phone_sil" {*^sil-*} -QS "L-Phone_t" {*^t-*} -QS "L-Phone_ts" {*^ts-*} -QS "L-Phone_ty" {*^ty-*} -QS "L-Phone_u" {*^u-*} -QS "L-Phone_v" {*^v-*} -QS "L-Phone_w" {*^w-*} -QS "L-Phone_y" {*^y-*} -QS "L-Phone_z" {*^z-*} - -QS "C-Phone_Yuuseion" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "C-Phone_Museion" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "C-Phone_Muon" {*-sil+*,*-pau+*} - -QS "C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "C-Phone_Yuusei_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*} -QS "C-Phone_Museika_Boin" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "C-Phone_Maejita_Boin" {*-i+*,*-e+*,*-I+*,*-E+*} -QS "C-Phone_Yuusei_Maejita_Boin" {*-i+*,*-e+*} -QS "C-Phone_Museika_Maejita_Boin" {*-I+*,*-E+*} -QS "C-Phone_Atojita_Boin" {*-a+*,*-u+*,*-o+*,*-A+*,*-U+*,*-O+*} -QS "C-Phone_Yuusei_Atojita_Boin" {*-a+*,*-u+*,*-o+*} -QS "C-Phone_Museika_Atojita_Boin" {*-A+*,*-U+*,*-O+*} -QS "C-Phone_Sema_Boin" {*-i+*,*-u+*,*-I+*,*-U+*} -QS "C-Phone_Yuusei_Sema_Boin" {*-i+*,*-u+*} -QS "C-Phone_Museika_Sema_Boin" {*-I+*,*-U+*} -QS "C-Phone_Han_Sema_Boin" {*-e+*,*-o+*,*-E+*,*-O+*} -QS "C-Phone_Yuusei_Han_Sema_Boin" {*-e+*,*-o+*} -QS "C-Phone_Museika_Han_Sema_Boin" {*-E+*,*-O+*} -QS "C-Phone_Hiro_Boin" {*-a+*,*-A+*} -QS "C-Phone_Yuusei_Hiro_Boin" {*-a+*} -QS "C-Phone_Museika_Hiro_Boin" {*-A+*} - -QS "C-Phone_Boin_A" {*-a+*,*-A+*} -QS "C-Phone_Boin_I" {*-i+*,*-I+*} -QS "C-Phone_Boin_U" {*-u+*,*-U+*} -QS "C-Phone_Boin_E" {*-e+*,*-E+*} -QS "C-Phone_Boin_O" {*-o+*,*-O+*} - -QS "C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "C-Phone_Kuchibiruon" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-f+*,*-p+*,*-py+*} -QS "C-Phone_Hagukion" {*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*} -QS "C-Phone_Kougaion" {*-g+*,*-gy+*,*-y+*,*-k+*,*-ky+*} -QS "C-Phone_Seimonon" {*-h+*,*-hy+*} -QS "C-Phone_Masatsuon" {*-v+*,*-z+*,*-j+*,*-f+*,*-s+*,*-sh+*,*-h+*,*-hy+*} -QS "C-Phone_Hasatsuon" {*-ts+*,*-ch+*} -QS "C-Phone_Haretsuon" {*-b+*,*-by+*,*-d+*,*-dy+*,*-g+*,*-gy+*,*-p+*,*-py+*,*-t+*,*-ty+*,*-k+*,*-ky+*} -QS "C-Phone_Bion" {*-m+*,*-my+*,*-n+*,*-ny+*,*-N+*} -QS "C-Phone_Han_Boin" {*-w+*,*-r+*,*-ry+*,*-y+*} - -QS "C-Phone_Yuusei_Kuchibiru_Haretsuon" {*-b+*,*-by+*} -QS "C-Phone_Yuusei_Kuchibiru_Bion" {*-m+*,*-my+*} -QS "C-Phone_Yuusei_Haguki_Masatsuon" {*-z+*,*-j+*} -QS "C-Phone_Yuusei_Haguki_Haretsuon" {*-d+*,*-dy+*} -QS "C-Phone_Yuusei_Haguki_Bion" {*-n+*,*-ny+*,*-N+*} -QS "C-Phone_Yuusei_Haguki_Han_Boin" {*-r+*,*-ry+*} -QS "C-Phone_Yuusei_Kougai_Haretsuon" {*-g+*,*-gy+*} -QS "C-Phone_Musei_Kuchibiru_Haretsuon" {*-p+*,*-py+*} -QS "C-Phone_Musei_Haguki_Masatsuon" {*-s+*,*-sh+*} -QS "C-Phone_Musei_Haguki_Hasatsuon" {*-ts+*,*-ch+*} -QS "C-Phone_Musei_Haguki_Haretsuon" {*-t+*,*-ty+*} -QS "C-Phone_Musei_Kougai_Haretsuon" {*-k+*,*-ky+*} -QS "C-Phone_Musei_Seimon_Masatsuon" {*-h+*,*-hy+*} - -QS "C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*} - -QS "C-Phone_A" {*-A+*} -QS "C-Phone_E" {*-E+*} -QS "C-Phone_I" {*-I+*} -QS "C-Phone_N" {*-N+*} -QS "C-Phone_O" {*-O+*} -QS "C-Phone_U" {*-U+*} -QS "C-Phone_a" {*-a+*} -QS "C-Phone_b" {*-b+*} -QS "C-Phone_br" {*-br+*} -QS "C-Phone_by" {*-by+*} -QS "C-Phone_ch" {*-ch+*} -QS "C-Phone_cl" {*-cl+*} -QS "C-Phone_d" {*-d+*} -QS "C-Phone_dy" {*-dy+*} -QS "C-Phone_e" {*-e+*} -QS "C-Phone_f" {*-f+*} -QS "C-Phone_g" {*-g+*} -QS "C-Phone_gy" {*-gy+*} -QS "C-Phone_h" {*-h+*} -QS "C-Phone_hy" {*-hy+*} -QS "C-Phone_i" {*-i+*} -QS "C-Phone_j" {*-j+*} -QS "C-Phone_k" {*-k+*} -QS "C-Phone_ky" {*-ky+*} -QS "C-Phone_m" {*-m+*} -QS "C-Phone_my" {*-my+*} -QS "C-Phone_n" {*-n+*} -QS "C-Phone_ny" {*-ny+*} -QS "C-Phone_o" {*-o+*} -QS "C-Phone_p" {*-p+*} -QS "C-Phone_pau" {*-pau+*} -QS "C-Phone_py" {*-py+*} -QS "C-Phone_r" {*-r+*} -QS "C-Phone_ry" {*-ry+*} -QS "C-Phone_s" {*-s+*} -QS "C-Phone_sh" {*-sh+*} -QS "C-Phone_sil" {*-sil+*} -QS "C-Phone_t" {*-t+*} -QS "C-Phone_ts" {*-ts+*} -QS "C-Phone_ty" {*-ty+*} -QS "C-Phone_u" {*-u+*} -QS "C-Phone_v" {*-v+*} -QS "C-Phone_w" {*-w+*} -QS "C-Phone_y" {*-y+*} -QS "C-Phone_z" {*-z+*} - -QS "R-Phone_Yuuseion" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "R-Phone_Museion" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} -QS "R-Phone_Muon" {*+sil=*,*+pau=*} - -QS "R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} -QS "R-Phone_Yuusei_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*} -QS "R-Phone_Museika_Boin" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} -QS "R-Phone_Maejita_Boin" {*+i=*,*+e=*,*+I=*,*+E=*} -QS "R-Phone_Yuusei_Maejita_Boin" {*+i=*,*+e=*} -QS "R-Phone_Museika_Maejita_Boin" {*+I=*,*+E=*} -QS "R-Phone_Atojita_Boin" {*+a=*,*+u=*,*+o=*,*+A=*,*+U=*,*+O=*} -QS "R-Phone_Yuusei_Atojita_Boin" {*+a=*,*+u=*,*+o=*} -QS "R-Phone_Museika_Atojita_Boin" {*+A=*,*+U=*,*+O=*} -QS "R-Phone_Sema_Boin" {*+i=*,*+u=*,*+I=*,*+U=*} -QS "R-Phone_Yuusei_Sema_Boin" {*+i=*,*+u=*} -QS "R-Phone_Museika_Sema_Boin" {*+I=*,*+U=*} -QS "R-Phone_Han_Sema_Boin" {*+e=*,*+o=*,*+E=*,*+O=*} -QS "R-Phone_Yuusei_Han_Sema_Boin" {*+e=*,*+o=*} -QS "R-Phone_Museika_Han_Sema_Boin" {*+E=*,*+O=*} -QS "R-Phone_Hiro_Boin" {*+a=*,*+A=*} -QS "R-Phone_Yuusei_Hiro_Boin" {*+a=*} -QS "R-Phone_Museika_Hiro_Boin" {*+A=*} - -QS "R-Phone_Boin_A" {*+a=*,*+A=*} -QS "R-Phone_Boin_I" {*+i=*,*+I=*} -QS "R-Phone_Boin_U" {*+u=*,*+U=*} -QS "R-Phone_Boin_E" {*+e=*,*+E=*} -QS "R-Phone_Boin_O" {*+o=*,*+O=*} - -QS "R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} -QS "R-Phone_Kuchibiruon" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+f=*,*+p=*,*+py=*} -QS "R-Phone_Hagukion" {*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*} -QS "R-Phone_Kougaion" {*+g=*,*+gy=*,*+y=*,*+k=*,*+ky=*} -QS "R-Phone_Seimonon" {*+h=*,*+hy=*} -QS "R-Phone_Masatsuon" {*+v=*,*+z=*,*+j=*,*+f=*,*+s=*,*+sh=*,*+h=*,*+hy=*} -QS "R-Phone_Hasatsuon" {*+ts=*,*+ch=*} -QS "R-Phone_Haretsuon" {*+b=*,*+by=*,*+d=*,*+dy=*,*+g=*,*+gy=*,*+p=*,*+py=*,*+t=*,*+ty=*,*+k=*,*+ky=*} -QS "R-Phone_Bion" {*+m=*,*+my=*,*+n=*,*+ny=*,*+N=*} -QS "R-Phone_Han_Boin" {*+w=*,*+r=*,*+ry=*,*+y=*} - -QS "R-Phone_Yuusei_Kuchibiru_Haretsuon" {*+b=*,*+by=*} -QS "R-Phone_Yuusei_Kuchibiru_Bion" {*+m=*,*+my=*} -QS "R-Phone_Yuusei_Haguki_Masatsuon" {*+z=*,*+j=*} -QS "R-Phone_Yuusei_Haguki_Haretsuon" {*+d=*,*+dy=*} -QS "R-Phone_Yuusei_Haguki_Bion" {*+n=*,*+ny=*,*+N=*} -QS "R-Phone_Yuusei_Haguki_Han_Boin" {*+r=*,*+ry=*} -QS "R-Phone_Yuusei_Kougai_Haretsuon" {*+g=*,*+gy=*} -QS "R-Phone_Musei_Kuchibiru_Haretsuon" {*+p=*,*+py=*} -QS "R-Phone_Musei_Haguki_Masatsuon" {*+s=*,*+sh=*} -QS "R-Phone_Musei_Haguki_Hasatsuon" {*+ts=*,*+ch=*} -QS "R-Phone_Musei_Haguki_Haretsuon" {*+t=*,*+ty=*} -QS "R-Phone_Musei_Kougai_Haretsuon" {*+k=*,*+ky=*} -QS "R-Phone_Musei_Seimon_Masatsuon" {*+h=*,*+hy=*} - -QS "R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*} - -QS "R-Phone_A" {*+A=*} -QS "R-Phone_E" {*+E=*} -QS "R-Phone_I" {*+I=*} -QS "R-Phone_N" {*+N=*} -QS "R-Phone_O" {*+O=*} -QS "R-Phone_U" {*+U=*} -QS "R-Phone_a" {*+a=*} -QS "R-Phone_b" {*+b=*} -QS "R-Phone_br" {*+br=*} -QS "R-Phone_by" {*+by=*} -QS "R-Phone_ch" {*+ch=*} -QS "R-Phone_cl" {*+cl=*} -QS "R-Phone_d" {*+d=*} -QS "R-Phone_dy" {*+dy=*} -QS "R-Phone_e" {*+e=*} -QS "R-Phone_f" {*+f=*} -QS "R-Phone_g" {*+g=*} -QS "R-Phone_gy" {*+gy=*} -QS "R-Phone_h" {*+h=*} -QS "R-Phone_hy" {*+hy=*} -QS "R-Phone_i" {*+i=*} -QS "R-Phone_j" {*+j=*} -QS "R-Phone_k" {*+k=*} -QS "R-Phone_ky" {*+ky=*} -QS "R-Phone_m" {*+m=*} -QS "R-Phone_my" {*+my=*} -QS "R-Phone_n" {*+n=*} -QS "R-Phone_ny" {*+ny=*} -QS "R-Phone_o" {*+o=*} -QS "R-Phone_p" {*+p=*} -QS "R-Phone_pau" {*+pau=*} -QS "R-Phone_py" {*+py=*} -QS "R-Phone_r" {*+r=*} -QS "R-Phone_ry" {*+ry=*} -QS "R-Phone_s" {*+s=*} -QS "R-Phone_sh" {*+sh=*} -QS "R-Phone_sil" {*+sil=*} -QS "R-Phone_t" {*+t=*} -QS "R-Phone_ts" {*+ts=*} -QS "R-Phone_ty" {*+ty=*} -QS "R-Phone_u" {*+u=*} -QS "R-Phone_v" {*+v=*} -QS "R-Phone_w" {*+w=*} -QS "R-Phone_y" {*+y=*} -QS "R-Phone_z" {*+z=*} - -QS "L-Phone_NG" {*%1?^*} -QS "L-Phone_OK" {*%0?^*} -QS "L-Phone_Natural" {*%00^*} -QS "L-Phone_Option1" {*%08^*,*%09^*,*%0A^*,*%0B^*,*%0C^*,*%0D^*,*%0E^*,*%0F^*} -QS "L-Phone_Option2" {*%04^*,*%05^*,*%06^*,*%07^*,*%0C^*,*%0D^*,*%0E^*,*%0F^*} -QS "L-Phone_Option3" {*%02^*,*%03^*,*%06^*,*%07^*,*%0A^*,*%0B^*,*%0E^*,*%0F^*} -QS "L-Phone_Option4" {*%01^*,*%03^*,*%05^*,*%07^*,*%09^*,*%0B^*,*%0D^*,*%0F^*} - -QS "C-Phone_NG" {*^1?_*} -QS "C-Phone_OK" {*^0?_*} -QS "C-Phone_Natural" {*^00_*} -QS "C-Phone_Option1" {*^08_*,*^09_*,*^0A_*,*^0B_*,*^0C_*,*^0D_*,*^0E_*,*^0F_*} -QS "C-Phone_Option2" {*^04_*,*^05_*,*^06_*,*^07_*,*^0C_*,*^0D_*,*^0E_*,*^0F_*} -QS "C-Phone_Option3" {*^02_*,*^03_*,*^06_*,*^07_*,*^0A_*,*^0B_*,*^0E_*,*^0F_*} -QS "C-Phone_Option4" {*^01_*,*^03_*,*^05_*,*^07_*,*^09_*,*^0B_*,*^0D_*,*^0F_*} - -QS "R-Phone_NG" {*_1?~*} -QS "R-Phone_OK" {*_0?~*} -QS "R-Phone_Natural" {*_00~*} -QS "R-Phone_Option1" {*_08~*,*_09~*,*_0A~*,*_0B~*,*_0C~*,*_0D~*,*_0E~*,*_0F~*} -QS "R-Phone_Option2" {*_04~*,*_05~*,*_06~*,*_07~*,*_0C~*,*_0D~*,*_0E~*,*_0F~*} -QS "R-Phone_Option3" {*_02~*,*_03~*,*_06~*,*_07~*,*_0A~*,*_0B~*,*_0E~*,*_0F~*} -QS "R-Phone_Option4" {*_01~*,*_03~*,*_05~*,*_07~*,*_09~*,*_0B~*,*_0D~*,*_0F~*} - -CQS "d1" {/D:(\NOTE)!} -CQS "e1" {/E:(\NOTE)]} -CQS "f1" {/F:(\NOTE)#} - -CQS "p12" {-(\d+)!} -CQS "p13" {!(\d+)[} -CQS "p14" {[(\d+)$} -CQS "p15" {$(\d+)]} -CQS "a1" {/A:(\d+)-} -CQS "a2" {-(\d+)-} -CQS "a3" {-(\d+)@} - -QS "L-Syllable_Language=JPN" {*@JPN~*} - -QS "L-Syllable_Language=JPN_0" {*@JPN~0/B:*} -QS "L-Syllable_Language=JPN_1" {*@JPN~1/B:*} - -CQS "b1" {/B:(\d+)_} -CQS "b2" {_(\d+)_} -CQS "b3" {_(\d+)@} -QS "C-Syllable_Language=JPN" {*@JPN|*} - -QS "C-Syllable_Language=JPN_0" {*@JPN|0/C:*} -QS "C-Syllable_Language=JPN_1" {*@JPN|1/C:*} - -CQS "c1" {/C:(\d+)+} -CQS "c2" {+(\d+)+} -CQS "c3" {+(\d+)@} - -QS "R-Syllable_Language=JPN" {*@JPN&*} - -QS "R-Syllable_Language=JPN_0" {*@JPN&0/D:*} -QS "R-Syllable_Language=JPN_1" {*@JPN&1/D:*} - -CQS "d2" {!(\d+)#} -CQS "d3" {#(\d+)$} - -QS "L-Note_Beat=x/x" {*$x/x%*} -QS "L-Note_Beat=1/4" {*$1/4%*} -QS "L-Note_Beat=2/4" {*$2/4%*} -QS "L-Note_Beat=3/4" {*$3/4%*} -QS "L-Note_Beat=4/4" {*$4/4%*} -QS "L-Note_Beat=5/4" {*$5/4%*} -QS "L-Note_Beat=4/8" {*$4/8%*} -QS "L-Note_Beat=6/8" {*$6/8%*} - -CQS "d6" {|(\d+)&} -CQS "d7" {&(\d+);} -CQS "d8" {;(\d+)-} - -CQS "e2" {](\d+)^} -CQS "e3" {^(\d+)=} - -QS "C-Note_Beat=x/x" {*=x/x~*} -QS "C-Note_Beat=1/4" {*=1/4~*} -QS "C-Note_Beat=2/4" {*=2/4~*} -QS "C-Note_Beat=3/4" {*=3/4~*} -QS "C-Note_Beat=4/4" {*=4/4~*} -QS "C-Note_Beat=5/4" {*=5/4~*} -QS "C-Note_Beat=4/8" {*=4/8~*} -QS "C-Note_Beat=6/8" {*=6/8~*} - -CQS "e6" {!(\d+)@} -CQS "e7" {@(\d+)#} -CQS "e8" {#(\d+)+} - -CQS "e26" {|(\d+)]} -CQS "e27" {](\d+)-} - -QS "C-Note_Dynamic<=p4" {*-pppp^*} -QS "C-Note_Dynamic<=p3" {*-pppp^*,*-ppp^*} -QS "C-Note_Dynamic<=p2" {*-pppp^*,*-ppp^*,*-pp^*} -QS "C-Note_Dynamic<=p1" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*} -QS "C-Note_Dynamic<=mp" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*} -QS "C-Note_Dynamic<=n" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*} -QS "C-Note_Dynamic<=mf" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*} -QS "C-Note_Dynamic<=f1" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*} -QS "C-Note_Dynamic<=f2" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*,*-ff^*} -QS "C-Note_Dynamic<=f3" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*,*-ff^*,*-fff^*} - -CQS "e29" {^(\d+)+} -CQS "e30" {+(\d+)~} -CQS "e31" {~(\d+)=} -CQS "e32" {=(\d+)@} -CQS "e33" {@(\d+)$} -CQS "e34" {$(\d+)!} -CQS "e35" {!(\d+)%} -CQS "e36" {%(\d+)#} -CQS "e37" {#(\d+)|} -CQS "e38" {|(\d+)|} -CQS "e39" {|(\d+)-} -CQS "e40" {-(\d+)&} -CQS "e41" {&(\d+)&} -CQS "e42" {&(\d+)+} -CQS "e43" {+(\d+)[} -CQS "e44" {[(\d+);} -CQS "e45" {;(\d+)]} -CQS "e46" {](\d+);} -CQS "e47" {;(\d+)~} -CQS "e48" {~(\d+)~} -CQS "e49" {~(\d+)^} -CQS "e50" {^(\d+)^} -CQS "e51" {^(\d+)@} -CQS "e52" {@(\d+)[} -CQS "e53" {[(\d+)#} -CQS "e54" {#(\d+)=} -CQS "e55" {=(\d+)!} -CQS "e56" {!(\d+)~} -CQS "e57" {~([pm]\d+)+} -CQS "e58" {+([pm]\d+)!} - -CQS "f2" {#(\d+)#} -CQS "f3" {#(\d+)-} - -QS "R-Note_Beat=x/x" {*-x/x$*} -QS "R-Note_Beat=1/4" {*-1/4$*} -QS "R-Note_Beat=2/4" {*-2/4$*} -QS "R-Note_Beat=3/4" {*-3/4$*} -QS "R-Note_Beat=4/4" {*-4/4$*} -QS "R-Note_Beat=5/4" {*-5/4$*} -QS "R-Note_Beat=4/8" {*-4/8$*} -QS "R-Note_Beat=6/8" {*-6/8$*} - -CQS "f6" {$(\d+)+} -CQS "f7" {+(\d+)%} -CQS "f8" {%(\d+);} diff --git a/train/hed/jp_qst002_nnsvs.hed b/train/hed/jp_qst002_nnsvs.hed deleted file mode 100644 index 17686dc..0000000 --- a/train/hed/jp_qst002_nnsvs.hed +++ /dev/null @@ -1,402 +0,0 @@ -QS "C-Phone_Language_Independent_Silence" {s@*} -QS "C-Phone_Language_Independent_Pause" {p@*} -QS "C-Phone_Language_Independent_Break" {b@*} -QS "C-Phone_Language_Independent_Consonant" {c@*} -QS "C-Phone_Language_Independent_Vowel" {v@*} - -QS "L-Phone_Yuuseion" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "L-Phone_Museion" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "L-Phone_Muon" {*^sil-*,*^pau-*} - -QS "L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "L-Phone_Yuusei_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*} -QS "L-Phone_Museika_Boin" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "L-Phone_Maejita_Boin" {*^i-*,*^e-*,*^I-*,*^E-*} -QS "L-Phone_Yuusei_Maejita_Boin" {*^i-*,*^e-*} -QS "L-Phone_Museika_Maejita_Boin" {*^I-*,*^E-*} -QS "L-Phone_Atojita_Boin" {*^a-*,*^u-*,*^o-*,*^A-*,*^U-*,*^O-*} -QS "L-Phone_Yuusei_Atojita_Boin" {*^a-*,*^u-*,*^o-*} -QS "L-Phone_Museika_Atojita_Boin" {*^A-*,*^U-*,*^O-*} -QS "L-Phone_Sema_Boin" {*^i-*,*^u-*,*^I-*,*^U-*} -QS "L-Phone_Yuusei_Sema_Boin" {*^i-*,*^u-*} -QS "L-Phone_Museika_Sema_Boin" {*^I-*,*^U-*} -QS "L-Phone_Han_Sema_Boin" {*^e-*,*^o-*,*^E-*,*^O-*} -QS "L-Phone_Yuusei_Han_Sema_Boin" {*^e-*,*^o-*} -QS "L-Phone_Museika_Han_Sema_Boin" {*^E-*,*^O-*} -QS "L-Phone_Hiro_Boin" {*^a-*,*^A-*} -QS "L-Phone_Museika_Hiro_Boin" {*^A-*} - -QS "L-Phone_Boin_A" {*^a-*,*^A-*} -QS "L-Phone_Boin_I" {*^i-*,*^I-*} -QS "L-Phone_Boin_U" {*^u-*,*^U-*} -QS "L-Phone_Boin_E" {*^e-*,*^E-*} -QS "L-Phone_Boin_O" {*^o-*,*^O-*} - -QS "L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "L-Phone_Kuchibiruon" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^f-*,*^p-*,*^py-*} -QS "L-Phone_Hagukion" {*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*} -QS "L-Phone_Kougaion" {*^g-*,*^gy-*,*^y-*,*^k-*,*^ky-*} -QS "L-Phone_Seimonon" {*^h-*,*^hy-*} -QS "L-Phone_Masatsuon" {*^v-*,*^z-*,*^j-*,*^f-*,*^s-*,*^sh-*,*^h-*,*^hy-*} -QS "L-Phone_Hasatsuon" {*^ts-*,*^ch-*} -QS "L-Phone_Haretsuon" {*^b-*,*^by-*,*^d-*,*^dy-*,*^g-*,*^gy-*,*^p-*,*^py-*,*^t-*,*^ty-*,*^k-*,*^ky-*} -QS "L-Phone_Bion" {*^m-*,*^my-*,*^n-*,*^ny-*,*^N-*} -QS "L-Phone_Han_Boin" {*^w-*,*^r-*,*^ry-*,*^y-*} - -QS "L-Phone_Yuusei_Kuchibiru_Haretsuon" {*^b-*,*^by-*} -QS "L-Phone_Yuusei_Kuchibiru_Bion" {*^m-*,*^my-*} -QS "L-Phone_Yuusei_Haguki_Masatsuon" {*^z-*,*^j-*} -QS "L-Phone_Yuusei_Haguki_Haretsuon" {*^d-*,*^dy-*} -QS "L-Phone_Yuusei_Haguki_Bion" {*^n-*,*^ny-*,*^N-*} -QS "L-Phone_Yuusei_Haguki_Han_Boin" {*^r-*,*^ry-*} -QS "L-Phone_Yuusei_Kougai_Haretsuon" {*^g-*,*^gy-*} -QS "L-Phone_Musei_Kuchibiru_Haretsuon" {*^p-*,*^py-*} -QS "L-Phone_Musei_Haguki_Masatsuon" {*^s-*,*^sh-*} -QS "L-Phone_Musei_Haguki_Hasatsuon" {*^ts-*,*^ch-*} -QS "L-Phone_Musei_Haguki_Haretsuon" {*^t-*,*^ty-*} -QS "L-Phone_Musei_Kougai_Haretsuon" {*^k-*,*^ky-*} -QS "L-Phone_Musei_Seimon_Masatsuon" {*^h-*,*^hy-*} - -QS "L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*} - -QS "L-Phone_A" {*^A-*} -QS "L-Phone_E" {*^E-*} -QS "L-Phone_I" {*^I-*} -QS "L-Phone_N" {*^N-*} -QS "L-Phone_O" {*^O-*} -QS "L-Phone_U" {*^U-*} -QS "L-Phone_a" {*^a-*} -QS "L-Phone_b" {*^b-*} -QS "L-Phone_br" {*^br-*} -QS "L-Phone_by" {*^by-*} -QS "L-Phone_ch" {*^ch-*} -QS "L-Phone_cl" {*^cl-*} -QS "L-Phone_d" {*^d-*} -QS "L-Phone_dy" {*^dy-*} -QS "L-Phone_e" {*^e-*} -QS "L-Phone_f" {*^f-*} -QS "L-Phone_g" {*^g-*} -QS "L-Phone_gy" {*^gy-*} -QS "L-Phone_h" {*^h-*} -QS "L-Phone_hy" {*^hy-*} -QS "L-Phone_i" {*^i-*} -QS "L-Phone_j" {*^j-*} -QS "L-Phone_k" {*^k-*} -QS "L-Phone_ky" {*^ky-*} -QS "L-Phone_m" {*^m-*} -QS "L-Phone_my" {*^my-*} -QS "L-Phone_n" {*^n-*} -QS "L-Phone_ny" {*^ny-*} -QS "L-Phone_o" {*^o-*} -QS "L-Phone_p" {*^p-*} -QS "L-Phone_pau" {*^pau-*} -QS "L-Phone_py" {*^py-*} -QS "L-Phone_r" {*^r-*} -QS "L-Phone_ry" {*^ry-*} -QS "L-Phone_s" {*^s-*} -QS "L-Phone_sh" {*^sh-*} -QS "L-Phone_sil" {*^sil-*} -QS "L-Phone_t" {*^t-*} -QS "L-Phone_ts" {*^ts-*} -QS "L-Phone_ty" {*^ty-*} -QS "L-Phone_u" {*^u-*} -QS "L-Phone_v" {*^v-*} -QS "L-Phone_w" {*^w-*} -QS "L-Phone_y" {*^y-*} -QS "L-Phone_z" {*^z-*} - -QS "C-Phone_Yuuseion" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "C-Phone_Museion" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "C-Phone_Muon" {*-sil+*,*-pau+*} - -QS "C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "C-Phone_Yuusei_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*} -QS "C-Phone_Museika_Boin" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "C-Phone_Maejita_Boin" {*-i+*,*-e+*,*-I+*,*-E+*} -QS "C-Phone_Yuusei_Maejita_Boin" {*-i+*,*-e+*} -QS "C-Phone_Museika_Maejita_Boin" {*-I+*,*-E+*} -QS "C-Phone_Atojita_Boin" {*-a+*,*-u+*,*-o+*,*-A+*,*-U+*,*-O+*} -QS "C-Phone_Yuusei_Atojita_Boin" {*-a+*,*-u+*,*-o+*} -QS "C-Phone_Museika_Atojita_Boin" {*-A+*,*-U+*,*-O+*} -QS "C-Phone_Sema_Boin" {*-i+*,*-u+*,*-I+*,*-U+*} -QS "C-Phone_Yuusei_Sema_Boin" {*-i+*,*-u+*} -QS "C-Phone_Museika_Sema_Boin" {*-I+*,*-U+*} -QS "C-Phone_Han_Sema_Boin" {*-e+*,*-o+*,*-E+*,*-O+*} -QS "C-Phone_Yuusei_Han_Sema_Boin" {*-e+*,*-o+*} -QS "C-Phone_Museika_Han_Sema_Boin" {*-E+*,*-O+*} -QS "C-Phone_Hiro_Boin" {*-a+*,*-A+*} -QS "C-Phone_Museika_Hiro_Boin" {*-A+*} - -QS "C-Phone_Boin_A" {*-a+*,*-A+*} -QS "C-Phone_Boin_I" {*-i+*,*-I+*} -QS "C-Phone_Boin_U" {*-u+*,*-U+*} -QS "C-Phone_Boin_E" {*-e+*,*-E+*} -QS "C-Phone_Boin_O" {*-o+*,*-O+*} - -QS "C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "C-Phone_Kuchibiruon" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-f+*,*-p+*,*-py+*} -QS "C-Phone_Hagukion" {*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*} -QS "C-Phone_Kougaion" {*-g+*,*-gy+*,*-y+*,*-k+*,*-ky+*} -QS "C-Phone_Seimonon" {*-h+*,*-hy+*} -QS "C-Phone_Masatsuon" {*-v+*,*-z+*,*-j+*,*-f+*,*-s+*,*-sh+*,*-h+*,*-hy+*} -QS "C-Phone_Hasatsuon" {*-ts+*,*-ch+*} -QS "C-Phone_Haretsuon" {*-b+*,*-by+*,*-d+*,*-dy+*,*-g+*,*-gy+*,*-p+*,*-py+*,*-t+*,*-ty+*,*-k+*,*-ky+*} -QS "C-Phone_Bion" {*-m+*,*-my+*,*-n+*,*-ny+*,*-N+*} -QS "C-Phone_Han_Boin" {*-w+*,*-r+*,*-ry+*,*-y+*} - -QS "C-Phone_Yuusei_Kuchibiru_Haretsuon" {*-b+*,*-by+*} -QS "C-Phone_Yuusei_Kuchibiru_Bion" {*-m+*,*-my+*} -QS "C-Phone_Yuusei_Haguki_Masatsuon" {*-z+*,*-j+*} -QS "C-Phone_Yuusei_Haguki_Haretsuon" {*-d+*,*-dy+*} -QS "C-Phone_Yuusei_Haguki_Bion" {*-n+*,*-ny+*,*-N+*} -QS "C-Phone_Yuusei_Haguki_Han_Boin" {*-r+*,*-ry+*} -QS "C-Phone_Yuusei_Kougai_Haretsuon" {*-g+*,*-gy+*} -QS "C-Phone_Musei_Kuchibiru_Haretsuon" {*-p+*,*-py+*} -QS "C-Phone_Musei_Haguki_Masatsuon" {*-s+*,*-sh+*} -QS "C-Phone_Musei_Haguki_Hasatsuon" {*-ts+*,*-ch+*} -QS "C-Phone_Musei_Haguki_Haretsuon" {*-t+*,*-ty+*} -QS "C-Phone_Musei_Kougai_Haretsuon" {*-k+*,*-ky+*} -QS "C-Phone_Musei_Seimon_Masatsuon" {*-h+*,*-hy+*} - -QS "C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*} - -QS "C-Phone_A" {*-A+*} -QS "C-Phone_E" {*-E+*} -QS "C-Phone_I" {*-I+*} -QS "C-Phone_N" {*-N+*} -QS "C-Phone_O" {*-O+*} -QS "C-Phone_U" {*-U+*} -QS "C-Phone_a" {*-a+*} -QS "C-Phone_b" {*-b+*} -QS "C-Phone_br" {*-br+*} -QS "C-Phone_by" {*-by+*} -QS "C-Phone_ch" {*-ch+*} -QS "C-Phone_cl" {*-cl+*} -QS "C-Phone_d" {*-d+*} -QS "C-Phone_dy" {*-dy+*} -QS "C-Phone_e" {*-e+*} -QS "C-Phone_f" {*-f+*} -QS "C-Phone_g" {*-g+*} -QS "C-Phone_gy" {*-gy+*} -QS "C-Phone_h" {*-h+*} -QS "C-Phone_hy" {*-hy+*} -QS "C-Phone_i" {*-i+*} -QS "C-Phone_j" {*-j+*} -QS "C-Phone_k" {*-k+*} -QS "C-Phone_ky" {*-ky+*} -QS "C-Phone_m" {*-m+*} -QS "C-Phone_my" {*-my+*} -QS "C-Phone_n" {*-n+*} -QS "C-Phone_ny" {*-ny+*} -QS "C-Phone_o" {*-o+*} -QS "C-Phone_p" {*-p+*} -QS "C-Phone_pau" {*-pau+*} -QS "C-Phone_py" {*-py+*} -QS "C-Phone_r" {*-r+*} -QS "C-Phone_ry" {*-ry+*} -QS "C-Phone_s" {*-s+*} -QS "C-Phone_sh" {*-sh+*} -QS "C-Phone_sil" {*-sil+*} -QS "C-Phone_t" {*-t+*} -QS "C-Phone_ts" {*-ts+*} -QS "C-Phone_ty" {*-ty+*} -QS "C-Phone_u" {*-u+*} -QS "C-Phone_v" {*-v+*} -QS "C-Phone_w" {*-w+*} -QS "C-Phone_y" {*-y+*} -QS "C-Phone_z" {*-z+*} - -QS "R-Phone_Yuuseion" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "R-Phone_Museion" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} -QS "R-Phone_Muon" {*+sil=*,*+pau=*} - -QS "R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} -QS "R-Phone_Yuusei_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*} -QS "R-Phone_Museika_Boin" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} -QS "R-Phone_Maejita_Boin" {*+i=*,*+e=*,*+I=*,*+E=*} -QS "R-Phone_Yuusei_Maejita_Boin" {*+i=*,*+e=*} -QS "R-Phone_Museika_Maejita_Boin" {*+I=*,*+E=*} -QS "R-Phone_Atojita_Boin" {*+a=*,*+u=*,*+o=*,*+A=*,*+U=*,*+O=*} -QS "R-Phone_Yuusei_Atojita_Boin" {*+a=*,*+u=*,*+o=*} -QS "R-Phone_Museika_Atojita_Boin" {*+A=*,*+U=*,*+O=*} -QS "R-Phone_Sema_Boin" {*+i=*,*+u=*,*+I=*,*+U=*} -QS "R-Phone_Yuusei_Sema_Boin" {*+i=*,*+u=*} -QS "R-Phone_Museika_Sema_Boin" {*+I=*,*+U=*} -QS "R-Phone_Han_Sema_Boin" {*+e=*,*+o=*,*+E=*,*+O=*} -QS "R-Phone_Yuusei_Han_Sema_Boin" {*+e=*,*+o=*} -QS "R-Phone_Museika_Han_Sema_Boin" {*+E=*,*+O=*} -QS "R-Phone_Hiro_Boin" {*+a=*,*+A=*} -QS "R-Phone_Museika_Hiro_Boin" {*+A=*} - -QS "R-Phone_Boin_A" {*+a=*,*+A=*} -QS "R-Phone_Boin_I" {*+i=*,*+I=*} -QS "R-Phone_Boin_U" {*+u=*,*+U=*} -QS "R-Phone_Boin_E" {*+e=*,*+E=*} -QS "R-Phone_Boin_O" {*+o=*,*+O=*} - -QS "R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} -QS "R-Phone_Kuchibiruon" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+f=*,*+p=*,*+py=*} -QS "R-Phone_Hagukion" {*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*} -QS "R-Phone_Kougaion" {*+g=*,*+gy=*,*+y=*,*+k=*,*+ky=*} -QS "R-Phone_Seimonon" {*+h=*,*+hy=*} -QS "R-Phone_Masatsuon" {*+v=*,*+z=*,*+j=*,*+f=*,*+s=*,*+sh=*,*+h=*,*+hy=*} -QS "R-Phone_Hasatsuon" {*+ts=*,*+ch=*} -QS "R-Phone_Haretsuon" {*+b=*,*+by=*,*+d=*,*+dy=*,*+g=*,*+gy=*,*+p=*,*+py=*,*+t=*,*+ty=*,*+k=*,*+ky=*} -QS "R-Phone_Bion" {*+m=*,*+my=*,*+n=*,*+ny=*,*+N=*} -QS "R-Phone_Han_Boin" {*+w=*,*+r=*,*+ry=*,*+y=*} - -QS "R-Phone_Yuusei_Kuchibiru_Haretsuon" {*+b=*,*+by=*} -QS "R-Phone_Yuusei_Kuchibiru_Bion" {*+m=*,*+my=*} -QS "R-Phone_Yuusei_Haguki_Masatsuon" {*+z=*,*+j=*} -QS "R-Phone_Yuusei_Haguki_Haretsuon" {*+d=*,*+dy=*} -QS "R-Phone_Yuusei_Haguki_Bion" {*+n=*,*+ny=*,*+N=*} -QS "R-Phone_Yuusei_Haguki_Han_Boin" {*+r=*,*+ry=*} -QS "R-Phone_Yuusei_Kougai_Haretsuon" {*+g=*,*+gy=*} -QS "R-Phone_Musei_Kuchibiru_Haretsuon" {*+p=*,*+py=*} -QS "R-Phone_Musei_Haguki_Masatsuon" {*+s=*,*+sh=*} -QS "R-Phone_Musei_Haguki_Hasatsuon" {*+ts=*,*+ch=*} -QS "R-Phone_Musei_Haguki_Haretsuon" {*+t=*,*+ty=*} -QS "R-Phone_Musei_Kougai_Haretsuon" {*+k=*,*+ky=*} -QS "R-Phone_Musei_Seimon_Masatsuon" {*+h=*,*+hy=*} - -QS "R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*} - -QS "R-Phone_A" {*+A=*} -QS "R-Phone_E" {*+E=*} -QS "R-Phone_I" {*+I=*} -QS "R-Phone_N" {*+N=*} -QS "R-Phone_O" {*+O=*} -QS "R-Phone_U" {*+U=*} -QS "R-Phone_a" {*+a=*} -QS "R-Phone_b" {*+b=*} -QS "R-Phone_br" {*+br=*} -QS "R-Phone_by" {*+by=*} -QS "R-Phone_ch" {*+ch=*} -QS "R-Phone_cl" {*+cl=*} -QS "R-Phone_d" {*+d=*} -QS "R-Phone_dy" {*+dy=*} -QS "R-Phone_e" {*+e=*} -QS "R-Phone_f" {*+f=*} -QS "R-Phone_g" {*+g=*} -QS "R-Phone_gy" {*+gy=*} -QS "R-Phone_h" {*+h=*} -QS "R-Phone_hy" {*+hy=*} -QS "R-Phone_i" {*+i=*} -QS "R-Phone_j" {*+j=*} -QS "R-Phone_k" {*+k=*} -QS "R-Phone_ky" {*+ky=*} -QS "R-Phone_m" {*+m=*} -QS "R-Phone_my" {*+my=*} -QS "R-Phone_n" {*+n=*} -QS "R-Phone_ny" {*+ny=*} -QS "R-Phone_o" {*+o=*} -QS "R-Phone_p" {*+p=*} -QS "R-Phone_pau" {*+pau=*} -QS "R-Phone_py" {*+py=*} -QS "R-Phone_r" {*+r=*} -QS "R-Phone_ry" {*+ry=*} -QS "R-Phone_s" {*+s=*} -QS "R-Phone_sh" {*+sh=*} -QS "R-Phone_sil" {*+sil=*} -QS "R-Phone_t" {*+t=*} -QS "R-Phone_ts" {*+ts=*} -QS "R-Phone_ty" {*+ty=*} -QS "R-Phone_u" {*+u=*} -QS "R-Phone_v" {*+v=*} -QS "R-Phone_w" {*+w=*} -QS "R-Phone_y" {*+y=*} -QS "R-Phone_z" {*+z=*} - -CQS "d1" {/D:(\NOTE)!} -CQS "e1" {/E:(\NOTE)]} -CQS "f1" {/F:(\NOTE)#} - -CQS "p12" {-(\d+)!} -CQS "p13" {!(\d+)[} - -CQS "p15" {$(\d+)]} -CQS "a1" {/A:(\d+)-} -CQS "a2" {-(\d+)-} -CQS "a3" {-(\d+)@} - -QS "L-Syllable_Language=JPN" {*@JPN~*} - -QS "L-Syllable_Language=JPN_0" {*@JPN~0/B:*} -QS "L-Syllable_Language=JPN_1" {*@JPN~1/B:*} - -CQS "b1" {/B:(\d+)_} -CQS "b2" {_(\d+)_} -CQS "b3" {_(\d+)@} -QS "C-Syllable_Language=JPN" {*@JPN|*} - -QS "C-Syllable_Language=JPN_0" {*@JPN|0/C:*} -QS "C-Syllable_Language=JPN_1" {*@JPN|1/C:*} - -CQS "c1" {/C:(\d+)+} -CQS "c2" {+(\d+)+} -CQS "c3" {+(\d+)@} - -QS "R-Syllable_Language=JPN" {*@JPN&*} - -QS "R-Syllable_Language=JPN_0" {*@JPN&0/D:*} -QS "R-Syllable_Language=JPN_1" {*@JPN&1/D:*} - -CQS "d2" {!(\d+)#} -CQS "d3" {#(\d+)$} - -CQS "d6" {|(\d+)&} -CQS "d7" {&(\d+);} -CQS "d8" {;(\d+)-} - -CQS "e2" {](\d+)^} -CQS "e3" {^(\d+)=} - -CQS "e6" {!(\d+)@} -CQS "e7" {@(\d+)#} -CQS "e8" {#(\d+)+} - -CQS "e26" {|(\d+)]} -CQS "e27" {](\d+)-} - -QS "C-Note_Dynamic<=mp" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*} -QS "C-Note_Dynamic<=n" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*} -QS "C-Note_Dynamic<=mf" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*} -QS "C-Note_Dynamic<=f1" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*} -QS "C-Note_Dynamic<=f2" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*,*-ff^*} -QS "C-Note_Dynamic<=f3" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*,*-ff^*,*-fff^*} - -CQS "e35" {!(\d+)%} -CQS "e36" {%(\d+)#} -CQS "e37" {#(\d+)|} -CQS "e38" {|(\d+)|} -CQS "e39" {|(\d+)-} -CQS "e40" {-(\d+)&} -CQS "e41" {&(\d+)&} -CQS "e42" {&(\d+)+} -CQS "e43" {+(\d+)[} -CQS "e44" {[(\d+);} -CQS "e45" {;(\d+)]} -CQS "e46" {](\d+);} -CQS "e47" {;(\d+)~} -CQS "e48" {~(\d+)~} -CQS "e49" {~(\d+)^} -CQS "e50" {^(\d+)^} -CQS "e51" {^(\d+)@} -CQS "e52" {@(\d+)[} - -CQS "e54" {#(\d+)=} -CQS "e55" {=(\d+)!} -CQS "e56" {!(\d+)~} - -CQS "e57" {~([pm]\d+)+} -CQS "e58" {+([pm]\d+)!} - -CQS "f2" {#(\d+)#} -CQS "f3" {#(\d+)-} - -CQS "f6" {$(\d+)+} -CQS "f7" {+(\d+)%} -CQS "f8" {%(\d+);} diff --git a/train/hed/jp_qst003_nnsvs.hed b/train/hed/jp_qst003_nnsvs.hed deleted file mode 100644 index 22c05c0..0000000 --- a/train/hed/jp_qst003_nnsvs.hed +++ /dev/null @@ -1,336 +0,0 @@ -QS "C-Phone_Language_Independent_Silence" {s@*} -QS "C-Phone_Language_Independent_Pause" {p@*} -QS "C-Phone_Language_Independent_Break" {b@*} -QS "C-Phone_Language_Independent_Consonant" {c@*} -QS "C-Phone_Language_Independent_Vowel" {v@*} - -QS "L-Phone_Yuuseion" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "L-Phone_Museion" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "L-Phone_Muon" {*^sil-*,*^pau-*} - -QS "L-Phone_Yuusei_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*} -QS "L-Phone_Yuusei_Maejita_Boin" {*^i-*,*^e-*} -QS "L-Phone_Yuusei_Atojita_Boin" {*^a-*,*^u-*,*^o-*} -QS "L-Phone_Yuusei_Sema_Boin" {*^i-*,*^u-*} -QS "L-Phone_Yuusei_Han_Sema_Boin" {*^e-*,*^o-*} - -QS "L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "L-Phone_Kuchibiruon" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^f-*,*^p-*,*^py-*} -QS "L-Phone_Hagukion" {*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^N-*,*^r-*,*^ry-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*} -QS "L-Phone_Kougaion" {*^g-*,*^gy-*,*^y-*,*^k-*,*^ky-*} -QS "L-Phone_Seimonon" {*^h-*,*^hy-*} -QS "L-Phone_Masatsuon" {*^v-*,*^z-*,*^j-*,*^f-*,*^s-*,*^sh-*,*^h-*,*^hy-*} -QS "L-Phone_Hasatsuon" {*^ts-*,*^ch-*} -QS "L-Phone_Haretsuon" {*^b-*,*^by-*,*^d-*,*^dy-*,*^g-*,*^gy-*,*^p-*,*^py-*,*^t-*,*^ty-*,*^k-*,*^ky-*} -QS "L-Phone_Bion" {*^m-*,*^my-*,*^n-*,*^ny-*,*^N-*} -QS "L-Phone_Han_Boin" {*^w-*,*^r-*,*^ry-*,*^y-*} - -QS "L-Phone_Yuusei_Kuchibiru_Haretsuon" {*^b-*,*^by-*} -QS "L-Phone_Yuusei_Kuchibiru_Bion" {*^m-*,*^my-*} -QS "L-Phone_Yuusei_Haguki_Masatsuon" {*^z-*,*^j-*} -QS "L-Phone_Yuusei_Haguki_Haretsuon" {*^d-*,*^dy-*} -QS "L-Phone_Yuusei_Haguki_Bion" {*^n-*,*^ny-*,*^N-*} -QS "L-Phone_Yuusei_Haguki_Han_Boin" {*^r-*,*^ry-*} -QS "L-Phone_Yuusei_Kougai_Haretsuon" {*^g-*,*^gy-*} -QS "L-Phone_Musei_Kuchibiru_Haretsuon" {*^p-*,*^py-*} -QS "L-Phone_Musei_Haguki_Masatsuon" {*^s-*,*^sh-*} -QS "L-Phone_Musei_Haguki_Hasatsuon" {*^ts-*,*^ch-*} -QS "L-Phone_Musei_Haguki_Haretsuon" {*^t-*,*^ty-*} -QS "L-Phone_Musei_Kougai_Haretsuon" {*^k-*,*^ky-*} -QS "L-Phone_Musei_Seimon_Masatsuon" {*^h-*,*^hy-*} - -QS "L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*} - -QS "L-Phone_N" {*^N-*} -QS "L-Phone_a" {*^a-*} -QS "L-Phone_b" {*^b-*} -QS "L-Phone_br" {*^br-*} -QS "L-Phone_by" {*^by-*} -QS "L-Phone_ch" {*^ch-*} -QS "L-Phone_cl" {*^cl-*} -QS "L-Phone_d" {*^d-*} -QS "L-Phone_dy" {*^dy-*} -QS "L-Phone_e" {*^e-*} -QS "L-Phone_f" {*^f-*} -QS "L-Phone_g" {*^g-*} -QS "L-Phone_gy" {*^gy-*} -QS "L-Phone_h" {*^h-*} -QS "L-Phone_hy" {*^hy-*} -QS "L-Phone_i" {*^i-*} -QS "L-Phone_j" {*^j-*} -QS "L-Phone_k" {*^k-*} -QS "L-Phone_ky" {*^ky-*} -QS "L-Phone_m" {*^m-*} -QS "L-Phone_my" {*^my-*} -QS "L-Phone_n" {*^n-*} -QS "L-Phone_ny" {*^ny-*} -QS "L-Phone_o" {*^o-*} -QS "L-Phone_p" {*^p-*} -QS "L-Phone_pau" {*^pau-*} -QS "L-Phone_py" {*^py-*} -QS "L-Phone_r" {*^r-*} -QS "L-Phone_ry" {*^ry-*} -QS "L-Phone_s" {*^s-*} -QS "L-Phone_sh" {*^sh-*} -QS "L-Phone_sil" {*^sil-*} -QS "L-Phone_t" {*^t-*} -QS "L-Phone_ts" {*^ts-*} -QS "L-Phone_ty" {*^ty-*} -QS "L-Phone_u" {*^u-*} -QS "L-Phone_v" {*^v-*} -QS "L-Phone_w" {*^w-*} -QS "L-Phone_y" {*^y-*} -QS "L-Phone_z" {*^z-*} - -QS "C-Phone_Yuuseion" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "C-Phone_Museion" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "C-Phone_Muon" {*-sil+*,*-pau+*} - -QS "C-Phone_Yuusei_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*} -QS "C-Phone_Yuusei_Maejita_Boin" {*-i+*,*-e+*} -QS "C-Phone_Yuusei_Atojita_Boin" {*-a+*,*-u+*,*-o+*} -QS "C-Phone_Yuusei_Sema_Boin" {*-i+*,*-u+*} -QS "C-Phone_Yuusei_Han_Sema_Boin" {*-e+*,*-o+*} - -QS "C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "C-Phone_Kuchibiruon" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-f+*,*-p+*,*-py+*} -QS "C-Phone_Hagukion" {*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-N+*,*-r+*,*-ry+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*} -QS "C-Phone_Kougaion" {*-g+*,*-gy+*,*-y+*,*-k+*,*-ky+*} -QS "C-Phone_Seimonon" {*-h+*,*-hy+*} -QS "C-Phone_Masatsuon" {*-v+*,*-z+*,*-j+*,*-f+*,*-s+*,*-sh+*,*-h+*,*-hy+*} -QS "C-Phone_Hasatsuon" {*-ts+*,*-ch+*} -QS "C-Phone_Haretsuon" {*-b+*,*-by+*,*-d+*,*-dy+*,*-g+*,*-gy+*,*-p+*,*-py+*,*-t+*,*-ty+*,*-k+*,*-ky+*} -QS "C-Phone_Bion" {*-m+*,*-my+*,*-n+*,*-ny+*,*-N+*} -QS "C-Phone_Han_Boin" {*-w+*,*-r+*,*-ry+*,*-y+*} - -QS "C-Phone_Yuusei_Kuchibiru_Haretsuon" {*-b+*,*-by+*} -QS "C-Phone_Yuusei_Kuchibiru_Bion" {*-m+*,*-my+*} -QS "C-Phone_Yuusei_Haguki_Masatsuon" {*-z+*,*-j+*} -QS "C-Phone_Yuusei_Haguki_Haretsuon" {*-d+*,*-dy+*} -QS "C-Phone_Yuusei_Haguki_Bion" {*-n+*,*-ny+*,*-N+*} -QS "C-Phone_Yuusei_Haguki_Han_Boin" {*-r+*,*-ry+*} -QS "C-Phone_Yuusei_Kougai_Haretsuon" {*-g+*,*-gy+*} -QS "C-Phone_Musei_Kuchibiru_Haretsuon" {*-p+*,*-py+*} -QS "C-Phone_Musei_Haguki_Masatsuon" {*-s+*,*-sh+*} -QS "C-Phone_Musei_Haguki_Hasatsuon" {*-ts+*,*-ch+*} -QS "C-Phone_Musei_Haguki_Haretsuon" {*-t+*,*-ty+*} -QS "C-Phone_Musei_Kougai_Haretsuon" {*-k+*,*-ky+*} -QS "C-Phone_Musei_Seimon_Masatsuon" {*-h+*,*-hy+*} - -QS "C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*} - -QS "C-Phone_N" {*-N+*} -QS "C-Phone_a" {*-a+*} -QS "C-Phone_b" {*-b+*} -QS "C-Phone_br" {*-br+*} -QS "C-Phone_by" {*-by+*} -QS "C-Phone_ch" {*-ch+*} -QS "C-Phone_cl" {*-cl+*} -QS "C-Phone_d" {*-d+*} -QS "C-Phone_dy" {*-dy+*} -QS "C-Phone_e" {*-e+*} -QS "C-Phone_f" {*-f+*} -QS "C-Phone_g" {*-g+*} -QS "C-Phone_gy" {*-gy+*} -QS "C-Phone_h" {*-h+*} -QS "C-Phone_hy" {*-hy+*} -QS "C-Phone_i" {*-i+*} -QS "C-Phone_j" {*-j+*} -QS "C-Phone_k" {*-k+*} -QS "C-Phone_ky" {*-ky+*} -QS "C-Phone_m" {*-m+*} -QS "C-Phone_my" {*-my+*} -QS "C-Phone_n" {*-n+*} -QS "C-Phone_ny" {*-ny+*} -QS "C-Phone_o" {*-o+*} -QS "C-Phone_p" {*-p+*} -QS "C-Phone_pau" {*-pau+*} -QS "C-Phone_py" {*-py+*} -QS "C-Phone_r" {*-r+*} -QS "C-Phone_ry" {*-ry+*} -QS "C-Phone_s" {*-s+*} -QS "C-Phone_sh" {*-sh+*} -QS "C-Phone_sil" {*-sil+*} -QS "C-Phone_t" {*-t+*} -QS "C-Phone_ts" {*-ts+*} -QS "C-Phone_ty" {*-ty+*} -QS "C-Phone_u" {*-u+*} -QS "C-Phone_v" {*-v+*} -QS "C-Phone_w" {*-w+*} -QS "C-Phone_y" {*-y+*} -QS "C-Phone_z" {*-z+*} - -QS "R-Phone_Yuuseion" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "R-Phone_Museion" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} -QS "R-Phone_Muon" {*+sil=*,*+pau=*} - -QS "R-Phone_Yuusei_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*} -QS "R-Phone_Yuusei_Maejita_Boin" {*+i=*,*+e=*} -QS "R-Phone_Yuusei_Atojita_Boin" {*+a=*,*+u=*,*+o=*} -QS "R-Phone_Yuusei_Sema_Boin" {*+i=*,*+u=*} -QS "R-Phone_Yuusei_Han_Sema_Boin" {*+e=*,*+o=*} -QS "R-Phone_Hiro_Boin" {*+a=*,*+A=*} - -QS "R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} -QS "R-Phone_Kuchibiruon" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+f=*,*+p=*,*+py=*} -QS "R-Phone_Hagukion" {*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+N=*,*+r=*,*+ry=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*} -QS "R-Phone_Kougaion" {*+g=*,*+gy=*,*+y=*,*+k=*,*+ky=*} -QS "R-Phone_Seimonon" {*+h=*,*+hy=*} -QS "R-Phone_Masatsuon" {*+v=*,*+z=*,*+j=*,*+f=*,*+s=*,*+sh=*,*+h=*,*+hy=*} -QS "R-Phone_Hasatsuon" {*+ts=*,*+ch=*} -QS "R-Phone_Haretsuon" {*+b=*,*+by=*,*+d=*,*+dy=*,*+g=*,*+gy=*,*+p=*,*+py=*,*+t=*,*+ty=*,*+k=*,*+ky=*} -QS "R-Phone_Bion" {*+m=*,*+my=*,*+n=*,*+ny=*,*+N=*} -QS "R-Phone_Han_Boin" {*+w=*,*+r=*,*+ry=*,*+y=*} - -QS "R-Phone_Yuusei_Kuchibiru_Haretsuon" {*+b=*,*+by=*} -QS "R-Phone_Yuusei_Kuchibiru_Bion" {*+m=*,*+my=*} -QS "R-Phone_Yuusei_Haguki_Masatsuon" {*+z=*,*+j=*} -QS "R-Phone_Yuusei_Haguki_Haretsuon" {*+d=*,*+dy=*} -QS "R-Phone_Yuusei_Haguki_Bion" {*+n=*,*+ny=*,*+N=*} -QS "R-Phone_Yuusei_Haguki_Han_Boin" {*+r=*,*+ry=*} -QS "R-Phone_Yuusei_Kougai_Haretsuon" {*+g=*,*+gy=*} -QS "R-Phone_Musei_Kuchibiru_Haretsuon" {*+p=*,*+py=*} -QS "R-Phone_Musei_Haguki_Masatsuon" {*+s=*,*+sh=*} -QS "R-Phone_Musei_Haguki_Hasatsuon" {*+ts=*,*+ch=*} -QS "R-Phone_Musei_Haguki_Haretsuon" {*+t=*,*+ty=*} -QS "R-Phone_Musei_Kougai_Haretsuon" {*+k=*,*+ky=*} -QS "R-Phone_Musei_Seimon_Masatsuon" {*+h=*,*+hy=*} - -QS "R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*} - - -QS "R-Phone_N" {*+N=*} - -QS "R-Phone_a" {*+a=*} -QS "R-Phone_b" {*+b=*} -QS "R-Phone_br" {*+br=*} -QS "R-Phone_by" {*+by=*} -QS "R-Phone_ch" {*+ch=*} -QS "R-Phone_cl" {*+cl=*} -QS "R-Phone_d" {*+d=*} -QS "R-Phone_dy" {*+dy=*} -QS "R-Phone_e" {*+e=*} -QS "R-Phone_f" {*+f=*} -QS "R-Phone_g" {*+g=*} -QS "R-Phone_gy" {*+gy=*} -QS "R-Phone_h" {*+h=*} -QS "R-Phone_hy" {*+hy=*} -QS "R-Phone_i" {*+i=*} -QS "R-Phone_j" {*+j=*} -QS "R-Phone_k" {*+k=*} -QS "R-Phone_ky" {*+ky=*} -QS "R-Phone_m" {*+m=*} -QS "R-Phone_my" {*+my=*} -QS "R-Phone_n" {*+n=*} -QS "R-Phone_ny" {*+ny=*} -QS "R-Phone_o" {*+o=*} -QS "R-Phone_p" {*+p=*} -QS "R-Phone_pau" {*+pau=*} -QS "R-Phone_py" {*+py=*} -QS "R-Phone_r" {*+r=*} -QS "R-Phone_ry" {*+ry=*} -QS "R-Phone_s" {*+s=*} -QS "R-Phone_sh" {*+sh=*} -QS "R-Phone_sil" {*+sil=*} -QS "R-Phone_t" {*+t=*} -QS "R-Phone_ts" {*+ts=*} -QS "R-Phone_ty" {*+ty=*} -QS "R-Phone_u" {*+u=*} -QS "R-Phone_v" {*+v=*} -QS "R-Phone_w" {*+w=*} -QS "R-Phone_y" {*+y=*} -QS "R-Phone_z" {*+z=*} - -CQS "d1" {/D:(\NOTE)!} -CQS "e1" {/E:(\NOTE)]} -CQS "f1" {/F:(\NOTE)#} - -CQS "p12" {-(\d+)!} -CQS "p13" {!(\d+)[} - -CQS "p15" {$(\d+)]} -CQS "a1" {/A:(\d+)-} -CQS "a2" {-(\d+)-} -CQS "a3" {-(\d+)@} - -QS "L-Syllable_Language=JPN" {*@JPN~*} - -QS "L-Syllable_Language=JPN_0" {*@JPN~0/B:*} -QS "L-Syllable_Language=JPN_1" {*@JPN~1/B:*} - -CQS "b1" {/B:(\d+)_} -CQS "b2" {_(\d+)_} -CQS "b3" {_(\d+)@} -QS "C-Syllable_Language=JPN" {*@JPN|*} - -QS "C-Syllable_Language=JPN_0" {*@JPN|0/C:*} -QS "C-Syllable_Language=JPN_1" {*@JPN|1/C:*} - -CQS "c1" {/C:(\d+)+} -CQS "c2" {+(\d+)+} -CQS "c3" {+(\d+)@} - -QS "R-Syllable_Language=JPN" {*@JPN&*} - -QS "R-Syllable_Language=JPN_0" {*@JPN&0/D:*} -QS "R-Syllable_Language=JPN_1" {*@JPN&1/D:*} - -CQS "d2" {!(\d+)#} -CQS "d3" {#(\d+)$} - -CQS "d6" {|(\d+)&} -CQS "d7" {&(\d+);} -CQS "d8" {;(\d+)-} - -CQS "e2" {](\d+)^} -CQS "e3" {^(\d+)=} - -CQS "e6" {!(\d+)@} -CQS "e7" {@(\d+)#} -CQS "e8" {#(\d+)+} - -CQS "e26" {|(\d+)]} -CQS "e27" {](\d+)-} - -QS "C-Note_Dynamic<=mp" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*} -QS "C-Note_Dynamic<=n" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*} -QS "C-Note_Dynamic<=mf" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*} -QS "C-Note_Dynamic<=f1" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*} -QS "C-Note_Dynamic<=f2" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*,*-ff^*} -QS "C-Note_Dynamic<=f3" {*-pppp^*,*-ppp^*,*-pp^*,*-p^*,*-mp^*,*-n^*,*-mf^*,*-f^*,*-ff^*,*-fff^*} - -CQS "e35" {!(\d+)%} -CQS "e36" {%(\d+)#} -CQS "e37" {#(\d+)|} -CQS "e38" {|(\d+)|} -CQS "e39" {|(\d+)-} -CQS "e40" {-(\d+)&} -CQS "e41" {&(\d+)&} -CQS "e42" {&(\d+)+} -CQS "e43" {+(\d+)[} -CQS "e44" {[(\d+);} -CQS "e45" {;(\d+)]} -CQS "e46" {](\d+);} -CQS "e47" {;(\d+)~} -CQS "e48" {~(\d+)~} -CQS "e49" {~(\d+)^} -CQS "e50" {^(\d+)^} -CQS "e51" {^(\d+)@} -CQS "e52" {@(\d+)[} - -CQS "e54" {#(\d+)=} -CQS "e55" {=(\d+)!} -CQS "e56" {!(\d+)~} - -CQS "e57" {~([pm]\d+)+} -CQS "e58" {+([pm]\d+)!} - -CQS "f2" {#(\d+)#} -CQS "f3" {#(\d+)-} - -CQS "f6" {$(\d+)+} -CQS "f7" {+(\d+)%} -CQS "f8" {%(\d+);} diff --git a/train/hed/jp_qst_crazy_mono_007_enunu_173D.hed b/train/hed/jp_qst_crazy_mono_007_enunu_173D.hed deleted file mode 100644 index 9e935bb..0000000 --- a/train/hed/jp_qst_crazy_mono_007_enunu_173D.hed +++ /dev/null @@ -1,189 +0,0 @@ -QS "p3_L-Phone_Muon" {*^pau-*,*^sil-*} -QS "p4_C-Phone_Muon" {*-pau+*,*-sil+*} -QS "p5_R-Phone_Muon" {*+pau=*,*+sil=*} - -QS "p3_L-Phone_Boin_and_N" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^N-*} -QS "p4_C-Phone_Boin_and_N" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-N+*} -QS "p5_R-Phone_Boin_and_N" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+N=*} - -QS "p3_L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "p4_C-Phone_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "p5_R-Phone_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} - -QS "p3_L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*} -QS "p4_C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*} -QS "p5_R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*} - -QS "p3_L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "p4_C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "p5_R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "p3_L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "p4_C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "p5_R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} - -QS "p3_L-Phone_cl" {*^cl-*} -QS "p4_C-Phone_cl" {*-cl+*} -QS "p5_R-Phone_cl" {*+cl=*} -QS "p3_L-Phone_pau" {*^pau-*} -QS "p4_C-Phone_pau" {*-pau+*} -QS "p5_R-Phone_pau" {*+pau=*} -QS "p3_L-Phone_sil" {*^sil-*} -QS "p4_C-Phone_sil" {*-sil+*} -QS "p5_R-Phone_sil" {*+sil=*} -QS "p3_L-Phone_N" {*^N-*} -QS "p4_C-Phone_N" {*-N+*} -QS "p5_R-Phone_N" {*+N=*} -QS "p3_L-Phone_a" {*^a-*,*^A-*} -QS "p4_C-Phone_a" {*-a+*,*-A+*} -QS "p5_R-Phone_a" {*+a=*,*+A=*} -QS "p3_L-Phone_b" {*^b-*} -QS "p4_C-Phone_b" {*-b+*} -QS "p5_R-Phone_b" {*+b=*} -QS "p3_L-Phone_by" {*^by-*} -QS "p4_C-Phone_by" {*-by+*} -QS "p5_R-Phone_by" {*+by=*} -QS "p3_L-Phone_ch" {*^ch-*} -QS "p4_C-Phone_ch" {*-ch+*} -QS "p5_R-Phone_ch" {*+ch=*} -QS "p3_L-Phone_d" {*^d-*} -QS "p4_C-Phone_d" {*-d+*} -QS "p5_R-Phone_d" {*+d=*} -QS "p3_L-Phone_dy" {*^dy-*} -QS "p4_C-Phone_dy" {*-dy+*} -QS "p5_R-Phone_dy" {*+dy=*} -QS "p3_L-Phone_e" {*^e-*,*^E-*} -QS "p4_C-Phone_e" {*-e+*,*-E+*} -QS "p5_R-Phone_e" {*+e=*,*+E=*} -QS "p3_L-Phone_f" {*^f-*} -QS "p4_C-Phone_f" {*-f+*} -QS "p5_R-Phone_f" {*+f=*} -QS "p3_L-Phone_g" {*^g-*} -QS "p4_C-Phone_g" {*-g+*} -QS "p5_R-Phone_g" {*+g=*} -QS "p3_L-Phone_gy" {*^gy-*} -QS "p4_C-Phone_gy" {*-gy+*} -QS "p5_R-Phone_gy" {*+gy=*} -QS "p3_L-Phone_h" {*^h-*} -QS "p4_C-Phone_h" {*-h+*} -QS "p5_R-Phone_h" {*+h=*} -QS "p3_L-Phone_hy" {*^hy-*} -QS "p4_C-Phone_hy" {*-hy+*} -QS "p5_R-Phone_hy" {*+hy=*} -QS "p3_L-Phone_i" {*^i-*,*^I-*} -QS "p4_C-Phone_i" {*-i+*,*-I+*} -QS "p5_R-Phone_i" {*+i=*,*+I=*} -QS "p3_L-Phone_j" {*^j-*} -QS "p4_C-Phone_j" {*-j+*} -QS "p5_R-Phone_j" {*+j=*} -QS "p3_L-Phone_k" {*^k-*} -QS "p4_C-Phone_k" {*-k+*} -QS "p5_R-Phone_k" {*+k=*} -QS "p3_L-Phone_ky" {*^ky-*} -QS "p4_C-Phone_ky" {*-ky+*} -QS "p5_R-Phone_ky" {*+ky=*} -QS "p3_L-Phone_m" {*^m-*} -QS "p4_C-Phone_m" {*-m+*} -QS "p5_R-Phone_m" {*+m=*} -QS "p3_L-Phone_my" {*^my-*} -QS "p4_C-Phone_my" {*-my+*} -QS "p5_R-Phone_my" {*+my=*} -QS "p3_L-Phone_n" {*^n-*} -QS "p4_C-Phone_n" {*-n+*} -QS "p5_R-Phone_n" {*+n=*} -QS "p3_L-Phone_ny" {*^ny-*} -QS "p4_C-Phone_ny" {*-ny+*} -QS "p5_R-Phone_ny" {*+ny=*} -QS "p3_L-Phone_o" {*^o-*,*^O-*} -QS "p4_C-Phone_o" {*-o+*,*-O+*} -QS "p5_R-Phone_o" {*+o=*,*+O=*} -QS "p3_L-Phone_p" {*^p-*} -QS "p4_C-Phone_p" {*-p+*} -QS "p5_R-Phone_p" {*+p=*} -QS "p3_L-Phone_py" {*^py-*} -QS "p4_C-Phone_py" {*-py+*} -QS "p5_R-Phone_py" {*+py=*} -QS "p3_L-Phone_r" {*^r-*} -QS "p4_C-Phone_r" {*-r+*} -QS "p5_R-Phone_r" {*+r=*} -QS "p3_L-Phone_ry" {*^ry-*} -QS "p4_C-Phone_ry" {*-ry+*} -QS "p5_R-Phone_ry" {*+ry=*} -QS "p3_L-Phone_s" {*^s-*} -QS "p4_C-Phone_s" {*-s+*} -QS "p5_R-Phone_s" {*+s=*} -QS "p3_L-Phone_sh" {*^sh-*} -QS "p4_C-Phone_sh" {*-sh+*} -QS "p5_R-Phone_sh" {*+sh=*} -QS "p3_L-Phone_t" {*^t-*} -QS "p4_C-Phone_t" {*-t+*} -QS "p5_R-Phone_t" {*+t=*} -QS "p3_L-Phone_ts" {*^ts-*} -QS "p4_C-Phone_ts" {*-ts+*} -QS "p5_R-Phone_ts" {*+ts=*} -QS "p3_L-Phone_ty" {*^ty-*} -QS "p4_C-Phone_ty" {*-ty+*} -QS "p5_R-Phone_ty" {*+ty=*} -QS "p3_L-Phone_u" {*^u-*, *^U-*} -QS "p4_C-Phone_u" {*-u+*, *-U+*} -QS "p5_R-Phone_u" {*+u=*, *+U=*} -QS "p3_L-Phone_v" {*^v-*} -QS "p4_C-Phone_v" {*-v+*} -QS "p5_R-Phone_v" {*+v=*} -QS "p3_L-Phone_w" {*^w-*} -QS "p4_C-Phone_w" {*-w+*} -QS "p5_R-Phone_w" {*+w=*} -QS "p3_L-Phone_y" {*^y-*} -QS "p4_C-Phone_y" {*-y+*} -QS "p5_R-Phone_y" {*+y=*} -QS "p3_L-Phone_z" {*^z-*} -QS "p4_C-Phone_z" {*-z+*} -QS "p5_R-Phone_z" {*+z=*} - -CQS "d1_absolute_pitch" {/D:(\NOTE)!} -CQS "e1_absolute_pitch" {/E:(\NOTE)]} -CQS "f1_absolute_pitch" {/F:(\NOTE)#} - -CQS "p12_position" {-(\d+)!} -CQS "p13_position" {!(\d+)[} -CQS "p14_distance_from_vowel" {[(\d+)$} -CQS "p15_distance_from_vowel" {$(\d+)]} - -CQS "a1_number_of_phonemes" {/A:(\d+)-} -CQS "a2_position" {-(\d+)-} -CQS "a3_position" {-(\d+)@} - -CQS "b1_number_of_phonemes" {/B:(\d+)_} -CQS "b2_position" {_(\d+)_} -CQS "b3_position" {_(\d+)@} - -CQS "c1_number_of_phonemes" {/C:(\d+)+} -CQS "c2_position" {+(\d+)+} -CQS "c3_position" {+(\d+)@} - -CQS "d6_length_by_syllable" {|(\d+)&} -CQS "d7_length_by_10ms" {&(\d+);} -CQS "d8_length_by_96th_note" {;(\d+)-} - -CQS "e6_length_by_syllable" {!(\d+)@} -CQS "e7_length_by_10ms" {@(\d+)#} -CQS "e8_length_by_96th_note" {#(\d+)+} - -CQS "e18_position_by_note" {∼(\d+)#} -CQS "e19_position_by_note" {#(\d+)_} -CQS "e20_position_by_10ms" {_(\d+);} -CQS "e21_position_by_10ms" {;(\d+)$} -CQS "e22_position_by_96th_note" {$(\d+)&} -CQS "e23_position_by_96th_note" {&(\d+)%} -CQS "e24_position_by_percent" {%(\d+)[} -CQS "e25_position_by_percent" {[(\d+)|} - -CQS "e57_pitch_difference" {~([pm]\d+)+} -CQS "e58_pitch_difference" {+([pm]\d+)!} - -CQS "f6_length_by_syllable" {$(\d+)+} -CQS "f7_length_by_10ms" {+(\d+)%} -CQS "f8_length_by_96th_note" {%(\d+);} diff --git a/train/hed/jp_qst_crazy_mono_010_enunu_209D.hed b/train/hed/jp_qst_crazy_mono_010_enunu_209D.hed deleted file mode 100644 index 700b3d9..0000000 --- a/train/hed/jp_qst_crazy_mono_010_enunu_209D.hed +++ /dev/null @@ -1,227 +0,0 @@ -QS "p3_L-Phone_Muon" {*^pau-*,*^sil-*} -QS "p4_C-Phone_Muon" {*-pau+*,*-sil+*} -QS "p5_R-Phone_Muon" {*+pau=*,*+sil=*} - -QS "p3_L-Phone_Boin_and_N" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^N-*} -QS "p4_C-Phone_Boin_and_N" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-N+*} -QS "p5_R-Phone_Boin_and_N" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+N=*} - -QS "p3_L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Yuusei_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*} -QS "p4_C-Phone_Yuusei_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*} -QS "p5_R-Phone_Yuusei_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*} - -QS "p3_L-Phone_Musei_Boin" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Musei_Boin" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Musei_Boin" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "p4_C-Phone_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "p5_R-Phone_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} - -QS "p3_L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*} -QS "p4_C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*} -QS "p5_R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*} - -QS "p3_L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "p4_C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "p5_R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "p3_L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "p4_C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "p5_R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} - -QS "p3_L-Phone_cl" {*^cl-*} -QS "p4_C-Phone_cl" {*-cl+*} -QS "p5_R-Phone_cl" {*+cl=*} -QS "p3_L-Phone_pau" {*^pau-*} -QS "p4_C-Phone_pau" {*-pau+*} -QS "p5_R-Phone_pau" {*+pau=*} -QS "p3_L-Phone_sil" {*^sil-*} -QS "p4_C-Phone_sil" {*-sil+*} -QS "p5_R-Phone_sil" {*+sil=*} -QS "p3_L-Phone_N" {*^N-*} -QS "p4_C-Phone_N" {*-N+*} -QS "p5_R-Phone_N" {*+N=*} -QS "p3_L-Phone_a_A" {*^a-*,*^A-*} -QS "p4_C-Phone_a_A" {*-a+*,*-A+*} -QS "p5_R-Phone_a_A" {*+a=*,*+A=*} -QS "p3_L-Phone_a" {*^a-*} -QS "p4_C-Phone_a" {*-a+*} -QS "p5_R-Phone_a" {*+a=*} -QS "p3_L-Phone_A" {*^A-*} -QS "p4_C-Phone_A" {*-A+*} -QS "p5_R-Phone_A" {*+A=*} -QS "p3_L-Phone_b" {*^b-*} -QS "p4_C-Phone_b" {*-b+*} -QS "p5_R-Phone_b" {*+b=*} -QS "p3_L-Phone_by" {*^by-*} -QS "p4_C-Phone_by" {*-by+*} -QS "p5_R-Phone_by" {*+by=*} -QS "p3_L-Phone_ch" {*^ch-*} -QS "p4_C-Phone_ch" {*-ch+*} -QS "p5_R-Phone_ch" {*+ch=*} -QS "p3_L-Phone_d" {*^d-*} -QS "p4_C-Phone_d" {*-d+*} -QS "p5_R-Phone_d" {*+d=*} -QS "p3_L-Phone_dy" {*^dy-*} -QS "p4_C-Phone_dy" {*-dy+*} -QS "p5_R-Phone_dy" {*+dy=*} -QS "p3_L-Phone_e_E" {*^e-*,*^E-*} -QS "p4_C-Phone_e_E" {*-e+*,*-E+*} -QS "p5_R-Phone_e_E" {*+e=*,*+E=*} -QS "p3_L-Phone_e" {*^e-*} -QS "p4_C-Phone_e" {*-e+*} -QS "p5_R-Phone_e" {*+e=*} -QS "p3_L-Phone_E" {*^E-*} -QS "p4_C-Phone_E" {*-E+*} -QS "p5_R-Phone_E" {*+E=*} -QS "p3_L-Phone_f" {*^f-*} -QS "p4_C-Phone_f" {*-f+*} -QS "p5_R-Phone_f" {*+f=*} -QS "p3_L-Phone_g" {*^g-*} -QS "p4_C-Phone_g" {*-g+*} -QS "p5_R-Phone_g" {*+g=*} -QS "p3_L-Phone_gy" {*^gy-*} -QS "p4_C-Phone_gy" {*-gy+*} -QS "p5_R-Phone_gy" {*+gy=*} -QS "p3_L-Phone_h" {*^h-*} -QS "p4_C-Phone_h" {*-h+*} -QS "p5_R-Phone_h" {*+h=*} -QS "p3_L-Phone_hy" {*^hy-*} -QS "p4_C-Phone_hy" {*-hy+*} -QS "p5_R-Phone_hy" {*+hy=*} -QS "p3_L-Phone_i_I" {*^i-*,*^I-*} -QS "p4_C-Phone_i_I" {*-i+*,*-I+*} -QS "p5_R-Phone_i_I" {*+i=*,*+I=*} -QS "p3_L-Phone_i" {*^i-*} -QS "p4_C-Phone_i" {*-i+*} -QS "p5_R-Phone_i" {*+i=*} -QS "p3_L-Phone_I" {*^I-*} -QS "p4_C-Phone_I" {*-I+*} -QS "p5_R-Phone_I" {*+I=*} -QS "p3_L-Phone_j" {*^j-*} -QS "p4_C-Phone_j" {*-j+*} -QS "p5_R-Phone_j" {*+j=*} -QS "p3_L-Phone_k" {*^k-*} -QS "p4_C-Phone_k" {*-k+*} -QS "p5_R-Phone_k" {*+k=*} -QS "p3_L-Phone_ky" {*^ky-*} -QS "p4_C-Phone_ky" {*-ky+*} -QS "p5_R-Phone_ky" {*+ky=*} -QS "p3_L-Phone_m" {*^m-*} -QS "p4_C-Phone_m" {*-m+*} -QS "p5_R-Phone_m" {*+m=*} -QS "p3_L-Phone_my" {*^my-*} -QS "p4_C-Phone_my" {*-my+*} -QS "p5_R-Phone_my" {*+my=*} -QS "p3_L-Phone_n" {*^n-*} -QS "p4_C-Phone_n" {*-n+*} -QS "p5_R-Phone_n" {*+n=*} -QS "p3_L-Phone_ny" {*^ny-*} -QS "p4_C-Phone_ny" {*-ny+*} -QS "p5_R-Phone_ny" {*+ny=*} -QS "p3_L-Phone_o_O" {*^o-*,*^O-*} -QS "p4_C-Phone_o_O" {*-o+*,*-O+*} -QS "p5_R-Phone_o_O" {*+o=*,*+O=*} -QS "p3_L-Phone_o" {*^o-*} -QS "p4_C-Phone_o" {*-o+*} -QS "p5_R-Phone_o" {*+o=*} -QS "p3_L-Phone_O" {*^O-*} -QS "p4_C-Phone_O" {*-O+*} -QS "p5_R-Phone_O" {*+O=*} -QS "p3_L-Phone_p" {*^p-*} -QS "p4_C-Phone_p" {*-p+*} -QS "p5_R-Phone_p" {*+p=*} -QS "p3_L-Phone_py" {*^py-*} -QS "p4_C-Phone_py" {*-py+*} -QS "p5_R-Phone_py" {*+py=*} -QS "p3_L-Phone_r" {*^r-*} -QS "p4_C-Phone_r" {*-r+*} -QS "p5_R-Phone_r" {*+r=*} -QS "p3_L-Phone_ry" {*^ry-*} -QS "p4_C-Phone_ry" {*-ry+*} -QS "p5_R-Phone_ry" {*+ry=*} -QS "p3_L-Phone_s" {*^s-*} -QS "p4_C-Phone_s" {*-s+*} -QS "p5_R-Phone_s" {*+s=*} -QS "p3_L-Phone_sh" {*^sh-*} -QS "p4_C-Phone_sh" {*-sh+*} -QS "p5_R-Phone_sh" {*+sh=*} -QS "p3_L-Phone_t" {*^t-*} -QS "p4_C-Phone_t" {*-t+*} -QS "p5_R-Phone_t" {*+t=*} -QS "p3_L-Phone_ts" {*^ts-*} -QS "p4_C-Phone_ts" {*-ts+*} -QS "p5_R-Phone_ts" {*+ts=*} -QS "p3_L-Phone_ty" {*^ty-*} -QS "p4_C-Phone_ty" {*-ty+*} -QS "p5_R-Phone_ty" {*+ty=*} -QS "p3_L-Phone_u_U" {*^u-*, *^U-*} -QS "p4_C-Phone_u_U" {*-u+*, *-U+*} -QS "p5_R-Phone_u_U" {*+u=*, *+U=*} -QS "p3_L-Phone_u" {*^u-*} -QS "p4_C-Phone_u" {*-u+*} -QS "p5_R-Phone_u" {*+u=*} -QS "p3_L-Phone_U" {*^U-*} -QS "p4_C-Phone_U" {*-U+*} -QS "p5_R-Phone_U" {*+U=*} -QS "p3_L-Phone_v" {*^v-*} -QS "p4_C-Phone_v" {*-v+*} -QS "p5_R-Phone_v" {*+v=*} -QS "p3_L-Phone_w" {*^w-*} -QS "p4_C-Phone_w" {*-w+*} -QS "p5_R-Phone_w" {*+w=*} -QS "p3_L-Phone_y" {*^y-*} -QS "p4_C-Phone_y" {*-y+*} -QS "p5_R-Phone_y" {*+y=*} -QS "p3_L-Phone_z" {*^z-*} -QS "p4_C-Phone_z" {*-z+*} -QS "p5_R-Phone_z" {*+z=*} - -CQS "d1_absolute_pitch" {/D:(\NOTE)!} -CQS "e1_absolute_pitch" {/E:(\NOTE)]} -CQS "f1_absolute_pitch" {/F:(\NOTE)#} - -CQS "p12_position" {-(\d+)!} -CQS "p13_position" {!(\d+)[} -CQS "p14_distance_from_vowel" {[(\d+)$} -CQS "p15_distance_from_vowel" {$(\d+)]} - -CQS "a1_number_of_phonemes" {/A:(\d+)-} -CQS "a2_position" {-(\d+)-} -CQS "a3_position" {-(\d+)@} - -CQS "b1_number_of_phonemes" {/B:(\d+)_} -CQS "b2_position" {_(\d+)_} -CQS "b3_position" {_(\d+)@} - -CQS "c1_number_of_phonemes" {/C:(\d+)+} -CQS "c2_position" {+(\d+)+} -CQS "c3_position" {+(\d+)@} - -CQS "d6_length_by_syllable" {|(\d+)&} -CQS "d7_length_by_10ms" {&(\d+);} -CQS "d8_length_by_96th_note" {;(\d+)-} - -CQS "e6_length_by_syllable" {!(\d+)@} -CQS "e7_length_by_10ms" {@(\d+)#} -CQS "e8_length_by_96th_note" {#(\d+)+} - -CQS "e18_position_by_note" {∼(\d+)#} -CQS "e19_position_by_note" {#(\d+)_} -CQS "e20_position_by_10ms" {_(\d+);} -CQS "e21_position_by_10ms" {;(\d+)$} -CQS "e22_position_by_96th_note" {$(\d+)&} -CQS "e23_position_by_96th_note" {&(\d+)%} -CQS "e24_position_by_percent" {%(\d+)[} -CQS "e25_position_by_percent" {[(\d+)|} - -CQS "e57_pitch_difference" {~([pm]\d+)+} -CQS "e58_pitch_difference" {+([pm]\d+)!} - -CQS "f6_length_by_syllable" {$(\d+)+} -CQS "f7_length_by_10ms" {+(\d+)%} -CQS "f8_length_by_96th_note" {%(\d+);} diff --git a/train/hed/jp_qst_crazy_mono_011_enunu_194D.hed b/train/hed/jp_qst_crazy_mono_011_enunu_194D.hed deleted file mode 100644 index fb6e3bf..0000000 --- a/train/hed/jp_qst_crazy_mono_011_enunu_194D.hed +++ /dev/null @@ -1,212 +0,0 @@ -QS "p3_L-Phone_Muon" {*^pau-*,*^sil-*} -QS "p4_C-Phone_Muon" {*-pau+*,*-sil+*} -QS "p5_R-Phone_Muon" {*+pau=*,*+sil=*} - -QS "p3_L-Phone_Boin_and_N" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^N-*} -QS "p4_C-Phone_Boin_and_N" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-N+*} -QS "p5_R-Phone_Boin_and_N" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+N=*} - -QS "p3_L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Yuusei_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*} -QS "p4_C-Phone_Yuusei_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*} -QS "p5_R-Phone_Yuusei_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*} - -QS "p3_L-Phone_Musei_Boin" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Musei_Boin" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Musei_Boin" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "p4_C-Phone_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "p5_R-Phone_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} - -QS "p3_L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*} -QS "p4_C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*} -QS "p5_R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*} - -QS "p3_L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "p4_C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "p5_R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "p3_L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*} -QS "p4_C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*} -QS "p5_R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*} - -QS "p3_L-Phone_cl" {*^cl-*} -QS "p4_C-Phone_cl" {*-cl+*} -QS "p5_R-Phone_cl" {*+cl=*} -QS "p3_L-Phone_pau" {*^pau-*} -QS "p4_C-Phone_pau" {*-pau+*} -QS "p5_R-Phone_pau" {*+pau=*} -QS "p3_L-Phone_sil" {*^sil-*} -QS "p4_C-Phone_sil" {*-sil+*} -QS "p5_R-Phone_sil" {*+sil=*} -QS "p3_L-Phone_N" {*^N-*} -QS "p4_C-Phone_N" {*-N+*} -QS "p5_R-Phone_N" {*+N=*} -QS "p3_L-Phone_a" {*^a-*} -QS "p4_C-Phone_a" {*-a+*} -QS "p5_R-Phone_a" {*+a=*} -QS "p3_L-Phone_A" {*^A-*} -QS "p4_C-Phone_A" {*-A+*} -QS "p5_R-Phone_A" {*+A=*} -QS "p3_L-Phone_b" {*^b-*} -QS "p4_C-Phone_b" {*-b+*} -QS "p5_R-Phone_b" {*+b=*} -QS "p3_L-Phone_by" {*^by-*} -QS "p4_C-Phone_by" {*-by+*} -QS "p5_R-Phone_by" {*+by=*} -QS "p3_L-Phone_ch" {*^ch-*} -QS "p4_C-Phone_ch" {*-ch+*} -QS "p5_R-Phone_ch" {*+ch=*} -QS "p3_L-Phone_d" {*^d-*} -QS "p4_C-Phone_d" {*-d+*} -QS "p5_R-Phone_d" {*+d=*} -QS "p3_L-Phone_dy" {*^dy-*} -QS "p4_C-Phone_dy" {*-dy+*} -QS "p5_R-Phone_dy" {*+dy=*} -QS "p3_L-Phone_e" {*^e-*} -QS "p4_C-Phone_e" {*-e+*} -QS "p5_R-Phone_e" {*+e=*} -QS "p3_L-Phone_E" {*^E-*} -QS "p4_C-Phone_E" {*-E+*} -QS "p5_R-Phone_E" {*+E=*} -QS "p3_L-Phone_f" {*^f-*} -QS "p4_C-Phone_f" {*-f+*} -QS "p5_R-Phone_f" {*+f=*} -QS "p3_L-Phone_g" {*^g-*} -QS "p4_C-Phone_g" {*-g+*} -QS "p5_R-Phone_g" {*+g=*} -QS "p3_L-Phone_gy" {*^gy-*} -QS "p4_C-Phone_gy" {*-gy+*} -QS "p5_R-Phone_gy" {*+gy=*} -QS "p3_L-Phone_h" {*^h-*} -QS "p4_C-Phone_h" {*-h+*} -QS "p5_R-Phone_h" {*+h=*} -QS "p3_L-Phone_hy" {*^hy-*} -QS "p4_C-Phone_hy" {*-hy+*} -QS "p5_R-Phone_hy" {*+hy=*} -QS "p3_L-Phone_i" {*^i-*} -QS "p4_C-Phone_i" {*-i+*} -QS "p5_R-Phone_i" {*+i=*} -QS "p3_L-Phone_I" {*^I-*} -QS "p4_C-Phone_I" {*-I+*} -QS "p5_R-Phone_I" {*+I=*} -QS "p3_L-Phone_j" {*^j-*} -QS "p4_C-Phone_j" {*-j+*} -QS "p5_R-Phone_j" {*+j=*} -QS "p3_L-Phone_k" {*^k-*} -QS "p4_C-Phone_k" {*-k+*} -QS "p5_R-Phone_k" {*+k=*} -QS "p3_L-Phone_ky" {*^ky-*} -QS "p4_C-Phone_ky" {*-ky+*} -QS "p5_R-Phone_ky" {*+ky=*} -QS "p3_L-Phone_m" {*^m-*} -QS "p4_C-Phone_m" {*-m+*} -QS "p5_R-Phone_m" {*+m=*} -QS "p3_L-Phone_my" {*^my-*} -QS "p4_C-Phone_my" {*-my+*} -QS "p5_R-Phone_my" {*+my=*} -QS "p3_L-Phone_n" {*^n-*} -QS "p4_C-Phone_n" {*-n+*} -QS "p5_R-Phone_n" {*+n=*} -QS "p3_L-Phone_ny" {*^ny-*} -QS "p4_C-Phone_ny" {*-ny+*} -QS "p5_R-Phone_ny" {*+ny=*} -QS "p3_L-Phone_o" {*^o-*} -QS "p4_C-Phone_o" {*-o+*} -QS "p5_R-Phone_o" {*+o=*} -QS "p3_L-Phone_O" {*^O-*} -QS "p4_C-Phone_O" {*-O+*} -QS "p5_R-Phone_O" {*+O=*} -QS "p3_L-Phone_p" {*^p-*} -QS "p4_C-Phone_p" {*-p+*} -QS "p5_R-Phone_p" {*+p=*} -QS "p3_L-Phone_py" {*^py-*} -QS "p4_C-Phone_py" {*-py+*} -QS "p5_R-Phone_py" {*+py=*} -QS "p3_L-Phone_r" {*^r-*} -QS "p4_C-Phone_r" {*-r+*} -QS "p5_R-Phone_r" {*+r=*} -QS "p3_L-Phone_ry" {*^ry-*} -QS "p4_C-Phone_ry" {*-ry+*} -QS "p5_R-Phone_ry" {*+ry=*} -QS "p3_L-Phone_s" {*^s-*} -QS "p4_C-Phone_s" {*-s+*} -QS "p5_R-Phone_s" {*+s=*} -QS "p3_L-Phone_sh" {*^sh-*} -QS "p4_C-Phone_sh" {*-sh+*} -QS "p5_R-Phone_sh" {*+sh=*} -QS "p3_L-Phone_t" {*^t-*} -QS "p4_C-Phone_t" {*-t+*} -QS "p5_R-Phone_t" {*+t=*} -QS "p3_L-Phone_ts" {*^ts-*} -QS "p4_C-Phone_ts" {*-ts+*} -QS "p5_R-Phone_ts" {*+ts=*} -QS "p3_L-Phone_ty" {*^ty-*} -QS "p4_C-Phone_ty" {*-ty+*} -QS "p5_R-Phone_ty" {*+ty=*} -QS "p3_L-Phone_u" {*^u-*} -QS "p4_C-Phone_u" {*-u+*} -QS "p5_R-Phone_u" {*+u=*} -QS "p3_L-Phone_U" {*^U-*} -QS "p4_C-Phone_U" {*-U+*} -QS "p5_R-Phone_U" {*+U=*} -QS "p3_L-Phone_v" {*^v-*} -QS "p4_C-Phone_v" {*-v+*} -QS "p5_R-Phone_v" {*+v=*} -QS "p3_L-Phone_w" {*^w-*} -QS "p4_C-Phone_w" {*-w+*} -QS "p5_R-Phone_w" {*+w=*} -QS "p3_L-Phone_y" {*^y-*} -QS "p4_C-Phone_y" {*-y+*} -QS "p5_R-Phone_y" {*+y=*} -QS "p3_L-Phone_z" {*^z-*} -QS "p4_C-Phone_z" {*-z+*} -QS "p5_R-Phone_z" {*+z=*} - -CQS "d1_absolute_pitch" {/D:(\NOTE)!} -CQS "e1_absolute_pitch" {/E:(\NOTE)]} -CQS "f1_absolute_pitch" {/F:(\NOTE)#} - -CQS "p12_position" {-(\d+)!} -CQS "p13_position" {!(\d+)[} -CQS "p14_distance_from_vowel" {[(\d+)$} -CQS "p15_distance_from_vowel" {$(\d+)]} - -CQS "a1_number_of_phonemes" {/A:(\d+)-} -CQS "a2_position" {-(\d+)-} -CQS "a3_position" {-(\d+)@} - -CQS "b1_number_of_phonemes" {/B:(\d+)_} -CQS "b2_position" {_(\d+)_} -CQS "b3_position" {_(\d+)@} - -CQS "c1_number_of_phonemes" {/C:(\d+)+} -CQS "c2_position" {+(\d+)+} -CQS "c3_position" {+(\d+)@} - -CQS "d6_length_by_syllable" {|(\d+)&} -CQS "d7_length_by_10ms" {&(\d+);} -CQS "d8_length_by_96th_note" {;(\d+)-} - -CQS "e6_length_by_syllable" {!(\d+)@} -CQS "e7_length_by_10ms" {@(\d+)#} -CQS "e8_length_by_96th_note" {#(\d+)+} - -CQS "e18_position_by_note" {∼(\d+)#} -CQS "e19_position_by_note" {#(\d+)_} -CQS "e20_position_by_10ms" {_(\d+);} -CQS "e21_position_by_10ms" {;(\d+)$} -CQS "e22_position_by_96th_note" {$(\d+)&} -CQS "e23_position_by_96th_note" {&(\d+)%} -CQS "e24_position_by_percent" {%(\d+)[} -CQS "e25_position_by_percent" {[(\d+)|} - -CQS "e57_pitch_difference" {~([pm]\d+)+} -CQS "e58_pitch_difference" {+([pm]\d+)!} - -CQS "f6_length_by_syllable" {$(\d+)+} -CQS "f7_length_by_10ms" {+(\d+)%} -CQS "f8_length_by_96th_note" {%(\d+);} diff --git a/train/hed/jp_qst_crazy_mono_012_enunu_212D.hed b/train/hed/jp_qst_crazy_mono_012_enunu_212D.hed deleted file mode 100644 index bd95aac..0000000 --- a/train/hed/jp_qst_crazy_mono_012_enunu_212D.hed +++ /dev/null @@ -1,230 +0,0 @@ -QS "p3_L-Phone_Muon" {*^pau-*,*^sil-*} -QS "p4_C-Phone_Muon" {*-pau+*,*-sil+*} -QS "p5_R-Phone_Muon" {*+pau=*,*+sil=*} - -QS "p3_L-Phone_Boin_and_N" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^N-*} -QS "p4_C-Phone_Boin_and_N" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-N+*} -QS "p5_R-Phone_Boin_and_N" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+N=*} - -QS "p3_L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Yuusei_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*} -QS "p4_C-Phone_Yuusei_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*} -QS "p5_R-Phone_Yuusei_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*} - -QS "p3_L-Phone_Musei_Boin" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Musei_Boin" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Musei_Boin" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*,*^fy-*} -QS "p4_C-Phone_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*,*-fy+*} -QS "p5_R-Phone_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*,*+fy=*} - -QS "p3_L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*,*^fy-*} -QS "p4_C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*,*-fy+*} -QS "p5_R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*,*+fy=*} - -QS "p3_L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "p4_C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "p5_R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "p3_L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*,*^fy-*} -QS "p4_C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*,*-fy+*} -QS "p5_R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*,*+fy=*} - -QS "p3_L-Phone_cl" {*^cl-*} -QS "p4_C-Phone_cl" {*-cl+*} -QS "p5_R-Phone_cl" {*+cl=*} -QS "p3_L-Phone_pau" {*^pau-*} -QS "p4_C-Phone_pau" {*-pau+*} -QS "p5_R-Phone_pau" {*+pau=*} -QS "p3_L-Phone_sil" {*^sil-*} -QS "p4_C-Phone_sil" {*-sil+*} -QS "p5_R-Phone_sil" {*+sil=*} -QS "p3_L-Phone_N" {*^N-*} -QS "p4_C-Phone_N" {*-N+*} -QS "p5_R-Phone_N" {*+N=*} -QS "p3_L-Phone_a_A" {*^a-*,*^A-*} -QS "p4_C-Phone_a_A" {*-a+*,*-A+*} -QS "p5_R-Phone_a_A" {*+a=*,*+A=*} -QS "p3_L-Phone_a" {*^a-*} -QS "p4_C-Phone_a" {*-a+*} -QS "p5_R-Phone_a" {*+a=*} -QS "p3_L-Phone_A" {*^A-*} -QS "p4_C-Phone_A" {*-A+*} -QS "p5_R-Phone_A" {*+A=*} -QS "p3_L-Phone_b" {*^b-*} -QS "p4_C-Phone_b" {*-b+*} -QS "p5_R-Phone_b" {*+b=*} -QS "p3_L-Phone_by" {*^by-*} -QS "p4_C-Phone_by" {*-by+*} -QS "p5_R-Phone_by" {*+by=*} -QS "p3_L-Phone_ch" {*^ch-*} -QS "p4_C-Phone_ch" {*-ch+*} -QS "p5_R-Phone_ch" {*+ch=*} -QS "p3_L-Phone_d" {*^d-*} -QS "p4_C-Phone_d" {*-d+*} -QS "p5_R-Phone_d" {*+d=*} -QS "p3_L-Phone_dy" {*^dy-*} -QS "p4_C-Phone_dy" {*-dy+*} -QS "p5_R-Phone_dy" {*+dy=*} -QS "p3_L-Phone_e_E" {*^e-*,*^E-*} -QS "p4_C-Phone_e_E" {*-e+*,*-E+*} -QS "p5_R-Phone_e_E" {*+e=*,*+E=*} -QS "p3_L-Phone_e" {*^e-*} -QS "p4_C-Phone_e" {*-e+*} -QS "p5_R-Phone_e" {*+e=*} -QS "p3_L-Phone_E" {*^E-*} -QS "p4_C-Phone_E" {*-E+*} -QS "p5_R-Phone_E" {*+E=*} -QS "p3_L-Phone_f" {*^f-*} -QS "p4_C-Phone_f" {*-f+*} -QS "p5_R-Phone_f" {*+f=*} -QS "p3_L-Phone_fy" {*^fy-*} -QS "p4_C-Phone_fy" {*-fy+*} -QS "p5_R-Phone_fy" {*+fy=*} -QS "p3_L-Phone_g" {*^g-*} -QS "p4_C-Phone_g" {*-g+*} -QS "p5_R-Phone_g" {*+g=*} -QS "p3_L-Phone_gy" {*^gy-*} -QS "p4_C-Phone_gy" {*-gy+*} -QS "p5_R-Phone_gy" {*+gy=*} -QS "p3_L-Phone_h" {*^h-*} -QS "p4_C-Phone_h" {*-h+*} -QS "p5_R-Phone_h" {*+h=*} -QS "p3_L-Phone_hy" {*^hy-*} -QS "p4_C-Phone_hy" {*-hy+*} -QS "p5_R-Phone_hy" {*+hy=*} -QS "p3_L-Phone_i_I" {*^i-*,*^I-*} -QS "p4_C-Phone_i_I" {*-i+*,*-I+*} -QS "p5_R-Phone_i_I" {*+i=*,*+I=*} -QS "p3_L-Phone_i" {*^i-*} -QS "p4_C-Phone_i" {*-i+*} -QS "p5_R-Phone_i" {*+i=*} -QS "p3_L-Phone_I" {*^I-*} -QS "p4_C-Phone_I" {*-I+*} -QS "p5_R-Phone_I" {*+I=*} -QS "p3_L-Phone_j" {*^j-*} -QS "p4_C-Phone_j" {*-j+*} -QS "p5_R-Phone_j" {*+j=*} -QS "p3_L-Phone_k" {*^k-*} -QS "p4_C-Phone_k" {*-k+*} -QS "p5_R-Phone_k" {*+k=*} -QS "p3_L-Phone_ky" {*^ky-*} -QS "p4_C-Phone_ky" {*-ky+*} -QS "p5_R-Phone_ky" {*+ky=*} -QS "p3_L-Phone_m" {*^m-*} -QS "p4_C-Phone_m" {*-m+*} -QS "p5_R-Phone_m" {*+m=*} -QS "p3_L-Phone_my" {*^my-*} -QS "p4_C-Phone_my" {*-my+*} -QS "p5_R-Phone_my" {*+my=*} -QS "p3_L-Phone_n" {*^n-*} -QS "p4_C-Phone_n" {*-n+*} -QS "p5_R-Phone_n" {*+n=*} -QS "p3_L-Phone_ny" {*^ny-*} -QS "p4_C-Phone_ny" {*-ny+*} -QS "p5_R-Phone_ny" {*+ny=*} -QS "p3_L-Phone_o_O" {*^o-*,*^O-*} -QS "p4_C-Phone_o_O" {*-o+*,*-O+*} -QS "p5_R-Phone_o_O" {*+o=*,*+O=*} -QS "p3_L-Phone_o" {*^o-*} -QS "p4_C-Phone_o" {*-o+*} -QS "p5_R-Phone_o" {*+o=*} -QS "p3_L-Phone_O" {*^O-*} -QS "p4_C-Phone_O" {*-O+*} -QS "p5_R-Phone_O" {*+O=*} -QS "p3_L-Phone_p" {*^p-*} -QS "p4_C-Phone_p" {*-p+*} -QS "p5_R-Phone_p" {*+p=*} -QS "p3_L-Phone_py" {*^py-*} -QS "p4_C-Phone_py" {*-py+*} -QS "p5_R-Phone_py" {*+py=*} -QS "p3_L-Phone_r" {*^r-*} -QS "p4_C-Phone_r" {*-r+*} -QS "p5_R-Phone_r" {*+r=*} -QS "p3_L-Phone_ry" {*^ry-*} -QS "p4_C-Phone_ry" {*-ry+*} -QS "p5_R-Phone_ry" {*+ry=*} -QS "p3_L-Phone_s" {*^s-*} -QS "p4_C-Phone_s" {*-s+*} -QS "p5_R-Phone_s" {*+s=*} -QS "p3_L-Phone_sh" {*^sh-*} -QS "p4_C-Phone_sh" {*-sh+*} -QS "p5_R-Phone_sh" {*+sh=*} -QS "p3_L-Phone_t" {*^t-*} -QS "p4_C-Phone_t" {*-t+*} -QS "p5_R-Phone_t" {*+t=*} -QS "p3_L-Phone_ts" {*^ts-*} -QS "p4_C-Phone_ts" {*-ts+*} -QS "p5_R-Phone_ts" {*+ts=*} -QS "p3_L-Phone_ty" {*^ty-*} -QS "p4_C-Phone_ty" {*-ty+*} -QS "p5_R-Phone_ty" {*+ty=*} -QS "p3_L-Phone_u_U" {*^u-*, *^U-*} -QS "p4_C-Phone_u_U" {*-u+*, *-U+*} -QS "p5_R-Phone_u_U" {*+u=*, *+U=*} -QS "p3_L-Phone_u" {*^u-*} -QS "p4_C-Phone_u" {*-u+*} -QS "p5_R-Phone_u" {*+u=*} -QS "p3_L-Phone_U" {*^U-*} -QS "p4_C-Phone_U" {*-U+*} -QS "p5_R-Phone_U" {*+U=*} -QS "p3_L-Phone_v" {*^v-*} -QS "p4_C-Phone_v" {*-v+*} -QS "p5_R-Phone_v" {*+v=*} -QS "p3_L-Phone_w" {*^w-*} -QS "p4_C-Phone_w" {*-w+*} -QS "p5_R-Phone_w" {*+w=*} -QS "p3_L-Phone_y" {*^y-*} -QS "p4_C-Phone_y" {*-y+*} -QS "p5_R-Phone_y" {*+y=*} -QS "p3_L-Phone_z" {*^z-*} -QS "p4_C-Phone_z" {*-z+*} -QS "p5_R-Phone_z" {*+z=*} - -CQS "d1_absolute_pitch" {/D:(\NOTE)!} -CQS "e1_absolute_pitch" {/E:(\NOTE)]} -CQS "f1_absolute_pitch" {/F:(\NOTE)#} - -CQS "p12_position" {-(\d+)!} -CQS "p13_position" {!(\d+)[} -CQS "p14_distance_from_vowel" {[(\d+)$} -CQS "p15_distance_from_vowel" {$(\d+)]} - -CQS "a1_number_of_phonemes" {/A:(\d+)-} -CQS "a2_position" {-(\d+)-} -CQS "a3_position" {-(\d+)@} - -CQS "b1_number_of_phonemes" {/B:(\d+)_} -CQS "b2_position" {_(\d+)_} -CQS "b3_position" {_(\d+)@} - -CQS "c1_number_of_phonemes" {/C:(\d+)+} -CQS "c2_position" {+(\d+)+} -CQS "c3_position" {+(\d+)@} - -CQS "d6_length_by_syllable" {|(\d+)&} -CQS "d7_length_by_10ms" {&(\d+);} -CQS "d8_length_by_96th_note" {;(\d+)-} - -CQS "e6_length_by_syllable" {!(\d+)@} -CQS "e7_length_by_10ms" {@(\d+)#} -CQS "e8_length_by_96th_note" {#(\d+)+} - -CQS "e18_position_by_note" {∼(\d+)#} -CQS "e19_position_by_note" {#(\d+)_} -CQS "e20_position_by_10ms" {_(\d+);} -CQS "e21_position_by_10ms" {;(\d+)$} -CQS "e22_position_by_96th_note" {$(\d+)&} -CQS "e23_position_by_96th_note" {&(\d+)%} -CQS "e24_position_by_percent" {%(\d+)[} -CQS "e25_position_by_percent" {[(\d+)|} - -CQS "e57_pitch_difference" {~([pm]\d+)+} -CQS "e58_pitch_difference" {+([pm]\d+)!} - -CQS "f6_length_by_syllable" {$(\d+)+} -CQS "f7_length_by_10ms" {+(\d+)%} -CQS "f8_length_by_96th_note" {%(\d+);} diff --git a/train/hed/jp_qst_crazy_mono_013_enunu_221D.hed b/train/hed/jp_qst_crazy_mono_013_enunu_221D.hed deleted file mode 100644 index 43c7edc..0000000 --- a/train/hed/jp_qst_crazy_mono_013_enunu_221D.hed +++ /dev/null @@ -1,239 +0,0 @@ -QS "p3_L-Phone_Muon" {*^pau-*,*^sil-*} -QS "p4_C-Phone_Muon" {*-pau+*,*-sil+*} -QS "p5_R-Phone_Muon" {*+pau=*,*+sil=*} - -QS "p3_L-Phone_Boin_and_N" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^N-*} -QS "p4_C-Phone_Boin_and_N" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-N+*} -QS "p5_R-Phone_Boin_and_N" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+N=*} - -QS "p3_L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Yuusei_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*} -QS "p4_C-Phone_Yuusei_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*} -QS "p5_R-Phone_Yuusei_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*} - -QS "p3_L-Phone_Musei_Boin" {*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Musei_Boin" {*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Musei_Boin" {*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*,*^fy-*,*^vy-*,*^GlottalStop-*,*^Edge-*} -QS "p4_C-Phone_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*,*-fy+*,*-vy+*,*-GlottalStop+*,*-Edge+*} -QS "p5_R-Phone_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*,*+fy=*,*+vy=*,*+GlottalStop=*,*+Edge=*} - -QS "p3_L-Phone_Youon" {*^by-*,*^my-*,*^j-*,*^dy-*,*^ny-*,*^ry-*,*^gy-*,*^py-*,*^sh-*,*^ch-*,*^ty-*,*^ky-*,*^hy-*,*^fy-*,*^vy-*} -QS "p4_C-Phone_Youon" {*-by+*,*-my+*,*-j+*,*-dy+*,*-ny+*,*-ry+*,*-gy+*,*-py+*,*-sh+*,*-ch+*,*-ty+*,*-ky+*,*-hy+*,*-fy+*,*-vy+*} -QS "p5_R-Phone_Youon" {*+by=*,*+my=*,*+j=*,*+dy=*,*+ny=*,*+ry=*,*+gy=*,*+py=*,*+sh=*,*+ch=*,*+ty=*,*+ky=*,*+hy=*,*+fy=*,*+vy=*} - -QS "p3_L-Phone_Yuusei_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*} -QS "p4_C-Phone_Yuusei_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*} -QS "p5_R-Phone_Yuusei_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*} -QS "p3_L-Phone_Musei_Shiin" {*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*,*^fy-*,*^GlottalStop-*,*^Edge-*} -QS "p4_C-Phone_Musei_Shiin" {*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*,*-fy+*,*-GlottalStop+*,*-Edge+*} -QS "p5_R-Phone_Musei_Shiin" {*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*,*+fy=*,*+GlottalStop=*,*+Edge=*} - -QS "p3_L-Phone_cl" {*^cl-*} -QS "p4_C-Phone_cl" {*-cl+*} -QS "p5_R-Phone_cl" {*+cl=*} -QS "p3_L-Phone_pau" {*^pau-*} -QS "p4_C-Phone_pau" {*-pau+*} -QS "p5_R-Phone_pau" {*+pau=*} -QS "p3_L-Phone_sil" {*^sil-*} -QS "p4_C-Phone_sil" {*-sil+*} -QS "p5_R-Phone_sil" {*+sil=*} -QS "p3_L-Phone_N" {*^N-*} -QS "p4_C-Phone_N" {*-N+*} -QS "p5_R-Phone_N" {*+N=*} -QS "p3_L-Phone_a_A" {*^a-*,*^A-*} -QS "p4_C-Phone_a_A" {*-a+*,*-A+*} -QS "p5_R-Phone_a_A" {*+a=*,*+A=*} -QS "p3_L-Phone_a" {*^a-*} -QS "p4_C-Phone_a" {*-a+*} -QS "p5_R-Phone_a" {*+a=*} -QS "p3_L-Phone_A" {*^A-*} -QS "p4_C-Phone_A" {*-A+*} -QS "p5_R-Phone_A" {*+A=*} -QS "p3_L-Phone_b" {*^b-*} -QS "p4_C-Phone_b" {*-b+*} -QS "p5_R-Phone_b" {*+b=*} -QS "p3_L-Phone_by" {*^by-*} -QS "p4_C-Phone_by" {*-by+*} -QS "p5_R-Phone_by" {*+by=*} -QS "p3_L-Phone_ch" {*^ch-*} -QS "p4_C-Phone_ch" {*-ch+*} -QS "p5_R-Phone_ch" {*+ch=*} -QS "p3_L-Phone_d" {*^d-*} -QS "p4_C-Phone_d" {*-d+*} -QS "p5_R-Phone_d" {*+d=*} -QS "p3_L-Phone_dy" {*^dy-*} -QS "p4_C-Phone_dy" {*-dy+*} -QS "p5_R-Phone_dy" {*+dy=*} -QS "p3_L-Phone_e_E" {*^e-*,*^E-*} -QS "p4_C-Phone_e_E" {*-e+*,*-E+*} -QS "p5_R-Phone_e_E" {*+e=*,*+E=*} -QS "p3_L-Phone_e" {*^e-*} -QS "p4_C-Phone_e" {*-e+*} -QS "p5_R-Phone_e" {*+e=*} -QS "p3_L-Phone_E" {*^E-*} -QS "p4_C-Phone_E" {*-E+*} -QS "p5_R-Phone_E" {*+E=*} -QS "p3_L-Phone_f" {*^f-*} -QS "p4_C-Phone_f" {*-f+*} -QS "p5_R-Phone_f" {*+f=*} -QS "p3_L-Phone_fy" {*^fy-*} -QS "p4_C-Phone_fy" {*-fy+*} -QS "p5_R-Phone_fy" {*+fy=*} -QS "p3_L-Phone_g" {*^g-*} -QS "p4_C-Phone_g" {*-g+*} -QS "p5_R-Phone_g" {*+g=*} -QS "p3_L-Phone_gy" {*^gy-*} -QS "p4_C-Phone_gy" {*-gy+*} -QS "p5_R-Phone_gy" {*+gy=*} -QS "p3_L-Phone_h" {*^h-*} -QS "p4_C-Phone_h" {*-h+*} -QS "p5_R-Phone_h" {*+h=*} -QS "p3_L-Phone_hy" {*^hy-*} -QS "p4_C-Phone_hy" {*-hy+*} -QS "p5_R-Phone_hy" {*+hy=*} -QS "p3_L-Phone_i_I" {*^i-*,*^I-*} -QS "p4_C-Phone_i_I" {*-i+*,*-I+*} -QS "p5_R-Phone_i_I" {*+i=*,*+I=*} -QS "p3_L-Phone_i" {*^i-*} -QS "p4_C-Phone_i" {*-i+*} -QS "p5_R-Phone_i" {*+i=*} -QS "p3_L-Phone_I" {*^I-*} -QS "p4_C-Phone_I" {*-I+*} -QS "p5_R-Phone_I" {*+I=*} -QS "p3_L-Phone_j" {*^j-*} -QS "p4_C-Phone_j" {*-j+*} -QS "p5_R-Phone_j" {*+j=*} -QS "p3_L-Phone_k" {*^k-*} -QS "p4_C-Phone_k" {*-k+*} -QS "p5_R-Phone_k" {*+k=*} -QS "p3_L-Phone_ky" {*^ky-*} -QS "p4_C-Phone_ky" {*-ky+*} -QS "p5_R-Phone_ky" {*+ky=*} -QS "p3_L-Phone_m" {*^m-*} -QS "p4_C-Phone_m" {*-m+*} -QS "p5_R-Phone_m" {*+m=*} -QS "p3_L-Phone_my" {*^my-*} -QS "p4_C-Phone_my" {*-my+*} -QS "p5_R-Phone_my" {*+my=*} -QS "p3_L-Phone_n" {*^n-*} -QS "p4_C-Phone_n" {*-n+*} -QS "p5_R-Phone_n" {*+n=*} -QS "p3_L-Phone_ny" {*^ny-*} -QS "p4_C-Phone_ny" {*-ny+*} -QS "p5_R-Phone_ny" {*+ny=*} -QS "p3_L-Phone_o_O" {*^o-*,*^O-*} -QS "p4_C-Phone_o_O" {*-o+*,*-O+*} -QS "p5_R-Phone_o_O" {*+o=*,*+O=*} -QS "p3_L-Phone_o" {*^o-*} -QS "p4_C-Phone_o" {*-o+*} -QS "p5_R-Phone_o" {*+o=*} -QS "p3_L-Phone_O" {*^O-*} -QS "p4_C-Phone_O" {*-O+*} -QS "p5_R-Phone_O" {*+O=*} -QS "p3_L-Phone_p" {*^p-*} -QS "p4_C-Phone_p" {*-p+*} -QS "p5_R-Phone_p" {*+p=*} -QS "p3_L-Phone_py" {*^py-*} -QS "p4_C-Phone_py" {*-py+*} -QS "p5_R-Phone_py" {*+py=*} -QS "p3_L-Phone_r" {*^r-*} -QS "p4_C-Phone_r" {*-r+*} -QS "p5_R-Phone_r" {*+r=*} -QS "p3_L-Phone_ry" {*^ry-*} -QS "p4_C-Phone_ry" {*-ry+*} -QS "p5_R-Phone_ry" {*+ry=*} -QS "p3_L-Phone_s" {*^s-*} -QS "p4_C-Phone_s" {*-s+*} -QS "p5_R-Phone_s" {*+s=*} -QS "p3_L-Phone_sh" {*^sh-*} -QS "p4_C-Phone_sh" {*-sh+*} -QS "p5_R-Phone_sh" {*+sh=*} -QS "p3_L-Phone_t" {*^t-*} -QS "p4_C-Phone_t" {*-t+*} -QS "p5_R-Phone_t" {*+t=*} -QS "p3_L-Phone_ts" {*^ts-*} -QS "p4_C-Phone_ts" {*-ts+*} -QS "p5_R-Phone_ts" {*+ts=*} -QS "p3_L-Phone_ty" {*^ty-*} -QS "p4_C-Phone_ty" {*-ty+*} -QS "p5_R-Phone_ty" {*+ty=*} -QS "p3_L-Phone_u_U" {*^u-*, *^U-*} -QS "p4_C-Phone_u_U" {*-u+*, *-U+*} -QS "p5_R-Phone_u_U" {*+u=*, *+U=*} -QS "p3_L-Phone_u" {*^u-*} -QS "p4_C-Phone_u" {*-u+*} -QS "p5_R-Phone_u" {*+u=*} -QS "p3_L-Phone_U" {*^U-*} -QS "p4_C-Phone_U" {*-U+*} -QS "p5_R-Phone_U" {*+U=*} -QS "p3_L-Phone_v" {*^v-*} -QS "p4_C-Phone_v" {*-v+*} -QS "p5_R-Phone_v" {*+v=*} -QS "p3_L-Phone_w" {*^w-*} -QS "p4_C-Phone_w" {*-w+*} -QS "p5_R-Phone_w" {*+w=*} -QS "p3_L-Phone_y" {*^y-*} -QS "p4_C-Phone_y" {*-y+*} -QS "p5_R-Phone_y" {*+y=*} -QS "p3_L-Phone_z" {*^z-*} -QS "p4_C-Phone_z" {*-z+*} -QS "p5_R-Phone_z" {*+z=*} -QS "p3_L-Phone_vy" {*^vy-*} -QS "p4_C-Phone_vy" {*-vy+*} -QS "p5_R-Phone_vy" {*+vy=*} -QS "p3_L-Phone_GlottalStop" {*^GlottalStop-*} -QS "p4_C-Phone_GlottalStop" {*-GlottalStop+*} -QS "p5_R-Phone_GlottalStop" {*+GlottalStop=*} -QS "p3_L-Phone_Edge" {*^Edge-*} -QS "p4_C-Phone_Edge" {*-Edge+*} -QS "p5_R-Phone_Edge" {*+Edge=*} - -CQS "d1_absolute_pitch" {/D:(\NOTE)!} -CQS "e1_absolute_pitch" {/E:(\NOTE)]} -CQS "f1_absolute_pitch" {/F:(\NOTE)#} - -CQS "p12_position" {-(\d+)!} -CQS "p13_position" {!(\d+)[} -CQS "p14_distance_from_vowel" {[(\d+)$} -CQS "p15_distance_from_vowel" {$(\d+)]} - -CQS "a1_number_of_phonemes" {/A:(\d+)-} -CQS "a2_position" {-(\d+)-} -CQS "a3_position" {-(\d+)@} - -CQS "b1_number_of_phonemes" {/B:(\d+)_} -CQS "b2_position" {_(\d+)_} -CQS "b3_position" {_(\d+)@} - -CQS "c1_number_of_phonemes" {/C:(\d+)+} -CQS "c2_position" {+(\d+)+} -CQS "c3_position" {+(\d+)@} - -CQS "d6_length_by_syllable" {|(\d+)&} -CQS "d7_length_by_10ms" {&(\d+);} -CQS "d8_length_by_96th_note" {;(\d+)-} - -CQS "e6_length_by_syllable" {!(\d+)@} -CQS "e7_length_by_10ms" {@(\d+)#} -CQS "e8_length_by_96th_note" {#(\d+)+} - -CQS "e18_position_by_note" {∼(\d+)#} -CQS "e19_position_by_note" {#(\d+)_} -CQS "e20_position_by_10ms" {_(\d+);} -CQS "e21_position_by_10ms" {;(\d+)$} -CQS "e22_position_by_96th_note" {$(\d+)&} -CQS "e23_position_by_96th_note" {&(\d+)%} -CQS "e24_position_by_percent" {%(\d+)[} -CQS "e25_position_by_percent" {[(\d+)|} - -CQS "e57_pitch_difference" {~([pm]\d+)+} -CQS "e58_pitch_difference" {+([pm]\d+)!} - -CQS "f6_length_by_syllable" {$(\d+)+} -CQS "f7_length_by_10ms" {+(\d+)%} -CQS "f8_length_by_96th_note" {%(\d+);} diff --git a/train/hed/jp_qst_crazy_mono_014_enunu_mdn_206D.hed b/train/hed/jp_qst_crazy_mono_014_enunu_mdn_206D.hed deleted file mode 100644 index 70538c9..0000000 --- a/train/hed/jp_qst_crazy_mono_014_enunu_mdn_206D.hed +++ /dev/null @@ -1,220 +0,0 @@ -QS "p3_L-Phone_Muon" {*^pau-*,*^sil-*} -QS "p4_C-Phone_Muon" {*-pau+*,*-sil+*} -QS "p5_R-Phone_Muon" {*+pau=*,*+sil=*} - -QS "p3_L-Phone_Boin_and_N" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^N-*} -QS "p4_C-Phone_Boin_and_N" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-N+*} -QS "p5_R-Phone_Boin_and_N" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+N=*} - -QS "p3_L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*,*^fy-*,*^vy-*,*^GlottalStop-*,*^Edge-*} -QS "p4_C-Phone_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*,*-fy+*,*-vy+*,*-GlottalStop+*,*-Edge+*} -QS "p5_R-Phone_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*,*+fy=*,*+vy=*,*+GlottalStop=*,*+Edge=*} - -QS "p3_L-Phone_cl" {*^cl-*} -QS "p4_C-Phone_cl" {*-cl+*} -QS "p5_R-Phone_cl" {*+cl=*} -QS "p3_L-Phone_pau" {*^pau-*} -QS "p4_C-Phone_pau" {*-pau+*} -QS "p5_R-Phone_pau" {*+pau=*} -QS "p3_L-Phone_sil" {*^sil-*} -QS "p4_C-Phone_sil" {*-sil+*} -QS "p5_R-Phone_sil" {*+sil=*} -QS "p3_L-Phone_N" {*^N-*} -QS "p4_C-Phone_N" {*-N+*} -QS "p5_R-Phone_N" {*+N=*} -QS "p3_L-Phone_a_A" {*^a-*,*^A-*} -QS "p4_C-Phone_a_A" {*-a+*,*-A+*} -QS "p5_R-Phone_a_A" {*+a=*,*+A=*} -QS "p3_L-Phone_a" {*^a-*} -QS "p4_C-Phone_a" {*-a+*} -QS "p5_R-Phone_a" {*+a=*} -QS "p3_L-Phone_A" {*^A-*} -QS "p4_C-Phone_A" {*-A+*} -QS "p5_R-Phone_A" {*+A=*} -QS "p3_L-Phone_b" {*^b-*} -QS "p4_C-Phone_b" {*-b+*} -QS "p5_R-Phone_b" {*+b=*} -QS "p3_L-Phone_by" {*^by-*} -QS "p4_C-Phone_by" {*-by+*} -QS "p5_R-Phone_by" {*+by=*} -QS "p3_L-Phone_ch" {*^ch-*} -QS "p4_C-Phone_ch" {*-ch+*} -QS "p5_R-Phone_ch" {*+ch=*} -QS "p3_L-Phone_d" {*^d-*} -QS "p4_C-Phone_d" {*-d+*} -QS "p5_R-Phone_d" {*+d=*} -QS "p3_L-Phone_dy" {*^dy-*} -QS "p4_C-Phone_dy" {*-dy+*} -QS "p5_R-Phone_dy" {*+dy=*} -QS "p3_L-Phone_e_E" {*^e-*,*^E-*} -QS "p4_C-Phone_e_E" {*-e+*,*-E+*} -QS "p5_R-Phone_e_E" {*+e=*,*+E=*} -QS "p3_L-Phone_e" {*^e-*} -QS "p4_C-Phone_e" {*-e+*} -QS "p5_R-Phone_e" {*+e=*} -QS "p3_L-Phone_E" {*^E-*} -QS "p4_C-Phone_E" {*-E+*} -QS "p5_R-Phone_E" {*+E=*} -QS "p3_L-Phone_f" {*^f-*} -QS "p4_C-Phone_f" {*-f+*} -QS "p5_R-Phone_f" {*+f=*} -QS "p3_L-Phone_fy" {*^fy-*} -QS "p4_C-Phone_fy" {*-fy+*} -QS "p5_R-Phone_fy" {*+fy=*} -QS "p3_L-Phone_g" {*^g-*} -QS "p4_C-Phone_g" {*-g+*} -QS "p5_R-Phone_g" {*+g=*} -QS "p3_L-Phone_gy" {*^gy-*} -QS "p4_C-Phone_gy" {*-gy+*} -QS "p5_R-Phone_gy" {*+gy=*} -QS "p3_L-Phone_h" {*^h-*} -QS "p4_C-Phone_h" {*-h+*} -QS "p5_R-Phone_h" {*+h=*} -QS "p3_L-Phone_hy" {*^hy-*} -QS "p4_C-Phone_hy" {*-hy+*} -QS "p5_R-Phone_hy" {*+hy=*} -QS "p3_L-Phone_i_I" {*^i-*,*^I-*} -QS "p4_C-Phone_i_I" {*-i+*,*-I+*} -QS "p5_R-Phone_i_I" {*+i=*,*+I=*} -QS "p3_L-Phone_i" {*^i-*} -QS "p4_C-Phone_i" {*-i+*} -QS "p5_R-Phone_i" {*+i=*} -QS "p3_L-Phone_I" {*^I-*} -QS "p4_C-Phone_I" {*-I+*} -QS "p5_R-Phone_I" {*+I=*} -QS "p3_L-Phone_j" {*^j-*} -QS "p4_C-Phone_j" {*-j+*} -QS "p5_R-Phone_j" {*+j=*} -QS "p3_L-Phone_k" {*^k-*} -QS "p4_C-Phone_k" {*-k+*} -QS "p5_R-Phone_k" {*+k=*} -QS "p3_L-Phone_ky" {*^ky-*} -QS "p4_C-Phone_ky" {*-ky+*} -QS "p5_R-Phone_ky" {*+ky=*} -QS "p3_L-Phone_m" {*^m-*} -QS "p4_C-Phone_m" {*-m+*} -QS "p5_R-Phone_m" {*+m=*} -QS "p3_L-Phone_my" {*^my-*} -QS "p4_C-Phone_my" {*-my+*} -QS "p5_R-Phone_my" {*+my=*} -QS "p3_L-Phone_n" {*^n-*} -QS "p4_C-Phone_n" {*-n+*} -QS "p5_R-Phone_n" {*+n=*} -QS "p3_L-Phone_ny" {*^ny-*} -QS "p4_C-Phone_ny" {*-ny+*} -QS "p5_R-Phone_ny" {*+ny=*} -QS "p3_L-Phone_o_O" {*^o-*,*^O-*} -QS "p4_C-Phone_o_O" {*-o+*,*-O+*} -QS "p5_R-Phone_o_O" {*+o=*,*+O=*} -QS "p3_L-Phone_o" {*^o-*} -QS "p4_C-Phone_o" {*-o+*} -QS "p5_R-Phone_o" {*+o=*} -QS "p3_L-Phone_O" {*^O-*} -QS "p4_C-Phone_O" {*-O+*} -QS "p5_R-Phone_O" {*+O=*} -QS "p3_L-Phone_p" {*^p-*} -QS "p4_C-Phone_p" {*-p+*} -QS "p5_R-Phone_p" {*+p=*} -QS "p3_L-Phone_py" {*^py-*} -QS "p4_C-Phone_py" {*-py+*} -QS "p5_R-Phone_py" {*+py=*} -QS "p3_L-Phone_r" {*^r-*} -QS "p4_C-Phone_r" {*-r+*} -QS "p5_R-Phone_r" {*+r=*} -QS "p3_L-Phone_ry" {*^ry-*} -QS "p4_C-Phone_ry" {*-ry+*} -QS "p5_R-Phone_ry" {*+ry=*} -QS "p3_L-Phone_s" {*^s-*} -QS "p4_C-Phone_s" {*-s+*} -QS "p5_R-Phone_s" {*+s=*} -QS "p3_L-Phone_sh" {*^sh-*} -QS "p4_C-Phone_sh" {*-sh+*} -QS "p5_R-Phone_sh" {*+sh=*} -QS "p3_L-Phone_t" {*^t-*} -QS "p4_C-Phone_t" {*-t+*} -QS "p5_R-Phone_t" {*+t=*} -QS "p3_L-Phone_ts" {*^ts-*} -QS "p4_C-Phone_ts" {*-ts+*} -QS "p5_R-Phone_ts" {*+ts=*} -QS "p3_L-Phone_ty" {*^ty-*} -QS "p4_C-Phone_ty" {*-ty+*} -QS "p5_R-Phone_ty" {*+ty=*} -QS "p3_L-Phone_u_U" {*^u-*, *^U-*} -QS "p4_C-Phone_u_U" {*-u+*, *-U+*} -QS "p5_R-Phone_u_U" {*+u=*, *+U=*} -QS "p3_L-Phone_u" {*^u-*} -QS "p4_C-Phone_u" {*-u+*} -QS "p5_R-Phone_u" {*+u=*} -QS "p3_L-Phone_U" {*^U-*} -QS "p4_C-Phone_U" {*-U+*} -QS "p5_R-Phone_U" {*+U=*} -QS "p3_L-Phone_v" {*^v-*} -QS "p4_C-Phone_v" {*-v+*} -QS "p5_R-Phone_v" {*+v=*} -QS "p3_L-Phone_w" {*^w-*} -QS "p4_C-Phone_w" {*-w+*} -QS "p5_R-Phone_w" {*+w=*} -QS "p3_L-Phone_y" {*^y-*} -QS "p4_C-Phone_y" {*-y+*} -QS "p5_R-Phone_y" {*+y=*} -QS "p3_L-Phone_z" {*^z-*} -QS "p4_C-Phone_z" {*-z+*} -QS "p5_R-Phone_z" {*+z=*} -QS "p3_L-Phone_vy" {*^vy-*} -QS "p4_C-Phone_vy" {*-vy+*} -QS "p5_R-Phone_vy" {*+vy=*} -QS "p3_L-Phone_GlottalStop" {*^GlottalStop-*} -QS "p4_C-Phone_GlottalStop" {*-GlottalStop+*} -QS "p5_R-Phone_GlottalStop" {*+GlottalStop=*} -QS "p3_L-Phone_Edge" {*^Edge-*} -QS "p4_C-Phone_Edge" {*-Edge+*} -QS "p5_R-Phone_Edge" {*+Edge=*} - -CQS "d1_absolute_pitch" {/D:(\NOTE)!} -CQS "e1_absolute_pitch" {/E:(\NOTE)]} -CQS "f1_absolute_pitch" {/F:(\NOTE)#} - -CQS "p12_position" {-(\d+)!} -CQS "p13_position" {!(\d+)[} -CQS "p14_distance_from_vowel" {[(\d+)$} -CQS "p15_distance_from_vowel" {$(\d+)]} - -CQS "a1_number_of_phonemes" {/A:(\d+)-} -CQS "a2_position" {-(\d+)-} -CQS "a3_position" {-(\d+)@} - -CQS "b1_number_of_phonemes" {/B:(\d+)_} -CQS "b2_position" {_(\d+)_} -CQS "b3_position" {_(\d+)@} - -CQS "c1_number_of_phonemes" {/C:(\d+)+} -CQS "c2_position" {+(\d+)+} -CQS "c3_position" {+(\d+)@} - -CQS "d6_length_by_syllable" {|(\d+)&} -CQS "d7_length_by_10ms" {&(\d+);} -CQS "d8_length_by_96th_note" {;(\d+)-} - -CQS "e6_length_by_syllable" {!(\d+)@} -CQS "e7_length_by_10ms" {@(\d+)#} -CQS "e8_length_by_96th_note" {#(\d+)+} - -CQS "e18_position_by_note" {∼(\d+)#} -CQS "e19_position_by_note" {#(\d+)_} -CQS "e20_position_by_10ms" {_(\d+);} -CQS "e21_position_by_10ms" {;(\d+)$} -CQS "e22_position_by_96th_note" {$(\d+)&} -CQS "e23_position_by_96th_note" {&(\d+)%} -CQS "e24_position_by_percent" {%(\d+)[} -CQS "e25_position_by_percent" {[(\d+)|} - -CQS "e57_pitch_difference" {~([pm]\d+)+} -CQS "e58_pitch_difference" {+([pm]\d+)!} - -CQS "f6_length_by_syllable" {$(\d+)+} -CQS "f7_length_by_10ms" {+(\d+)%} -CQS "f8_length_by_96th_note" {%(\d+);} diff --git a/train/hed/jp_qst_crazy_mono_015_enunu_mdn_209D.hed b/train/hed/jp_qst_crazy_mono_015_enunu_mdn_209D.hed deleted file mode 100644 index 53fdf78..0000000 --- a/train/hed/jp_qst_crazy_mono_015_enunu_mdn_209D.hed +++ /dev/null @@ -1,223 +0,0 @@ -QS "p3_L-Phone_Muon" {*^pau-*,*^sil-*} -QS "p4_C-Phone_Muon" {*-pau+*,*-sil+*} -QS "p5_R-Phone_Muon" {*+pau=*,*+sil=*} - -QS "p3_L-Phone_Boin_and_N" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*,*^N-*} -QS "p4_C-Phone_Boin_and_N" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*,*-N+*} -QS "p5_R-Phone_Boin_and_N" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*,*+N=*} - -QS "p3_L-Phone_Boin" {*^a-*,*^i-*,*^u-*,*^e-*,*^o-*,*^A-*,*^I-*,*^U-*,*^E-*,*^O-*} -QS "p4_C-Phone_Boin" {*-a+*,*-i+*,*-u+*,*-e+*,*-o+*,*-A+*,*-I+*,*-U+*,*-E+*,*-O+*} -QS "p5_R-Phone_Boin" {*+a=*,*+i=*,*+u=*,*+e=*,*+o=*,*+A=*,*+I=*,*+U=*,*+E=*,*+O=*} - -QS "p3_L-Phone_Shiin" {*^v-*,*^b-*,*^by-*,*^m-*,*^my-*,*^w-*,*^z-*,*^j-*,*^d-*,*^dy-*,*^n-*,*^ny-*,*^r-*,*^ry-*,*^g-*,*^gy-*,*^y-*,*^f-*,*^p-*,*^py-*,*^s-*,*^sh-*,*^ts-*,*^ch-*,*^t-*,*^ty-*,*^k-*,*^ky-*,*^h-*,*^hy-*,*^fy-*,*^vy-*,*^GlottalStop-*,*^Edge-*} -QS "p4_C-Phone_Shiin" {*-v+*,*-b+*,*-by+*,*-m+*,*-my+*,*-w+*,*-z+*,*-j+*,*-d+*,*-dy+*,*-n+*,*-ny+*,*-r+*,*-ry+*,*-g+*,*-gy+*,*-y+*,*-f+*,*-p+*,*-py+*,*-s+*,*-sh+*,*-ts+*,*-ch+*,*-t+*,*-ty+*,*-k+*,*-ky+*,*-h+*,*-hy+*,*-fy+*,*-vy+*,*-GlottalStop+*,*-Edge+*} -QS "p5_R-Phone_Shiin" {*+v=*,*+b=*,*+by=*,*+m=*,*+my=*,*+w=*,*+z=*,*+j=*,*+d=*,*+dy=*,*+n=*,*+ny=*,*+r=*,*+ry=*,*+g=*,*+gy=*,*+y=*,*+f=*,*+p=*,*+py=*,*+s=*,*+sh=*,*+ts=*,*+ch=*,*+t=*,*+ty=*,*+k=*,*+ky=*,*+h=*,*+hy=*,*+fy=*,*+vy=*,*+GlottalStop=*,*+Edge=*} - -QS "p3_L-Phone_cl" {*^cl-*} -QS "p4_C-Phone_cl" {*-cl+*} -QS "p5_R-Phone_cl" {*+cl=*} -QS "p3_L-Phone_pau" {*^pau-*} -QS "p4_C-Phone_pau" {*-pau+*} -QS "p5_R-Phone_pau" {*+pau=*} -QS "p3_L-Phone_sil" {*^sil-*} -QS "p4_C-Phone_sil" {*-sil+*} -QS "p5_R-Phone_sil" {*+sil=*} -QS "p3_L-Phone_N" {*^N-*} -QS "p4_C-Phone_N" {*-N+*} -QS "p5_R-Phone_N" {*+N=*} -QS "p3_L-Phone_a_A" {*^a-*,*^A-*} -QS "p4_C-Phone_a_A" {*-a+*,*-A+*} -QS "p5_R-Phone_a_A" {*+a=*,*+A=*} -QS "p3_L-Phone_a" {*^a-*} -QS "p4_C-Phone_a" {*-a+*} -QS "p5_R-Phone_a" {*+a=*} -QS "p3_L-Phone_A" {*^A-*} -QS "p4_C-Phone_A" {*-A+*} -QS "p5_R-Phone_A" {*+A=*} -QS "p3_L-Phone_b" {*^b-*} -QS "p4_C-Phone_b" {*-b+*} -QS "p5_R-Phone_b" {*+b=*} -QS "p3_L-Phone_by" {*^by-*} -QS "p4_C-Phone_by" {*-by+*} -QS "p5_R-Phone_by" {*+by=*} -QS "p3_L-Phone_ch" {*^ch-*} -QS "p4_C-Phone_ch" {*-ch+*} -QS "p5_R-Phone_ch" {*+ch=*} -QS "p3_L-Phone_d" {*^d-*} -QS "p4_C-Phone_d" {*-d+*} -QS "p5_R-Phone_d" {*+d=*} -QS "p3_L-Phone_dy" {*^dy-*} -QS "p4_C-Phone_dy" {*-dy+*} -QS "p5_R-Phone_dy" {*+dy=*} -QS "p3_L-Phone_e_E" {*^e-*,*^E-*} -QS "p4_C-Phone_e_E" {*-e+*,*-E+*} -QS "p5_R-Phone_e_E" {*+e=*,*+E=*} -QS "p3_L-Phone_e" {*^e-*} -QS "p4_C-Phone_e" {*-e+*} -QS "p5_R-Phone_e" {*+e=*} -QS "p3_L-Phone_E" {*^E-*} -QS "p4_C-Phone_E" {*-E+*} -QS "p5_R-Phone_E" {*+E=*} -QS "p3_L-Phone_f" {*^f-*} -QS "p4_C-Phone_f" {*-f+*} -QS "p5_R-Phone_f" {*+f=*} -QS "p3_L-Phone_fy" {*^fy-*} -QS "p4_C-Phone_fy" {*-fy+*} -QS "p5_R-Phone_fy" {*+fy=*} -QS "p3_L-Phone_g" {*^g-*} -QS "p4_C-Phone_g" {*-g+*} -QS "p5_R-Phone_g" {*+g=*} -QS "p3_L-Phone_gy" {*^gy-*} -QS "p4_C-Phone_gy" {*-gy+*} -QS "p5_R-Phone_gy" {*+gy=*} -QS "p3_L-Phone_h" {*^h-*} -QS "p4_C-Phone_h" {*-h+*} -QS "p5_R-Phone_h" {*+h=*} -QS "p3_L-Phone_hy" {*^hy-*} -QS "p4_C-Phone_hy" {*-hy+*} -QS "p5_R-Phone_hy" {*+hy=*} -QS "p3_L-Phone_i_I" {*^i-*,*^I-*} -QS "p4_C-Phone_i_I" {*-i+*,*-I+*} -QS "p5_R-Phone_i_I" {*+i=*,*+I=*} -QS "p3_L-Phone_i" {*^i-*} -QS "p4_C-Phone_i" {*-i+*} -QS "p5_R-Phone_i" {*+i=*} -QS "p3_L-Phone_I" {*^I-*} -QS "p4_C-Phone_I" {*-I+*} -QS "p5_R-Phone_I" {*+I=*} -QS "p3_L-Phone_j" {*^j-*} -QS "p4_C-Phone_j" {*-j+*} -QS "p5_R-Phone_j" {*+j=*} -QS "p3_L-Phone_k" {*^k-*} -QS "p4_C-Phone_k" {*-k+*} -QS "p5_R-Phone_k" {*+k=*} -QS "p3_L-Phone_ky" {*^ky-*} -QS "p4_C-Phone_ky" {*-ky+*} -QS "p5_R-Phone_ky" {*+ky=*} -QS "p3_L-Phone_m" {*^m-*} -QS "p4_C-Phone_m" {*-m+*} -QS "p5_R-Phone_m" {*+m=*} -QS "p3_L-Phone_my" {*^my-*} -QS "p4_C-Phone_my" {*-my+*} -QS "p5_R-Phone_my" {*+my=*} -QS "p3_L-Phone_n" {*^n-*} -QS "p4_C-Phone_n" {*-n+*} -QS "p5_R-Phone_n" {*+n=*} -QS "p3_L-Phone_ny" {*^ny-*} -QS "p4_C-Phone_ny" {*-ny+*} -QS "p5_R-Phone_ny" {*+ny=*} -QS "p3_L-Phone_o_O" {*^o-*,*^O-*} -QS "p4_C-Phone_o_O" {*-o+*,*-O+*} -QS "p5_R-Phone_o_O" {*+o=*,*+O=*} -QS "p3_L-Phone_o" {*^o-*} -QS "p4_C-Phone_o" {*-o+*} -QS "p5_R-Phone_o" {*+o=*} -QS "p3_L-Phone_O" {*^O-*} -QS "p4_C-Phone_O" {*-O+*} -QS "p5_R-Phone_O" {*+O=*} -QS "p3_L-Phone_p" {*^p-*} -QS "p4_C-Phone_p" {*-p+*} -QS "p5_R-Phone_p" {*+p=*} -QS "p3_L-Phone_py" {*^py-*} -QS "p4_C-Phone_py" {*-py+*} -QS "p5_R-Phone_py" {*+py=*} -QS "p3_L-Phone_r" {*^r-*} -QS "p4_C-Phone_r" {*-r+*} -QS "p5_R-Phone_r" {*+r=*} -QS "p3_L-Phone_ry" {*^ry-*} -QS "p4_C-Phone_ry" {*-ry+*} -QS "p5_R-Phone_ry" {*+ry=*} -QS "p3_L-Phone_s" {*^s-*} -QS "p4_C-Phone_s" {*-s+*} -QS "p5_R-Phone_s" {*+s=*} -QS "p3_L-Phone_sh" {*^sh-*} -QS "p4_C-Phone_sh" {*-sh+*} -QS "p5_R-Phone_sh" {*+sh=*} -QS "p3_L-Phone_t" {*^t-*} -QS "p4_C-Phone_t" {*-t+*} -QS "p5_R-Phone_t" {*+t=*} -QS "p3_L-Phone_ts" {*^ts-*} -QS "p4_C-Phone_ts" {*-ts+*} -QS "p5_R-Phone_ts" {*+ts=*} -QS "p3_L-Phone_ty" {*^ty-*} -QS "p4_C-Phone_ty" {*-ty+*} -QS "p5_R-Phone_ty" {*+ty=*} -QS "p3_L-Phone_u_U" {*^u-*, *^U-*} -QS "p4_C-Phone_u_U" {*-u+*, *-U+*} -QS "p5_R-Phone_u_U" {*+u=*, *+U=*} -QS "p3_L-Phone_u" {*^u-*} -QS "p4_C-Phone_u" {*-u+*} -QS "p5_R-Phone_u" {*+u=*} -QS "p3_L-Phone_U" {*^U-*} -QS "p4_C-Phone_U" {*-U+*} -QS "p5_R-Phone_U" {*+U=*} -QS "p3_L-Phone_v" {*^v-*} -QS "p4_C-Phone_v" {*-v+*} -QS "p5_R-Phone_v" {*+v=*} -QS "p3_L-Phone_w" {*^w-*} -QS "p4_C-Phone_w" {*-w+*} -QS "p5_R-Phone_w" {*+w=*} -QS "p3_L-Phone_y" {*^y-*} -QS "p4_C-Phone_y" {*-y+*} -QS "p5_R-Phone_y" {*+y=*} -QS "p3_L-Phone_z" {*^z-*} -QS "p4_C-Phone_z" {*-z+*} -QS "p5_R-Phone_z" {*+z=*} -QS "p3_L-Phone_vy" {*^vy-*} -QS "p4_C-Phone_vy" {*-vy+*} -QS "p5_R-Phone_vy" {*+vy=*} -QS "p3_L-Phone_GlottalStop" {*^GlottalStop-*} -QS "p4_C-Phone_GlottalStop" {*-GlottalStop+*} -QS "p5_R-Phone_GlottalStop" {*+GlottalStop=*} -QS "p3_L-Phone_Edge" {*^Edge-*} -QS "p4_C-Phone_Edge" {*-Edge+*} -QS "p5_R-Phone_Edge" {*+Edge=*} - -CQS "d1_absolute_pitch" {/D:(\NOTE)!} -CQS "e1_absolute_pitch" {/E:(\NOTE)]} -CQS "f1_absolute_pitch" {/F:(\NOTE)#} - -CQS "p12_position" {-(\d+)!} -CQS "p13_position" {!(\d+)[} -CQS "p14_distance_from_vowel" {[(\d+)$} -CQS "p15_distance_from_vowel" {$(\d+)]} - -CQS "a1_number_of_phonemes" {/A:(\d+)-} -CQS "a2_position" {-(\d+)-} -CQS "a3_position" {-(\d+)@} - -CQS "b1_number_of_phonemes" {/B:(\d+)_} -CQS "b2_position" {_(\d+)_} -CQS "b3_position" {_(\d+)@} - -CQS "c1_number_of_phonemes" {/C:(\d+)+} -CQS "c2_position" {+(\d+)+} -CQS "c3_position" {+(\d+)@} - -CQS "d5_tempo" {%(\d+)|} -CQS "d6_length_by_syllable" {|(\d+)&} -CQS "d7_length_by_10ms" {&(\d+);} -CQS "d8_length_by_96th_note" {;(\d+)-} - -CQS "e5_tempo" {~(\d+)!} -CQS "e6_length_by_syllable" {!(\d+)@} -CQS "e7_length_by_10ms" {@(\d+)#} -CQS "e8_length_by_96th_note" {#(\d+)+} - -CQS "e18_position_by_note" {∼(\d+)#} -CQS "e19_position_by_note" {#(\d+)_} -CQS "e20_position_by_10ms" {_(\d+);} -CQS "e21_position_by_10ms" {;(\d+)$} -CQS "e22_position_by_96th_note" {$(\d+)&} -CQS "e23_position_by_96th_note" {&(\d+)%} -CQS "e24_position_by_percent" {%(\d+)[} -CQS "e25_position_by_percent" {[(\d+)|} - -CQS "e57_pitch_difference" {~([pm]\d+)+} -CQS "e58_pitch_difference" {+([pm]\d+)!} - -CQS "f5_tempo" {$(\d+)$} -CQS "f6_length_by_syllable" {$(\d+)+} -CQS "f7_length_by_10ms" {+(\d+)%} -CQS "f8_length_by_96th_note" {%(\d+);} diff --git a/train/install_pytorch_for_CPU.bat b/train/install_pytorch_for_CPU.bat deleted file mode 100644 index d4e5b1f..0000000 --- a/train/install_pytorch_for_CPU.bat +++ /dev/null @@ -1,6 +0,0 @@ -.\python-3.8.10-embed-amd64\python.exe -m pip install --upgrade pip -.\python-3.8.10-embed-amd64\python.exe -m pip install --upgrade wheel -.\python-3.8.10-embed-amd64\python.exe -m pip install torch==1.10.0 torchvision==0.11.1 torchaudio===0.10.0 -.\python-3.8.10-embed-amd64\python.exe -m pip install "hydra-core<1.1" - -PAUSE diff --git a/train/install_pytorch_for_CUDA102.bat b/train/install_pytorch_for_CUDA102.bat deleted file mode 100644 index abb7765..0000000 --- a/train/install_pytorch_for_CUDA102.bat +++ /dev/null @@ -1,6 +0,0 @@ -.\python-3.8.10-embed-amd64\python.exe -m pip install --upgrade pip -.\python-3.8.10-embed-amd64\python.exe -m pip install --upgrade wheel -.\python-3.8.10-embed-amd64\python.exe -m pip install torch==1.10.0+cu102 torchvision==0.11.1+cu102 torchaudio===0.10.0+cu102 -f https://download.pytorch.org/whl/cu102/torch_stable.html -.\python-3.8.10-embed-amd64\python.exe -m pip install "hydra-core<1.1" - -PAUSE diff --git a/train/install_pytorch_for_CUDA113.bat b/train/install_pytorch_for_CUDA113.bat deleted file mode 100644 index 636d428..0000000 --- a/train/install_pytorch_for_CUDA113.bat +++ /dev/null @@ -1,6 +0,0 @@ -.\python-3.8.10-embed-amd64\python.exe -m pip install --upgrade pip -.\python-3.8.10-embed-amd64\python.exe -m pip install --upgrade wheel -.\python-3.8.10-embed-amd64\python.exe -m pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio===0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html -.\python-3.8.10-embed-amd64\python.exe -m pip install "hydra-core<1.1" - -PAUSE diff --git a/train/nnsvs_shell_scripts/feature_generation.sh b/train/nnsvs_shell_scripts/feature_generation.sh deleted file mode 100644 index 7b191e9..0000000 --- a/train/nnsvs_shell_scripts/feature_generation.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -# NOTE: the script is supposed to be used called from nnsvs recipes. -# Please don't try to run the shell script directry. - -#------------------------------------------------------------------------------ -# MIT License -# -# Copyright (c) 2020 Ryuichi Yamamoto -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -#------------------------------------------------------------------------------ - -for s in ${datasets[@]}; -do - if [ -d conf/prepare_features ]; then - ext="--config-dir conf/prepare_features.exe" - else - ext="" - fi - xrun $PYTHON_EXE -m nnsvs.bin.prepare_features $ext \ - utt_list=data/list/$s.list \ - out_dir=$dump_org_dir/$s/ \ - question_path=$question_path \ - timelag=$timelag_features \ - duration=$duration_features \ - acoustic=$acoustic_features -done - -# Compute normalization stats for each input/output -mkdir -p $dump_norm_dir -for inout in "in" "out"; do - if [ $inout = "in" ]; then - scaler_class="sklearn.preprocessing.MinMaxScaler" - else - scaler_class="sklearn.preprocessing.StandardScaler" - fi - for typ in timelag duration acoustic; - do - find $dump_org_dir/$train_set/${inout}_${typ} -name "*feats.npy" > train_list.txt - scaler_path=$dump_org_dir/${inout}_${typ}_scaler.joblib - xrun $PYTHON_EXE -m nnsvs.bin.fit_scaler \ - list_path=train_list.txt \ - scaler.class=$scaler_class \ - out_path=$scaler_path - rm -f train_list.txt - cp -v $scaler_path $dump_norm_dir/${inout}_${typ}_scaler.joblib - done -done - -# apply normalization -for s in ${datasets[@]}; do - for inout in "in" "out"; do - for typ in timelag duration acoustic; - do - xrun $PYTHON_EXE -m nnsvs.bin.preprocess_normalize \ - in_dir=$dump_org_dir/$s/${inout}_${typ}/ \ - scaler_path=$dump_org_dir/${inout}_${typ}_scaler.joblib \ - out_dir=$dump_norm_dir/$s/${inout}_${typ}/ - done - done -done diff --git a/train/nnsvs_shell_scripts/generate.sh b/train/nnsvs_shell_scripts/generate.sh deleted file mode 100644 index 24e182b..0000000 --- a/train/nnsvs_shell_scripts/generate.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -# NOTE: the script is supposed to be used called from nnsvs recipes. -# Please don't try to run the shell script directry. - -#------------------------------------------------------------------------------ -# MIT License -# -# Copyright (c) 2020 Ryuichi Yamamoto -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -#------------------------------------------------------------------------------ - - -for s in ${testsets[@]}; do - for typ in timelag duration acoustic; do - if [ $typ = "timelag" ]; then - eval_checkpoint=$timelag_eval_checkpoint - elif [ $typ = "duration" ]; then - eval_checkpoint=$duration_eval_checkpoint - else - eval_checkpoint=$acoustic_eval_checkpoint - fi - - checkpoint=$expdir/$typ/${eval_checkpoint} - name=$(basename $checkpoint) - xrun $PYTHON_EXE -m nnsvs.bin.generate \ - model.checkpoint=$checkpoint \ - model.model_yaml=$expdir/$typ/model.yaml \ - out_scaler_path=$dump_norm_dir/out_${typ}_scaler.joblib \ - in_dir=$dump_norm_dir/$s/in_${typ}/ \ - out_dir=$expdir/$typ/predicted/$s/${name%.*}/ - done -done diff --git a/train/nnsvs_shell_scripts/train_acoustic.sh b/train/nnsvs_shell_scripts/train_acoustic.sh deleted file mode 100644 index 5b36c55..0000000 --- a/train/nnsvs_shell_scripts/train_acoustic.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# NOTE: the script is supposed to be used called from nnsvs recipes. -# Please don't try to run the shell script directry. - -#------------------------------------------------------------------------------ -# MIT License -# -# Copyright (c) 2020 Ryuichi Yamamoto -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -#------------------------------------------------------------------------------ - - -if [ -d conf/train ]; then - ext="--config-dir conf/train/acoustic" -else - ext="" -fi - -if [ ! -z "${pretrained_expdir}" ]; then - resume_checkpoint=$pretrained_expdir/acoustic/best_loss.pth -else - resume_checkpoint= -fi -xrun $PYTHON_EXE -m nnsvs.bin.train $ext \ - model=$acoustic_model \ - train=$acoustic_train \ - data=$acoustic_data \ - data.train_no_dev.in_dir=$dump_norm_dir/$train_set/in_acoustic/ \ - data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_acoustic/ \ - data.dev.in_dir=$dump_norm_dir/$dev_set/in_acoustic/ \ - data.dev.out_dir=$dump_norm_dir/$dev_set/out_acoustic/ \ - train.out_dir=$expdir/acoustic \ - train.resume.checkpoint=$resume_checkpoint diff --git a/train/nnsvs_shell_scripts/train_duration.sh b/train/nnsvs_shell_scripts/train_duration.sh deleted file mode 100644 index cc86532..0000000 --- a/train/nnsvs_shell_scripts/train_duration.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -# NOTE: the script is supposed to be used called from nnsvs recipes. -# Please don't try to run the shell script directry. - -#------------------------------------------------------------------------------ -# MIT License -# -# Copyright (c) 2020 Ryuichi Yamamoto -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -#------------------------------------------------------------------------------ - - -if [ -d conf/train ]; then - ext="--config-dir conf/train/duration" -else - ext="" -fi - -if [ ! -z "${pretrained_expdir}" ]; then - resume_checkpoint=$pretrained_expdir/duration/best_loss.pth -else - resume_checkpoint= -fi -xrun $PYTHON_EXE -m nnsvs.bin.train $ext \ - model=$duration_model train=$duration_train data=$duration_data \ - data.train_no_dev.in_dir=$dump_norm_dir/$train_set/in_duration/ \ - data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_duration/ \ - data.dev.in_dir=$dump_norm_dir/$dev_set/in_duration/ \ - data.dev.out_dir=$dump_norm_dir/$dev_set/out_duration/ \ - train.out_dir=$expdir/duration \ - train.resume.checkpoint=$resume_checkpoint diff --git a/train/nnsvs_shell_scripts/train_timelag.sh b/train/nnsvs_shell_scripts/train_timelag.sh deleted file mode 100644 index 4865df4..0000000 --- a/train/nnsvs_shell_scripts/train_timelag.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -# NOTE: the script is supposed to be used called from nnsvs recipes. -# Please don't try to run the shell script directry. - -#------------------------------------------------------------------------------ -# MIT License -# -# Copyright (c) 2020 Ryuichi Yamamoto -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -#------------------------------------------------------------------------------ - - -if [ -d conf/train ]; then - ext="--config-dir conf/train/timelag" -else - ext="" -fi - -if [ ! -z "${pretrained_expdir}" ]; then - resume_checkpoint=$pretrained_expdir/timelag/best_loss.pth -else - resume_checkpoint= -fi -xrun $PYTHON_EXE -m nnsvs.bin.train $ext \ - model=$timelag_model train=$timelag_train data=$timelag_data \ - data.train_no_dev.in_dir=$dump_norm_dir/$train_set/in_timelag/ \ - data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_timelag/ \ - data.dev.in_dir=$dump_norm_dir/$dev_set/in_timelag/ \ - data.dev.out_dir=$dump_norm_dir/$dev_set/out_timelag/ \ - train.out_dir=$expdir/timelag \ - train.resume.checkpoint=$resume_checkpoint diff --git a/train/nnsvs_shell_scripts/yaml_parser.sh b/train/nnsvs_shell_scripts/yaml_parser.sh deleted file mode 100644 index 3b5ae2d..0000000 --- a/train/nnsvs_shell_scripts/yaml_parser.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -#------------------------------------------------------------------------------ -# MIT License -# -# Copyright (c) 2020 Ryuichi Yamamoto -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -#------------------------------------------------------------------------------ - - -parse_yaml() { - local prefix=$2 - local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034') - sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ - -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | - awk -F$fs '{ - indent = length($1)/2; - vname[indent] = $2; - for (i in vname) {if (i > indent) {delete vname[i]}} - vn=""; for (i=0; i 0) { - printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3); - } else { - printf("%s%s%s=\n", "'$prefix'",vn, $2); - } - }' -} diff --git a/train/prepare_release.py b/train/prepare_release.py index cf348cb..672ec76 100644 --- a/train/prepare_release.py +++ b/train/prepare_release.py @@ -6,6 +6,7 @@ from glob import glob from os import makedirs +import os from os.path import basename, exists from shutil import copy2, copytree from sys import argv @@ -20,7 +21,7 @@ def copy_train_config(config_dir, release_dir): acoustic_*.yaml, duration_*.yaml, timelag_*.yaml をコピー """ print('copying config') - copytree(config_dir, f'{release_dir}/{config_dir}') + copytree(config_dir, f'{release_dir}/conf') def copy_dictionary(path_table, release_dir): @@ -29,7 +30,8 @@ def copy_dictionary(path_table, release_dir): """ print('copying dictionary') makedirs(f'{release_dir}/dic', exist_ok=True) - copy2(path_table, f'{release_dir}/{path_table}') + path_table_dest = "dic" + path_table.split("dic")[-1] + copy2(path_table, f'{release_dir}/{path_table_dest}') def copy_question(path_question, release_dir): @@ -38,7 +40,8 @@ def copy_question(path_question, release_dir): """ print('copying question') makedirs(f'{release_dir}/hed', exist_ok=True) - copy2(path_question, f'{release_dir}/{path_question}') + path_question_dest = "hed" + path_question.split("hed")[-1] + copy2(path_question, f'{release_dir}/{path_question_dest}') def copy_scaler(singer, release_dir): @@ -46,11 +49,12 @@ def copy_scaler(singer, release_dir): dumpフォルダにあるファイルをコピー """ makedirs(f'{release_dir}/dump/{singer}/norm', exist_ok=True) - list_path_scaler = glob(f'dump/{singer}/norm/*_scaler.joblib') + list_path_scaler = glob(f'target/dump/{singer}/norm/*_scaler.joblib') print('copying scaler') for path_scaler in tqdm(list_path_scaler): - copy2(path_scaler, f'{release_dir}/{path_scaler}') + path_scaler_dest = "dump" + path_scaler.split("dump")[-1] + copy2(path_scaler, f'{release_dir}/{path_scaler_dest}') def copy_model(singer, exp_name, release_dir): @@ -61,20 +65,32 @@ def copy_model(singer, exp_name, release_dir): makedirs(f'{release_dir}/exp/{exp_name}/acoustic', exist_ok=True) makedirs(f'{release_dir}/exp/{exp_name}/duration', exist_ok=True) makedirs(f'{release_dir}/exp/{exp_name}/timelag', exist_ok=True) - list_path_model = glob(f'exp/{exp_name}/*/*.pth') - list_path_model += glob(f'exp/{exp_name}/*/model.yaml') + makedirs(f'{release_dir}/exp/{exp_name}/postfilter', exist_ok=True) + list_path_model = glob(f'target/exp/{exp_name}/*/*.pth') + list_path_model += glob(f'target/exp/{exp_name}/*/model.yaml') print('copying model') for path_model in tqdm(list_path_model): - copy2(path_model, f'{release_dir}/{path_model}') + path_model_dest = "exp" + path_model.split("exp")[-1] + try: + copy2(path_model, f'{release_dir}/{path_model_dest}') + except: + pass def copy_general_config(path_config_yaml, release_dir): """ singer: 歌唱者名 """ - print(f'copying {basename(path_config_yaml)}') - copy2(path_config_yaml, f'{release_dir}/{basename(path_config_yaml)}') + with open(path_config_yaml, 'r', encoding='utf-8') as f: + s = f.readlines() + + for idx in range(len(s)): + s[idx] = s[idx].replace("source/", "").replace("target/", "").rstrip() + + print('copying config.yaml') + with open(f'{release_dir}/config.yaml', 'w', encoding='utf-8') as f: + f.write("\n".join(s)) def copy_enuconfig(path_config_yaml, path_enuconfig_yaml, release_dir): @@ -87,7 +103,11 @@ def copy_enuconfig(path_config_yaml, path_enuconfig_yaml, release_dir): with open(path_config_yaml, 'r', encoding='utf-8') as f: config = yaml.safe_load(f) with open(path_enuconfig_yaml, 'r', encoding='utf-8') as f: - s = f.read() + s = f.readlines() + + for idx in range(len(s)): + s[idx] = s[idx].replace("source/", "").replace("target/", "").rstrip() + s = "\n".join(s) # hedファイルを指定する項目を上書きする old_qst_path = enuconfig['question_path'].strip('"\'') @@ -98,7 +118,7 @@ def copy_enuconfig(path_config_yaml, path_enuconfig_yaml, release_dir): # 置換済みの文字列で書き換えたenuconfigをreleaseフォルダに保存 print('copying enuconfig.yaml') with open(f'{release_dir}/enuconfig.yaml', 'w', encoding='utf-8') as f: - s = f.write(s) + f.write(s) def main(path_config_yaml): @@ -109,8 +129,8 @@ def main(path_config_yaml): with open(path_config_yaml, 'r') as f_yaml: config = yaml.safe_load(f_yaml) singer = config['spk'].strip('"\'') - config_dir = 'conf' - release_dir = f'release/{singer}_---' + config_dir = 'train/conf' + release_dir = f'release/{singer}' path_table = config['table_path'].strip('"\'') path_question = config['question_path'].strip('"\'') experiment_name = config['tag'].strip('"\'') @@ -121,7 +141,7 @@ def main(path_config_yaml): send2trash(release_dir) makedirs(release_dir, exist_ok=True) copy_general_config(path_config_yaml, release_dir) - copy_enuconfig(path_config_yaml, 'enuconfig.yaml', release_dir) + copy_enuconfig(path_config_yaml, 'train/enuconfig.yaml', release_dir) copy_train_config(config_dir, release_dir) copy_dictionary(path_table, release_dir) copy_question(path_question, release_dir) diff --git a/train/preprocess_data.py b/train/preprocess_data.py index 73851b7..506b1e0 100644 --- a/train/preprocess_data.py +++ b/train/preprocess_data.py @@ -12,8 +12,9 @@ copy_mono_time_to_full, finalize_lab, force_ust_end_with_rest, full2mono, generate_train_list, merge_rest_full_score, merge_rest_mono_align, round_lab, - segment_lab, ust2lab) + segment_lab) +from enunu_kor_tool.utaupyk import _ust2lab as utaupyk_ust2lab, _ustx2ust as utaupyk_ustx2ust def main(path_config_yaml): """ @@ -24,6 +25,7 @@ def main(path_config_yaml): file_handler = logging.FileHandler(f'{__file__}.log', mode='w',) logging.basicConfig(level=logging.INFO, handlers=[stream_handler, file_handler]) + utaupyk_ustx2ust.ustx2ust_main(path_config_yaml) # singing_databaseフォルダ の中にあるファイルを dataフォルダにコピーする。 copy_files.main(path_config_yaml) # mono_align (labフォルダのファイル) の中の音素の発生時刻が負でないか点検する。 @@ -33,7 +35,7 @@ def main(path_config_yaml): # ustファイルの最後が休符じゃないときに警告する。 force_ust_end_with_rest.main(path_config_yaml) # ustファイル を labファイル に変換して、full_score として保存する。 - ust2lab.main(path_config_yaml) + utaupyk_ust2lab.ust2lab_main(path_config_yaml) # mono_align (labフォルダのファイル) の連続する休符を結合する。 merge_rest_mono_align.main(path_config_yaml) diff --git a/train/run.bat b/train/run.bat deleted file mode 100644 index a2a9957..0000000 --- a/train/run.bat +++ /dev/null @@ -1,2 +0,0 @@ -portablegit\bin\bash.exe run.sh --stage 0 --stop_stage 7 -PAUSE diff --git a/train/run.sh b/train/run.sh index 90c0fec..3441501 100644 --- a/train/run.sh +++ b/train/run.sh @@ -1,10 +1,3 @@ -#!/bin/bash - -########## -# customized for Portable ENUNU Training Kit on Windows -########## -# Set bash to 'debug' mode, it will exit on : -# -e 'error', -u 'undefined variable', -o ... 'error in pipeline', -x 'print commands', set -e set -u set -o pipefail @@ -15,22 +8,12 @@ function xrun () { set +x } -# use embed python executional file -PYTHON_ROOT="python-3.8.10-embed-amd64" -PYTHON_EXE="$PYTHON_ROOT/python.exe" -PYTHON_SCRIPTS_ROOT="$PYTHON_ROOT/Scripts" -CONFIG_PATH="config.yaml" +CONFIG_PATH="train/config.yaml" script_dir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd) - -# changed----------------------------------------------- -# NNSVS_ROOT="nnsvs" -# NNSVS_COMMON_ROOT="nnsvs/egs/_common/spsvs" -# . "$NNSVS_ROOT/utils/yaml_parser.sh" || exit 1; -# to---------------------------------------------------- -NNSVS_SHELL_SCRIPTS_ROOT="nnsvs_shell_scripts" -. $NNSVS_SHELL_SCRIPTS_ROOT/yaml_parser.sh || exit 1; -# ------------------------------------------------------ +NNSVS_COMMON_ROOT="train/scripts" +NNSVS_SHELL_SCRIPTS_ROOT=$NNSVS_COMMON_ROOT +. "$NNSVS_COMMON_ROOT/yaml_parser.sh" || exit 1; eval $(parse_yaml $CONFIG_PATH "") @@ -40,26 +23,22 @@ eval_set="eval" datasets=($train_set $dev_set $eval_set) testsets=($dev_set $eval_set) -dumpdir=dump +dumpdir=target/dump dump_org_dir="$dumpdir/$spk/org" dump_norm_dir="$dumpdir/$spk/norm" stage=0 stop_stage=-1 -# changed----------------------------------------------- -# . $NNSVS_ROOT/parse_options.sh || exit 1; -# to---------------------------------------------------- -. $NNSVS_SHELL_SCRIPTS_ROOT/parse_options.sh || exit 1; -# ------------------------------------------------------ +. $NNSVS_COMMON_ROOT/parse_options.sh || exit 1; + -# exp name if [ -z ${tag:=} ]; then expname="${spk}" else expname="${spk}_${tag}" fi -expdir="exp/$expname" +expdir="model_exp/$expname" # Prepare files in singing-database for training @@ -70,8 +49,8 @@ if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then echo "# #" echo "#########################################" rm -rf $out_dir - rm -f preprocess_data.py.log - $PYTHON_ROOT/python preprocess_data.py $CONFIG_PATH || exit 1; + rm -f train/preprocess_data.py.log + python train/preprocess_data.py $CONFIG_PATH || exit 1; echo "" fi @@ -156,26 +135,136 @@ if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then echo "" fi + +# Synthesis wav files +if [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then + echo "##########################################" + echo "# #" + echo "# stage 6: Waveform synthesis #" + echo "# #" + echo "##########################################" + . $NNSVS_COMMON_ROOT/synthesis.sh + echo "" +fi + + +# Setup postfilter +if [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then + echo "##########################################" + echo "# #" + echo "# stage 7: Prepare postfilter #" + echo "# #" + echo "##########################################" + . $NNSVS_SHELL_SCRIPTS_ROOT/prepare_postfilter.sh || exit 1; + echo "" +fi + +# Train mgc postfilter +if [ ${stage} -le 8 ] && [ ${stop_stage} -ge 8 ]; then + echo "##########################################" + echo "# #" + echo "# stage 8: Training mgc postfilter #" + echo "# #" + echo "##########################################" + postfilter_model="postfilter_mgc" + postfilter_train="mgc" + postfilter_data="mgc_data" + . $NNSVS_SHELL_SCRIPTS_ROOT/train_postfilter.sh || exit 1; + echo "" +fi + +# Train bap postfilter +if [ ${stage} -le 9 ] && [ ${stop_stage} -ge 9 ]; then + echo "##########################################" + echo "# #" + echo "# stage 9: Training bap postfilter #" + echo "# #" + echo "##########################################" + postfilter_model="postfilter_bap" + postfilter_train="bap" + postfilter_data="bap_data" + . $NNSVS_SHELL_SCRIPTS_ROOT/train_postfilter.sh || exit 1; + echo "" +fi + +# Merge postfilter models +if [ ${stage} -le 10 ] && [ ${stop_stage} -ge 10 ]; then + echo "##########################################" + echo "# #" + echo "# stage 10: Merge postfilter models #" + echo "# #" + echo "##########################################" + python $NNSVS_SHELL_SCRIPTS_ROOT/merge_postfilters.py $expdir/postfilter_mgc/latest.pth $expdir/postfilter_bap/latest.pth $expdir/postfilter || exit 1; + python $NNSVS_SHELL_SCRIPTS_ROOT/merge_postfilters.py $expdir/postfilter_mgc/best_loss.pth $expdir/postfilter_bap/best_loss.pth $expdir/postfilter || exit 1; + echo "" +fi + +# Vocoder stuff +#if [ ${stage} -le 11 ] && [ ${stop_stage} -ge 11 ]; then +# echo "stage 11: Prepare vocoder input/output features" +# . $NNSVS_COMMON_ROOT/prepare_voc_features.sh +#fi + +#if [ ${stage} -le 12 ] && [ ${stop_stage} -ge 12 ]; then +# echo "stage 12: Compute statistics of vocoder's input features" # -# # Synthesis wav files -# if [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then -# echo "##########################################" -# echo "# #" -# echo "# stage 6: Waveform synthesis #" -# echo "# #" -# echo "##########################################" -# . $NNSVS_COMMON_ROOT/synthesis.sh -# echo "" -# fi +# if [[ ${acoustic_features} == *"static_deltadelta_sinevib"* ]]; then +# ext="--num_windows 3 --vibrato_mode sine" +# elif [[ ${acoustic_features} == *"static_deltadelta_diffvib"* ]]; then +# ext="--num_windows 3 --vibrato_mode diff" +# elif [[ ${acoustic_features} == *"static_only_sinevib"* ]]; then +# ext="--num_windows 1 --vibrato_mode sine" +# elif [[ ${acoustic_features} == *"static_only_diffvib"* ]]; then +# ext="--num_windows 1 --vibrato_mode diff" +# elif [[ ${acoustic_features} == *"static_deltadelta"* ]]; then +# ext="--num_windows 3 --vibrato_mode none" +# elif [[ ${acoustic_features} == *"static_only"* ]]; then +# ext="--num_windows 1 --vibrato_mode none" +# else +# ext="" +# fi # +# xrun python $NNSVS_COMMON_ROOT/scaler_joblib2npy_voc.py \ +# $dump_norm_dir/out_acoustic_scaler.joblib $dump_norm_dir/ \ +# --sample_rate $sample_rate $ext +#fi + +#if [ ${stage} -le 13 ] && [ ${stop_stage} -ge 13 ]; then +# echo "stage 13: Training vocoder using parallel_wavegan" +# if [ ! -z ${pretrained_vocoder_checkpoint} ]; then +# extra_args="--resume $pretrained_vocoder_checkpoint" +# else +# extra_args="" +# fi +# # NOTE: copy normalization stats to expdir for convenience +# mkdir -p $expdir/$vocoder_model +# cp -v $dump_norm_dir/in_vocoder*.npy $expdir/$vocoder_model +# xrun parallel-wavegan-train --config conf/parallel_wavegan/${vocoder_model}.yaml \ +# --train-dumpdir $dump_norm_dir/$train_set/in_vocoder \ +# --dev-dumpdir $dump_norm_dir/$dev_set/in_vocoder/ \ +# --outdir $expdir/$vocoder_model $extra_args +#fi + +#if [ ${stage} -le 14 ] && [ ${stop_stage} -ge 14 ]; then +# echo "stage 14: Synthesis waveforms by parallel_wavegan" +# if [ -z "${vocoder_eval_checkpoint}" ]; then +# vocoder_eval_checkpoint="$(ls -dt "${expdir}/${vocoder_model}"/*.pkl | head -1 || true)" +# fi +# outdir="${expdir}/$vocoder_model/wav/$(basename "${vocoder_eval_checkpoint}" .pkl)" +# for s in ${testsets[@]}; do +# xrun parallel-wavegan-decode --dumpdir $dump_norm_dir/$s/in_vocoder \ +# --checkpoint $vocoder_eval_checkpoint \ +# --outdir $outdir +# done +#fi # Copy the models to release directory -if [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then +if [ ${stage} -le 99 ] && [ ${stop_stage} -ge 99 ]; then echo "##########################################" echo "# #" - echo "# stage 7: Release preparation #" + echo "# stage 99: Release preparation #" echo "# #" echo "##########################################" - $PYTHON_ROOT/python prepare_release.py $CONFIG_PATH || exit 1; + python train/prepare_release.py $CONFIG_PATH || exit 1; echo "" fi diff --git a/train/run_resf0.sh b/train/run_resf0.sh new file mode 100644 index 0000000..73f662c --- /dev/null +++ b/train/run_resf0.sh @@ -0,0 +1,286 @@ +set -e +set -u +set -o pipefail + +function xrun () { + set -x + $@ + set +x +} + +CONFIG_PATH="train/config.yaml" + +script_dir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd) +NNSVS_COMMON_ROOT="train/scripts" +NNSVS_SHELL_SCRIPTS_ROOT=$NNSVS_COMMON_ROOT +. "$NNSVS_COMMON_ROOT/yaml_parser.sh" || exit 1; + +eval $(parse_yaml $CONFIG_PATH "") + +train_set="train_no_dev" +dev_set="dev" +eval_set="eval" +datasets=($train_set $dev_set $eval_set) +testsets=($dev_set $eval_set) + +dumpdir=target/dump +dump_org_dir="$dumpdir/$spk/org" +dump_norm_dir="$dumpdir/$spk/norm" + +stage=0 +stop_stage=-1 + +. $NNSVS_COMMON_ROOT/parse_options.sh || exit 1; + + +if [ -z ${tag:=} ]; then + expname="${spk}" +else + expname="${spk}_${tag}" +fi +expdir="model_exp/$expname" + + +# Prepare files in singing-database for training +if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then + echo "#########################################" + echo "# #" + echo "# stage 0: Data preparation #" + echo "# #" + echo "#########################################" + rm -rf $out_dir + rm -f train/preprocess_data.py.log + python train/preprocess_data.py $CONFIG_PATH || exit 1; + echo "" +fi + + +# Analyze .wav and .lab files +if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then + echo "##########################################" + echo "# #" + echo "# stage 1: Feature generation #" + echo "# #" + echo "##########################################" + rm -rf $dumpdir + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/feature_generation.sh || exit 1; + # to---------------------------------------------------- + . $NNSVS_SHELL_SCRIPTS_ROOT/feature_generation.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + + +# Train time-lag model +if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then + echo "##########################################" + echo "# #" + echo "# stage 2: Time-lag model training #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/train_timelag.sh || exit 1; + # to---------------------------------------------------- + . $NNSVS_SHELL_SCRIPTS_ROOT/train_timelag.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + + +# Train duration model +if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then + echo "##########################################" + echo "# #" + echo "# stage 3: Duration model training #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/train_duration.sh || exit 1; + # to---------------------------------------------------- + . $NNSVS_SHELL_SCRIPTS_ROOT/train_duration.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + + +# Train acoustic model +if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ]; then + echo "##########################################" + echo "# #" + echo "# stage 4: Training acoustic model #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/train_acoustic.sh || exit 1; + # to---------------------------------------------------- + . $NNSVS_SHELL_SCRIPTS_ROOT/train_acoustic_resf0.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + + +# Generate models from timelag/duration/acoustic models +if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then + echo "##########################################" + echo "# #" + echo "# stage 5: Feature generation #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/generate.sh || exit 1; + # to---------------------------------------------------- + . $NNSVS_SHELL_SCRIPTS_ROOT/generate.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + + +# Synthesis wav files +if [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then + echo "##########################################" + echo "# #" + echo "# stage 6: Waveform synthesis #" + echo "# #" + echo "##########################################" + . $NNSVS_COMMON_ROOT/synthesis.sh + echo "" +fi + + +# Setup postfilter +if [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then + echo "##########################################" + echo "# #" + echo "# stage 7: Prepare postfilter #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/generate.sh || exit 1; + # to---------------------------------------------------- + . $NNSVS_SHELL_SCRIPTS_ROOT/prepare_postfilter.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + +# Train mgc postfilter +if [ ${stage} -le 8 ] && [ ${stop_stage} -ge 8 ]; then + echo "##########################################" + echo "# #" + echo "# stage 8: Training mgc postfilter #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/generate.sh || exit 1; + # to---------------------------------------------------- + postfilter_model="postfilter_mgc" + postfilter_train="mgc" + postfilter_data="mgc_data" + . $NNSVS_SHELL_SCRIPTS_ROOT/train_postfilter.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + +# Train bap postfilter +if [ ${stage} -le 9 ] && [ ${stop_stage} -ge 9 ]; then + echo "##########################################" + echo "# #" + echo "# stage 9: Training bap postfilter #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/generate.sh || exit 1; + # to---------------------------------------------------- + postfilter_model="postfilter_bap" + postfilter_train="bap" + postfilter_data="bap_data" + . $NNSVS_SHELL_SCRIPTS_ROOT/train_postfilter.sh || exit 1; + # ------------------------------------------------------ + echo "" +fi + +# Merge postfilter models +if [ ${stage} -le 10 ] && [ ${stop_stage} -ge 10 ]; then + echo "##########################################" + echo "# #" + echo "# stage 10: Merge postfilter models #" + echo "# #" + echo "##########################################" + # changed----------------------------------------------- + # . $NNSVS_COMMON_ROOT/generate.sh || exit 1; + # to---------------------------------------------------- + python $NNSVS_SHELL_SCRIPTS_ROOT/merge_postfilters.py $expdir/postfilter_mgc/latest.pth $expdir/postfilter_bap/latest.pth $expdir/postfilter || exit 1; + python $NNSVS_SHELL_SCRIPTS_ROOT/merge_postfilters.py $expdir/postfilter_mgc/best_loss.pth $expdir/postfilter_bap/best_loss.pth $expdir/postfilter || exit 1; + # ------------------------------------------------------ + echo "" +fi + +# Vocoder stuff +#if [ ${stage} -le 11 ] && [ ${stop_stage} -ge 11 ]; then +# echo "stage 11: Prepare vocoder input/output features" +# . $NNSVS_COMMON_ROOT/prepare_voc_features.sh +#fi + +#if [ ${stage} -le 12 ] && [ ${stop_stage} -ge 12 ]; then +# echo "stage 12: Compute statistics of vocoder's input features" +# +# if [[ ${acoustic_features} == *"static_deltadelta_sinevib"* ]]; then +# ext="--num_windows 3 --vibrato_mode sine" +# elif [[ ${acoustic_features} == *"static_deltadelta_diffvib"* ]]; then +# ext="--num_windows 3 --vibrato_mode diff" +# elif [[ ${acoustic_features} == *"static_only_sinevib"* ]]; then +# ext="--num_windows 1 --vibrato_mode sine" +# elif [[ ${acoustic_features} == *"static_only_diffvib"* ]]; then +# ext="--num_windows 1 --vibrato_mode diff" +# elif [[ ${acoustic_features} == *"static_deltadelta"* ]]; then +# ext="--num_windows 3 --vibrato_mode none" +# elif [[ ${acoustic_features} == *"static_only"* ]]; then +# ext="--num_windows 1 --vibrato_mode none" +# else +# ext="" +# fi +# +# xrun python $NNSVS_COMMON_ROOT/scaler_joblib2npy_voc.py \ +# $dump_norm_dir/out_acoustic_scaler.joblib $dump_norm_dir/ \ +# --sample_rate $sample_rate $ext +#fi + +#if [ ${stage} -le 13 ] && [ ${stop_stage} -ge 13 ]; then +# echo "stage 13: Training vocoder using parallel_wavegan" +# if [ ! -z ${pretrained_vocoder_checkpoint} ]; then +# extra_args="--resume $pretrained_vocoder_checkpoint" +# else +# extra_args="" +# fi +# # NOTE: copy normalization stats to expdir for convenience +# mkdir -p $expdir/$vocoder_model +# cp -v $dump_norm_dir/in_vocoder*.npy $expdir/$vocoder_model +# xrun parallel-wavegan-train --config conf/parallel_wavegan/${vocoder_model}.yaml \ +# --train-dumpdir $dump_norm_dir/$train_set/in_vocoder \ +# --dev-dumpdir $dump_norm_dir/$dev_set/in_vocoder/ \ +# --outdir $expdir/$vocoder_model $extra_args +#fi + +#if [ ${stage} -le 14 ] && [ ${stop_stage} -ge 14 ]; then +# echo "stage 14: Synthesis waveforms by parallel_wavegan" +# if [ -z "${vocoder_eval_checkpoint}" ]; then +# vocoder_eval_checkpoint="$(ls -dt "${expdir}/${vocoder_model}"/*.pkl | head -1 || true)" +# fi +# outdir="${expdir}/$vocoder_model/wav/$(basename "${vocoder_eval_checkpoint}" .pkl)" +# for s in ${testsets[@]}; do +# xrun parallel-wavegan-decode --dumpdir $dump_norm_dir/$s/in_vocoder \ +# --checkpoint $vocoder_eval_checkpoint \ +# --outdir $outdir +# done +#fi + +# Copy the models to release directory +if [ ${stage} -le 99 ] && [ ${stop_stage} -ge 99 ]; then + echo "##########################################" + echo "# #" + echo "# stage 99: Release preparation #" + echo "# #" + echo "##########################################" + python train/prepare_release.py $CONFIG_PATH || exit 1; + echo "" +fi diff --git a/train/run_rmdn.bat b/train/run_rmdn.bat deleted file mode 100644 index 55826ac..0000000 --- a/train/run_rmdn.bat +++ /dev/null @@ -1,2 +0,0 @@ -portablegit\bin\bash.exe run_rmdn.sh --stage 0 --stop_stage 7 -PAUSE diff --git a/train/run_rmdn.sh b/train/run_rmdn.sh deleted file mode 100644 index 8145fdb..0000000 --- a/train/run_rmdn.sh +++ /dev/null @@ -1,231 +0,0 @@ -#!/bin/bash - -########## -# customized for Portable ENUNU Training Kit on Windows -########## -# Set bash to 'debug' mode, it will exit on : -# -e 'error', -u 'undefined variable', -o ... 'error in pipeline', -x 'print commands', -set -e -set -u -set -o pipefail - -function xrun () { - set -x - $@ - set +x -} - -# use embed python executional file -PYTHON_ROOT="python-3.8.10-embed-amd64" -PYTHON_EXE="$PYTHON_ROOT/python.exe" -PYTHON_SCRIPTS_ROOT="$PYTHON_ROOT/Scripts" -CONFIG_PATH="config_rmdn.yaml" - -script_dir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd) - -# changed----------------------------------------------- -# NNSVS_ROOT="nnsvs" -# NNSVS_COMMON_ROOT="nnsvs/egs/_common/spsvs" -# . "$NNSVS_ROOT/utils/yaml_parser.sh" || exit 1; -# to---------------------------------------------------- -NNSVS_SHELL_SCRIPTS_ROOT="nnsvs_shell_scripts" -. $NNSVS_SHELL_SCRIPTS_ROOT/yaml_parser.sh || exit 1; -# ------------------------------------------------------ - -eval $(parse_yaml $CONFIG_PATH "") - -train_set="train_no_dev" -dev_set="dev" -eval_set="eval" -datasets=($train_set $dev_set $eval_set) -testsets=($dev_set $eval_set) - -dumpdir=dump -dump_org_dir="$dumpdir/$spk/org" -dump_norm_dir="$dumpdir/$spk/norm" - -stage=0 -stop_stage=-1 - -# changed----------------------------------------------- -# . $NNSVS_ROOT/parse_options.sh || exit 1; -# to---------------------------------------------------- -. $NNSVS_SHELL_SCRIPTS_ROOT/parse_options.sh || exit 1; -# ------------------------------------------------------ - -# exp name -if [ -z ${tag:=} ]; then - expname="${spk}" -else - expname="${spk}_${tag}" -fi -expdir="exp/$expname" - - -# Prepare files in singing-database for training -if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then - echo "#########################################" - echo "# #" - echo "# stage 0: Data preparation #" - echo "# #" - echo "#########################################" - rm -rf $out_dir - rm -f preprocess_data.py.log - $PYTHON_ROOT/python preprocess_data.py $CONFIG_PATH || exit 1; - echo "" -fi - - -# Analyze .wav and .lab files -if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then - echo "##########################################" - echo "# #" - echo "# stage 1: Feature generation #" - echo "# #" - echo "##########################################" - rm -rf $dumpdir - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/feature_generation.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/feature_generation.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi - -if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 2 ]; then - echo "--------- 1st Training -------------------------------------------------------" -fi -# Train time-lag model -if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then - echo "############################################" - echo "# #" - echo "# stage 2: Time-lag model training (1st) #" - echo "# #" - echo "############################################" - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/train_timelag.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/train_timelag.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi -# Train duration model -if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then - echo "############################################" - echo "# #" - echo "# stage 3: Duration model training (1st) #" - echo "# #" - echo "############################################" - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/train_duration.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/train_duration.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi -# Train acoustic model -if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ]; then - echo "############################################" - echo "# #" - echo "# stage 4: Training acoustic model (1st) #" - echo "# #" - echo "############################################" - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/train_acoustic.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/train_acoustic.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi - - -if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 2 ]; then - echo "--------- 2nd Training -------------------------------------------------------" -fi -# set current expdir as pretrained_expdir -pretrained_expdir=$expdir -# Train time-lag model -timelag_train=$timelag_train_2nd -if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then - echo "############################################" - echo "# #" - echo "# stage 2: Time-lag model training (2nd) #" - echo "# #" - echo "############################################" - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/train_timelag.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/train_timelag.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi -# Train duration model -duration_train=$duration_train_2nd -if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then - echo "############################################" - echo "# #" - echo "# stage 3: Duration model training (2nd) #" - echo "# #" - echo "############################################" - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/train_duration.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/train_duration.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi -# Train acoustic model -acoustic_train=$acoustic_train_2nd -if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ]; then - echo "############################################" - echo "# #" - echo "# stage 4: Training acoustic model (2nd) #" - echo "# #" - echo "############################################" - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/train_acoustic.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/train_acoustic.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi - - -# Generate models from timelag/duration/acoustic models -if [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then - echo "##########################################" - echo "# #" - echo "# stage 5: Feature generation #" - echo "# #" - echo "##########################################" - # changed----------------------------------------------- - # . $NNSVS_COMMON_ROOT/generate.sh || exit 1; - # to---------------------------------------------------- - . $NNSVS_SHELL_SCRIPTS_ROOT/generate.sh || exit 1; - # ------------------------------------------------------ - echo "" -fi - -# -# # Synthesis wav files -# if [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then -# echo "##########################################" -# echo "# #" -# echo "# stage 6: Waveform synthesis #" -# echo "# #" -# echo "##########################################" -# . $NNSVS_COMMON_ROOT/synthesis.sh -# echo "" -# fi -# - -# Copy the models to release directory -if [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then - echo "##########################################" - echo "# #" - echo "# stage 7: Release preparation #" - echo "# #" - echo "##########################################" - $PYTHON_ROOT/python prepare_release.py $CONFIG_PATH || exit 1; - echo "" -fi diff --git a/train/run_vocoder.sh b/train/run_vocoder.sh new file mode 100644 index 0000000..4ee4fba --- /dev/null +++ b/train/run_vocoder.sh @@ -0,0 +1,103 @@ +set -e +set -u +set -o pipefail + +function xrun () { + set -x + $@ + set +x +} + +CONFIG_PATH="train/config.yaml" + +script_dir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd) +NNSVS_COMMON_ROOT="train/scripts" +. "$NNSVS_COMMON_ROOT/yaml_parser.sh" || exit 1; + +eval $(parse_yaml $CONFIG_PATH "") + +train_set="train_no_dev" +dev_set="dev" +eval_set="eval" +datasets=($train_set $dev_set $eval_set) +testsets=($dev_set $eval_set) + +dumpdir=target/dump +dump_org_dir="$dumpdir/$spk/org" +dump_norm_dir="$dumpdir/$spk/norm" + +stage=0 +stop_stage=-1 + +. $NNSVS_COMMON_ROOT/parse_options.sh || exit 1; + + +if [ -z ${tag:=} ]; then + expname="${spk}" +else + expname="${spk}_${tag}" +fi +expdir="model_exp/$expname" + +# Vocoder stuff +if [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then + echo "stage 8: Prepare vocoder input/output features" + . $NNSVS_COMMON_ROOT/prepare_voc_features.sh +fi + +if [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then + echo "stage 9: Compute statistics of vocoder's input features" + + if [[ ${acoustic_features} == *"static_deltadelta_sinevib"* ]]; then + ext="--num_windows 3 --vibrato_mode sine" + elif [[ ${acoustic_features} == *"static_deltadelta_diffvib"* ]]; then + ext="--num_windows 3 --vibrato_mode diff" + elif [[ ${acoustic_features} == *"static_only_sinevib"* ]]; then + ext="--num_windows 1 --vibrato_mode sine" + elif [[ ${acoustic_features} == *"static_only_diffvib"* ]]; then + ext="--num_windows 1 --vibrato_mode diff" + elif [[ ${acoustic_features} == *"static_deltadelta"* ]]; then + ext="--num_windows 3 --vibrato_mode none" + elif [[ ${acoustic_features} == *"static_only"* ]]; then + ext="--num_windows 1 --vibrato_mode none" + else + ext="" + fi + + xrun python $NNSVS_COMMON_ROOT/scaler_joblib2npy_voc.py \ + $dump_norm_dir/out_acoustic_scaler.joblib $dump_norm_dir/ \ + --sample_rate $sample_rate $ext +fi + +if [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then + echo "stage 10: Training vocoder using parallel_wavegan" + + if [ ! -z ${pretrained_vocoder_checkpoint} ]; then + extra_args="--resume $pretrained_vocoder_checkpoint" + else + extra_args="" + fi + + # NOTE: copy normalization stats to expdir for convenience + mkdir -p $expdir/$vocoder_model + cp -v $dump_norm_dir/in_vocoder*.npy $expdir/$vocoder_model + xrun parallel-wavegan-train --config train/conf/parallel_wavegan/${vocoder_model}.yaml \ + --train-dumpdir $dump_norm_dir/$train_set/in_vocoder \ + --dev-dumpdir $dump_norm_dir/$dev_set/in_vocoder/ \ + --tensorboard-log tensorboard/$expname/$vocoder_model \ + --outdir $expdir/$vocoder_model $extra_args +fi + +if [ ${stage} -le 4 ] && [ ${stop_stage} -ge 4 ]; then + echo "stage 11: Synthesis waveforms by parallel_wavegan" + if [ -z "${vocoder_eval_checkpoint}" ]; then + vocoder_eval_checkpoint="$(ls -dt "${expdir}/${vocoder_model}"/*.pkl | head -1 || true)" + fi + outdir="${expdir}/$vocoder_model/wav/$(basename "${vocoder_eval_checkpoint}" .pkl)" + for s in ${testsets[@]}; do + xrun parallel-wavegan-decode --dumpdir $dump_norm_dir/$s/in_vocoder \ + --checkpoint $vocoder_eval_checkpoint \ + --outdir $outdir + done +fi + diff --git a/train/scripts/extract_static_scaler.py b/train/scripts/extract_static_scaler.py new file mode 100644 index 0000000..4ef5a94 --- /dev/null +++ b/train/scripts/extract_static_scaler.py @@ -0,0 +1,52 @@ +import argparse +import sys + +import joblib +import numpy as np +from nnsvs.multistream import get_static_features +from nnsvs.util import StandardScaler +from omegaconf import OmegaConf + + +def get_parser(): + parser = argparse.ArgumentParser( + description="Extract static scaler from static+dynamic scaler", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + parser.add_argument("input_file", type=str, help="input file") + parser.add_argument("model_config", type=str, help="model config") + parser.add_argument("output_file", type=str, help="output file") + + return parser + + +if __name__ == "__main__": + args = get_parser().parse_args(sys.argv[1:]) + model_config = OmegaConf.load(args.model_config) + + out_scaler = joblib.load(args.input_file) + + mean_ = get_static_features( + out_scaler.mean_.reshape(1, 1, out_scaler.mean_.shape[-1]), + model_config.num_windows, + model_config.stream_sizes, + model_config.has_dynamic_features, + ) + mean_ = np.concatenate(mean_, -1).reshape(1, -1) + var_ = get_static_features( + out_scaler.var_.reshape(1, 1, out_scaler.var_.shape[-1]), + model_config.num_windows, + model_config.stream_sizes, + model_config.has_dynamic_features, + ) + var_ = np.concatenate(var_, -1).reshape(1, -1) + scale_ = get_static_features( + out_scaler.scale_.reshape(1, 1, out_scaler.scale_.shape[-1]), + model_config.num_windows, + model_config.stream_sizes, + model_config.has_dynamic_features, + ) + scale_ = np.concatenate(scale_, -1).reshape(1, -1) + static_scaler = StandardScaler(mean_, var_, scale_) + + joblib.dump(static_scaler, args.output_file) diff --git a/train/scripts/feature_generation.sh b/train/scripts/feature_generation.sh new file mode 100644 index 0000000..508e720 --- /dev/null +++ b/train/scripts/feature_generation.sh @@ -0,0 +1,67 @@ +# NOTE: the script is supposed to be used called from nnsvs recipes. +# Please don't try to run the shell script directory. + +if [ -z ${sample_rate+x} ]; then + echo "ERROR: sampler_rate must be set explicitly. Please add 'sample_rate: ' to config.yaml." + echo "e.g., sample_rate: 48000" + exit -1 +fi + +if [[ -z ${trajectory_smoothing+x} ]]; then + trajectory_smoothing=false + trajectory_smoothing_cutoff=50 +fi + +for s in ${datasets[@]}; +do + if [ -d train/conf/prepare_features ]; then + ext="--config-dir train/conf/prepare_features" + echo Use Userconfig + else + ext="" + fi + xrun nnsvs-prepare-features $ext \ + utt_list=target/data/list/$s.list out_dir=$dump_org_dir/$s/ \ + question_path=$question_path \ + timelag=$timelag_features duration=$duration_features acoustic=$acoustic_features \ + acoustic.sample_rate=$sample_rate \ + acoustic.trajectory_smoothing=${trajectory_smoothing} \ + acoustic.trajectory_smoothing_cutoff=${trajectory_smoothing_cutoff} \ + max_workers=8 +done + +# Compute normalization stats for each input/output +mkdir -p $dump_norm_dir +for inout in "in" "out"; do + if [ $inout = "in" ]; then + scaler_class="sklearn.preprocessing.MinMaxScaler" + else + scaler_class="sklearn.preprocessing.StandardScaler" + fi + for typ in timelag duration acoustic; + do + if [[ ${base_dump_norm_dir+x} && ! -z $base_dump_norm_dir ]]; then + ext="external_scaler=${base_dump_norm_dir}/${inout}_${typ}_scaler.joblib" + else + ext="" + fi + find $dump_org_dir/$train_set/${inout}_${typ} -name "*feats.npy" > train_list.txt + scaler_path=$dump_org_dir/${inout}_${typ}_scaler.joblib + xrun nnsvs-fit-scaler list_path=train_list.txt scaler._target_=$scaler_class \ + out_path=$scaler_path ${ext} + rm -f train_list.txt + cp -v $scaler_path $dump_norm_dir/${inout}_${typ}_scaler.joblib + done +done + +# apply normalization +for s in ${datasets[@]}; do + for inout in "in" "out"; do + for typ in timelag duration acoustic; + do + xrun nnsvs-preprocess-normalize in_dir=$dump_org_dir/$s/${inout}_${typ}/ \ + scaler_path=$dump_org_dir/${inout}_${typ}_scaler.joblib \ + out_dir=$dump_norm_dir/$s/${inout}_${typ}/ + done + done +done diff --git a/train/scripts/generate.sh b/train/scripts/generate.sh new file mode 100644 index 0000000..e5dab00 --- /dev/null +++ b/train/scripts/generate.sh @@ -0,0 +1,22 @@ +for s in ${testsets[@]}; do + for typ in timelag duration acoustic; do + if [ $typ = "timelag" ]; then + eval_checkpoint=$timelag_eval_checkpoint + model=timelag + elif [ $typ = "duration" ]; then + eval_checkpoint=$duration_eval_checkpoint + model=duration + else + eval_checkpoint=$acoustic_eval_checkpoint + model=acoustic + fi + + checkpoint=$expdir/$model/${eval_checkpoint} + name=$(basename $checkpoint) + xrun nnsvs-generate model.checkpoint=$checkpoint \ + model.model_yaml=$expdir/$model/model.yaml \ + out_scaler_path=$dump_norm_dir/out_${typ}_scaler.joblib \ + in_dir=$dump_norm_dir/$s/in_${typ}/ \ + out_dir=$expdir/$model/predicted/$s/${name%.*}/ + done +done diff --git a/train/scripts/merge_postfilters.py b/train/scripts/merge_postfilters.py new file mode 100644 index 0000000..eb7ba60 --- /dev/null +++ b/train/scripts/merge_postfilters.py @@ -0,0 +1,55 @@ +import argparse +import os +import sys +from pathlib import Path + +import torch +from omegaconf import OmegaConf + + +def get_parser(): + parser = argparse.ArgumentParser( + description="Merge post-filters", + ) + parser.add_argument("mgc_checkpoint", type=str, help="mgc checkpoint") + parser.add_argument("bap_checkpoint", type=str, help="bap checkpoint") + parser.add_argument("output_dir", type=str, help="out_dir") + return parser + + +if __name__ == "__main__": + args = get_parser().parse_args(sys.argv[1:]) + + mgc_checkpoint = torch.load(args.mgc_checkpoint, map_location="cpu") + bap_checkpoint = torch.load(args.bap_checkpoint, map_location="cpu") + + for path in [args.mgc_checkpoint, args.bap_checkpoint]: + size = os.path.getsize(path) + print("Processisng:", path) + print(f"File size: {size / 1024/1024:.3f} MB") + + mgc_model = OmegaConf.load(Path(args.mgc_checkpoint).parent / "model.yaml") + bap_model = OmegaConf.load(Path(args.bap_checkpoint).parent / "model.yaml") + + if mgc_model.netG._target_ != "nnsvs.postfilters.MultistreamPostFilter": + raise ValueError("Only MultistreamPostFilter is supported for now") + + checkpoint = mgc_checkpoint + checkpoint["state_dict"].update(bap_checkpoint["state_dict"]) + + for k in ["optimizer_state", "lr_scheduler_state"]: + if k in checkpoint.keys(): + del checkpoint[k] + + Path(args.output_dir).mkdir(exist_ok=True, parents=True) + + # Model definition + yaml_path = Path(args.output_dir) / "model.yaml" + mgc_model.netG.bap_postfilter = bap_model.netG.bap_postfilter + OmegaConf.save(mgc_model, yaml_path) + + # Checkpoint + checkpoint_path = Path(args.output_dir) / os.path.basename(args.mgc_checkpoint) + torch.save(checkpoint, checkpoint_path) + size = os.path.getsize(checkpoint_path) + print(f"File size (after): {size / 1024/1024:.3f} MB") diff --git a/train/nnsvs_shell_scripts/parse_options.sh b/train/scripts/parse_options.sh similarity index 95% rename from train/nnsvs_shell_scripts/parse_options.sh rename to train/scripts/parse_options.sh index 3ce261a..335e69e 100644 --- a/train/nnsvs_shell_scripts/parse_options.sh +++ b/train/scripts/parse_options.sh @@ -1,8 +1,8 @@ #!/bin/bash -#------------------------------------------------------------------------------ + # Copyright 2012 Johns Hopkins University (Author: Daniel Povey); # Arnab Ghoshal, Karel Vesely -# + # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at @@ -15,7 +15,6 @@ # MERCHANTABLITY OR NON-INFRINGEMENT. # See the Apache 2 License for the specific language governing permissions and # limitations under the License. -#------------------------------------------------------------------------------ # Parse command-line options. @@ -25,12 +24,12 @@ # The exception is --help, which takes no arguments, but prints the # $help_message variable (if defined). + ### ### The --config file options have lower priority to command line ### options, so we need to import them first... ### - # Now import all the configs specified by command-line, in left-to-right order for ((argpos=1; argpos<$#; argpos++)); do if [ "${!argpos}" == "--config" ]; then diff --git a/train/scripts/prepare_postfilter.sh b/train/scripts/prepare_postfilter.sh new file mode 100644 index 0000000..adbaace --- /dev/null +++ b/train/scripts/prepare_postfilter.sh @@ -0,0 +1,67 @@ +# NOTE: the script is supposed to be used called from nnsvs recipes. +# Please don't try to run the shell script directory. + +if [[ -z ${trajectory_smoothing+x} ]]; then + trajectory_smoothing=false + trajectory_smoothing_cutoff=50 +fi + +mkdir -p $expdir/acoustic/norm/ +python $NNSVS_SHELL_SCRIPTS_ROOT/extract_static_scaler.py \ + $dump_norm_dir/out_acoustic_scaler.joblib \ + $expdir/acoustic/model.yaml \ + $dump_norm_dir/out_postfilter_scaler.joblib + +for s in ${datasets[@]}; +do + if [ ! -e $expdir/acoustic/${acoustic_eval_checkpoint} ]; then + echo "ERROR: acoustic model checkpoint $expdir/acoustic/${acoustic_eval_checkpoint} does not exist." + echo "You must train the acoustic model before training a post-filter." + exit 1 + fi + + # Input + xrun nnsvs-gen-static-features \ + model.checkpoint=$expdir/acoustic/${acoustic_eval_checkpoint} \ + model.model_yaml=$expdir/acoustic/model.yaml \ + out_scaler_path=$dump_norm_dir/out_acoustic_scaler.joblib \ + in_dir=$dump_norm_dir/$s/in_acoustic/ \ + out_dir=$expdir/acoustic/norm/$s/in_postfilter \ + utt_list=target/data/list/$s.list normalize=true + + if [ -d train/conf/prepare_static_features ]; then + ext="--config-dir train/conf/prepare_static_features" + else + ext="" + fi + + # Output + xrun nnsvs-prepare-static-features $ext acoustic=$acoustic_features \ + in_dir=$dump_norm_dir/$s/out_acoustic/ \ + out_dir=$dump_norm_dir/$s/out_postfilter \ + utt_list=target/data/list/$s.list \ + acoustic.sample_rate=$sample_rate \ + acoustic.correct_vuv=$correct_vuv \ + acoustic.relative_f0=$relative_f0 + # acoustic.f0_floor=$f0_floor \ + # acoustic.f0_ceil=$f0_ceil +done + + +# for convenience +cp -v $dump_norm_dir/out_postfilter_scaler.joblib $expdir/acoustic/norm/in_postfilter_scaler.joblib + +# apply normalization for input features +# NOTE: output features are already normalized +# find $expdir/acoustic/org/$train_set/in_postfilter -name "*feats.npy" > train_list.txt +# scaler_path=$expdir/acoustic/norm/in_postfilter_scaler.joblib +# scaler_class="sklearn.preprocessing.StandardScaler" +# xrun nnsvs-fit-scaler list_path=train_list.txt scaler._target_=$scaler_class \ +# out_path=$scaler_path +# rm -f train_list.txt + +# for s in ${datasets[@]}; do +# xrun nnsvs-preprocess-normalize in_dir=$expdir/acoustic/org/$s/in_postfilter \ +# scaler_path=$scaler_path \ +# out_dir=$expdir/acoustic/norm/$s/in_postfilter +# done \ No newline at end of file diff --git a/train/scripts/prepare_voc_features.sh b/train/scripts/prepare_voc_features.sh new file mode 100644 index 0000000..1bdbc29 --- /dev/null +++ b/train/scripts/prepare_voc_features.sh @@ -0,0 +1,38 @@ +# NOTE: the script is supposed to be used called from nnsvs recipes. +# Please don't try to run the shell script directory. + +for s in ${datasets[@]}; +do + if [ -d train/conf/prepare_features ]; then + ext="--config-dir train/conf/prepare_features" + else + ext="" + fi + xrun nnsvs-prepare-voc-features $ext acoustic=$acoustic_features \ + in_dir=$dump_norm_dir/$s/out_acoustic/ \ + out_dir=$dump_norm_dir/$s/in_vocoder \ + utt_list=target/data/list/$s.list +done + + +if [[ ${acoustic_features} == *"static_deltadelta_sinevib"* ]]; then + ext="--num_windows 3 --vibrato_mode sine" +elif [[ ${acoustic_features} == *"static_deltadelta_diffvib"* ]]; then + ext="--num_windows 3 --vibrato_mode diff" +elif [[ ${acoustic_features} == *"static_only_sinevib"* ]]; then + ext="--num_windows 1 --vibrato_mode sine" +elif [[ ${acoustic_features} == *"static_only_diffvib"* ]]; then + ext="--num_windows 1 --vibrato_mode diff" +elif [[ ${acoustic_features} == *"static_deltadelta"* ]]; then + ext="--num_windows 3 --vibrato_mode none" +elif [[ ${acoustic_features} == *"static_only"* ]]; then + ext="--num_windows 1 --vibrato_mode none" +else + ext="" +fi + +# Compute statistics of vocoder's input features +# NOTE: no-op if the acoustic features don't have dynamic features +xrun python $NNSVS_COMMON_ROOT/scaler_joblib2npy_voc.py \ + $dump_norm_dir/out_acoustic_scaler.joblib $dump_norm_dir/ \ + --sample_rate $sample_rate $ext diff --git a/train/scripts/scaler_joblib2npy.py b/train/scripts/scaler_joblib2npy.py new file mode 100644 index 0000000..ad340fa --- /dev/null +++ b/train/scripts/scaler_joblib2npy.py @@ -0,0 +1,45 @@ +import argparse +import sys +from pathlib import Path + +import joblib +import numpy as np +from nnsvs.util import StandardScaler as NNSVSStandardScaler +from sklearn.preprocessing import MinMaxScaler, StandardScaler + + +def get_parser(): + parser = argparse.ArgumentParser(description="joblib scaler to npy files") + parser.add_argument("input_file", type=str, help="input file") + parser.add_argument("out_dir", type=str, help="out directory") + + return parser + + +if __name__ == "__main__": + args = get_parser().parse_args(sys.argv[1:]) + + input_file = Path(args.input_file) + scaler = joblib.load(input_file) + + out_dir = Path(args.out_dir) + out_dir.mkdir(parents=True, exist_ok=True) + + if isinstance(scaler, StandardScaler) or isinstance(scaler, NNSVSStandardScaler): + print(f"Converting {input_file} mean/scale npy files") + mean_path = out_dir / (input_file.stem + "_mean.npy") + scale_path = out_dir / (input_file.stem + "_scale.npy") + var_path = out_dir / (input_file.stem + "_var.npy") + + np.save(mean_path, scaler.mean_, allow_pickle=False) + np.save(scale_path, scaler.scale_, allow_pickle=False) + np.save(var_path, scaler.var_, allow_pickle=False) + elif isinstance(scaler, MinMaxScaler): + print(f"Converting {input_file} min/max npy files") + min_path = out_dir / (input_file.stem + "_min.npy") + scale_path = out_dir / (input_file.stem + "_scale.npy") + + np.save(min_path, scaler.min_, allow_pickle=False) + np.save(scale_path, scaler.scale_, allow_pickle=False) + else: + raise ValueError(f"Unknown scaler type: {type(scaler)}") diff --git a/train/scripts/scaler_joblib2npy_voc.py b/train/scripts/scaler_joblib2npy_voc.py new file mode 100644 index 0000000..da7e0a8 --- /dev/null +++ b/train/scripts/scaler_joblib2npy_voc.py @@ -0,0 +1,86 @@ +"""Save npy-format scalers for vocoders + +NOTE: The input must be out_acoutic_scaler.joblib that is used for normalizing +the vocoder's input features +""" +import argparse +import sys +from pathlib import Path + +import joblib +import numpy as np +from nnsvs.multistream import get_static_features +from nnsvs.util import get_world_stream_info +from sklearn.preprocessing import StandardScaler + + +def get_parser(): + parser = argparse.ArgumentParser(description="joblib scaler to npy files") + parser.add_argument("input_file", type=str, help="input file") + parser.add_argument("out_dir", type=str, help="out directory") + parser.add_argument("--sample_rate", type=int, default=48000, help="sampling rate") + parser.add_argument("--mgc_order", type=int, default=59, help="mgc order") + parser.add_argument("--num_windows", type=int, default=3, help="number of windows") + parser.add_argument("--vibrato_mode", type=str, default="none", help="vibrato mode") + + return parser + + +if __name__ == "__main__": + args = get_parser().parse_args(sys.argv[1:]) + + input_file = Path(args.input_file) + scaler = joblib.load(input_file) + assert isinstance(scaler, StandardScaler) + + if input_file.stem != "out_acoustic_scaler": + raise ValueError( + f"Expected input_file.stem to be 'out_acoustic_scaler', got {input_file.stem}" + ) + + # NOTE: The output files are supposed to be used for normalizing + # the vocoder's input features. + out_file_name = "in_vocoder_scaler" + + mean = scaler.mean_ + scale = scaler.scale_ + var = scaler.var_ + + out_dir = Path(args.out_dir) + out_dir.mkdir(parents=True, exist_ok=True) + stream_sizes, has_dynamic_features = get_world_stream_info( + args.sample_rate, args.mgc_order, args.num_windows, args.vibrato_mode + ) + + print(f"Converting {input_file} mean/scale npy files") + lf0_params = {} + for name, in_feats in [("mean", mean), ("scale", scale), ("var", var)]: + streams = get_static_features( + in_feats.reshape(1, -1, in_feats.shape[-1]), + args.num_windows, + stream_sizes, + has_dynamic_features, + ) + + # NOTE: use up to 4 streams + # [mgc, lf0, bap, vuv] + streams = list(map(lambda x: x.reshape(-1), streams))[:4] + lf0_params[name] = float(streams[1]) + out_feats = np.concatenate(streams) + + print(f"[{name}] dim: {in_feats.shape} -> {out_feats.shape}") + out_path = out_dir / (out_file_name + f"_{name}.npy") + np.save(out_path, out_feats, allow_pickle=False) + + print( + f""" +If you are going to train NSF-based vocoders, please set the following parameters: + +out_lf0_mean: {lf0_params["mean"]} +out_lf0_scale: {lf0_params["scale"]} + +NOTE: If you are using the same data for training acoustic/vocoder models, the F0 statistics +for those models should be the same. If you are using different data for training +acoustic/vocoder models (e.g., training a vocoder model on a multiple DBs), +you will likely need to set different F0 statistics for acoustic/vocoder models.""" + ) diff --git a/train/nnsvs_shell_scripts/synthesis.sh b/train/scripts/synthesis.sh similarity index 51% rename from train/nnsvs_shell_scripts/synthesis.sh rename to train/scripts/synthesis.sh index 6908eef..4767f5e 100644 --- a/train/nnsvs_shell_scripts/synthesis.sh +++ b/train/scripts/synthesis.sh @@ -1,34 +1,8 @@ -#!/bin/bash # NOTE: the script is supposed to be used called from nnsvs recipes. -# Please don't try to run the shell script directry. +# Please don't try to run the shell script directory. -#------------------------------------------------------------------------------ -# MIT License -# -# Copyright (c) 2020 Ryuichi Yamamoto -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -#------------------------------------------------------------------------------ - - -if [ -d conf/synthesis ]; then - ext="--config-dir conf/synthesis" +if [ -d train/conf/synthesis ]; then + ext="--config-dir train/conf/synthesis" else ext="" fi @@ -50,11 +24,12 @@ for s in ${testsets[@]}; do else ground_truth_duration=true fi - xrun $PYTHON_EXE -m nnsvs.bin.synthesis $ext \ + xrun nnsvs-synthesis $ext sample_rate=$sample_rate \ question_path=$question_path \ timelag=$timelag_synthesis \ duration=$duration_synthesis \ acoustic=$acoustic_synthesis \ + acoustic.relative_f0=false \ timelag.checkpoint=$expdir/timelag/$timelag_eval_checkpoint \ timelag.in_scaler_path=$dump_norm_dir/in_timelag_scaler.joblib \ timelag.out_scaler_path=$dump_norm_dir/out_timelag_scaler.joblib \ @@ -67,9 +42,9 @@ for s in ${testsets[@]}; do acoustic.in_scaler_path=$dump_norm_dir/in_acoustic_scaler.joblib \ acoustic.out_scaler_path=$dump_norm_dir/out_acoustic_scaler.joblib \ acoustic.model_yaml=$expdir/acoustic/model.yaml \ - utt_list=./data/list/$s.list \ - in_dir=data/acoustic/$input/ \ - out_dir=$expdir/synthesis/$s/${acoustic_eval_checkpoint/.pth/}/$input \ + utt_list=target/data/list/$s.list \ + in_dir=target/data/acoustic/$input/ \ + out_dir=$expdir/synthesis_timelag_duration_acoustic/$s/${acoustic_eval_checkpoint/.pth/}/$input \ ground_truth_duration=$ground_truth_duration done -done +done \ No newline at end of file diff --git a/train/scripts/train_acoustic.sh b/train/scripts/train_acoustic.sh new file mode 100644 index 0000000..e5670eb --- /dev/null +++ b/train/scripts/train_acoustic.sh @@ -0,0 +1,33 @@ +if [ -d train/conf/train/acoustic ]; then + ext="--config-dir train/conf/train/acoustic" +else + ext="" +fi + +# if [ ! -z "${pretrained_expdir}" ]; then +# resume_checkpoint=$pretrained_expdir/${acoustic_model}/latest.pth +# else +# resume_checkpoint= +# fi + +if [[ ${acoustic_hydra_optuna_sweeper_args+x} && ! -z $acoustic_hydra_optuna_sweeper_args ]]; then + hydra_opt="-m ${acoustic_hydra_optuna_sweeper_args}" + post_args="mlflow.enabled=true mlflow.experiment=${expname}_${acoustic_model} hydra.sweeper.n_trials=${acoustic_hydra_optuna_sweeper_n_trials}" +else + hydra_opt="" + post_args="" +fi + + +xrun nnsvs-train $ext $hydra_opt \ + model=$acoustic_model train=$acoustic_train data=$acoustic_data \ + data.train_no_dev.in_dir=$dump_norm_dir/$train_set/in_acoustic/ \ + data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_acoustic/ \ + data.dev.in_dir=$dump_norm_dir/$dev_set/in_acoustic/ \ + data.dev.out_dir=$dump_norm_dir/$dev_set/out_acoustic/ \ + +data.in_scaler_path=$dump_norm_dir/in_acoustic_scaler.joblib \ + +data.out_scaler_path=$dump_norm_dir/out_acoustic_scaler.joblib \ + train.out_dir=$expdir/acoustic \ + log_dir=tensorboard/$expname/$acoustic_model \ + $post_args + #train.resume.checkpoint=$resume_checkpoint $post_args diff --git a/train/scripts/train_acoustic_resf0.sh b/train/scripts/train_acoustic_resf0.sh new file mode 100644 index 0000000..4b430d0 --- /dev/null +++ b/train/scripts/train_acoustic_resf0.sh @@ -0,0 +1,35 @@ +if [ -d train/conf/train/acoustic ]; then + ext="--config-dir train/conf/train/acoustic" +else + ext="" +fi + +if [ ! -z "${pretrained_expdir}" ]; then + resume_checkpoint=$pretrained_expdir/${acoustic_model}/latest.pth +else + resume_checkpoint= +fi + +# Hyperparameter search with Hydra + optuna +# mlflow is used to log the results of the hyperparameter search +if [[ ${acoustic_hydra_optuna_sweeper_args+x} && ! -z $acoustic_hydra_optuna_sweeper_args ]]; then + hydra_opt="-m ${acoustic_hydra_optuna_sweeper_args}" + post_args="mlflow.enabled=true mlflow.experiment=${expname}_${acoustic_model} hydra.sweeper.n_trials=${acoustic_hydra_optuna_sweeper_n_trials}" +else + hydra_opt="" + post_args="" +fi + +xrun nnsvs-train-resf0 $ext $hydra_opt \ + model=$acoustic_model train=$acoustic_train data=$acoustic_data \ + data.train_no_dev.in_dir=$dump_norm_dir/$train_set/in_acoustic/ \ + data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_acoustic/ \ + data.dev.in_dir=$dump_norm_dir/$dev_set/in_acoustic/ \ + data.dev.out_dir=$dump_norm_dir/$dev_set/out_acoustic/ \ + +data.in_scaler_path=$dump_norm_dir/in_acoustic_scaler.joblib \ + +data.out_scaler_path=$dump_norm_dir/out_acoustic_scaler.joblib \ + train.out_dir=$expdir/acoustic \ + train.log_dir=tensorboard/$expname/$acoustic_model \ + $post_args \ + ++data.sample_rate=$sample_rate + # train.resume.checkpoint=$resume_checkpoint \ diff --git a/train/scripts/train_duration.sh b/train/scripts/train_duration.sh new file mode 100644 index 0000000..5a62de8 --- /dev/null +++ b/train/scripts/train_duration.sh @@ -0,0 +1,34 @@ +if [ -d train/conf/train ]; then + ext="--config-dir train/conf/train/duration" +else + ext="" +fi + +# if [ ! -z "${pretrained_expdir}" ]; then +# resume_checkpoint=$pretrained_expdir/${duration_model}/latest.pth +# else +# resume_checkpoint= +# fi + +if [[ ${duration_hydra_optuna_sweeper_args+x} && ! -z $duration_hydra_optuna_sweeper_args ]]; then + hydra_opt="-m ${duration_hydra_optuna_sweeper_args}" + post_args="mlflow.enabled=true mlflow.experiment=${expname}_${duration_model} hydra.sweeper.n_trials=${duration_hydra_optuna_sweeper_n_trials}" +else + hydra_opt="" + post_args="" +fi + +xrun nnsvs-train $ext $hydra_opt \ + model=$duration_model train=$duration_train data=$duration_data \ + +data.in_scaler_path=$dump_norm_dir/in_duration_scaler.joblib \ + +data.out_scaler_path=$dump_norm_dir/out_duration_scaler.joblib \ + data.train_no_dev.in_dir=$dump_norm_dir/$train_set/in_duration/ \ + data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_duration/ \ + data.dev.in_dir=$dump_norm_dir/$dev_set/in_duration/ \ + data.dev.out_dir=$dump_norm_dir/$dev_set/out_duration/ \ + data.in_scaler_path=$dump_norm_dir/in_duration_scaler.joblib \ + data.out_scaler_path=$dump_norm_dir/out_duration_scaler.joblib \ + train.out_dir=$expdir/duration \ + log_dir=tensorboard/$expname/$duration_model \ + $post_args + # train.resume.checkpoint=$resume_checkpoint $post_args diff --git a/train/scripts/train_postfilter.sh b/train/scripts/train_postfilter.sh new file mode 100644 index 0000000..c5272a1 --- /dev/null +++ b/train/scripts/train_postfilter.sh @@ -0,0 +1,44 @@ +# NOTE: the script is supposed to be used called from nnsvs recipes. +# Please don't try to run the shell script directory. + +if [ -d train/conf/train/postfilter ]; then + ext="--config-dir train/conf/train/postfilter" +else + ext="" +fi + +if [ ! -z "${pretrained_expdir}" ]; then + resume_checkpoint_g=$pretrained_expdir/${postfilter_model}/latest.pth + if [ -e $pretrained_expdir/${postfilter_model}/latest_D.pth ]; then + resume_checkpoint_d=$pretrained_expdir/${postfilter_model}/latest_D.pth + else + resume_checkpoint_d= + fi +else + resume_checkpoint_g= + resume_checkpoint_d= +fi + +# Hyperparameter search with Hydra + optuna +# mlflow is used to log the results of the hyperparameter search +if [[ ${postfilter_hydra_optuna_sweeper_args+x} && ! -z $postfilter_hydra_optuna_sweeper_args ]]; then + hydra_opt="-m ${postfilter_hydra_optuna_sweeper_args}" + post_args="mlflow.enabled=true mlflow.experiment=${expname}_${postfilter_model} hydra.sweeper.n_trials=${postfilter_hydra_optuna_sweeper_n_trials}" +else + hydra_opt="" + post_args="" +fi + +xrun nnsvs-train-postfilter $ext $hydra_opt \ + model=$postfilter_model train=$postfilter_train data=$postfilter_data \ + data.train_no_dev.in_dir=$expdir/acoustic/norm/$train_set/in_postfilter \ + data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_postfilter \ + data.dev.in_dir=$expdir/acoustic/norm/$dev_set/in_postfilter \ + data.dev.out_dir=$dump_norm_dir/$dev_set/out_postfilter \ + data.in_scaler_path=$expdir/acoustic/norm/in_postfilter_scaler.joblib \ + data.out_scaler_path=$dump_norm_dir/out_postfilter_scaler.joblib \ + data.sample_rate=$sample_rate \ + train.out_dir=$expdir/$postfilter_model \ + log_dir=tensorboard/$expname/$postfilter_model \ + train.resume.netG.checkpoint=$resume_checkpoint_g \ + train.resume.netD.checkpoint=$resume_checkpoint_d $post_args diff --git a/train/scripts/train_timelag.sh b/train/scripts/train_timelag.sh new file mode 100644 index 0000000..31dd8c1 --- /dev/null +++ b/train/scripts/train_timelag.sh @@ -0,0 +1,34 @@ +if [ -d train/conf/train ]; then + ext="--config-dir train/conf/train/timelag" +else + ext="" +fi + +# if [ ! -z "${pretrained_expdir}" ]; then +# resume_checkpoint=$pretrained_expdir/${timelag_model}/latest.pth +# else +# resume_checkpoint= +# fi + +if [[ ${timelag_hydra_optuna_sweeper_args+x} && ! -z $timelag_hydra_optuna_sweeper_args ]]; then + hydra_opt="-m ${timelag_hydra_optuna_sweeper_args}" + post_args="mlflow.enabled=true mlflow.experiment=${expname}_${timelag_model} hydra.sweeper.n_trials=${timelag_hydra_optuna_sweeper_n_trials}" +else + hydra_opt="" + post_args="" +fi + +xrun nnsvs-train $ext $hydra_opt \ + model=$timelag_model train=$timelag_train data=$timelag_data \ + +data.in_scaler_path=$dump_norm_dir/in_timelag_scaler.joblib \ + +data.out_scaler_path=$dump_norm_dir/out_timelag_scaler.joblib \ + data.train_no_dev.in_dir=$dump_norm_dir/$train_set/in_timelag/ \ + data.train_no_dev.out_dir=$dump_norm_dir/$train_set/out_timelag/ \ + data.dev.in_dir=$dump_norm_dir/$dev_set/in_timelag/ \ + data.dev.out_dir=$dump_norm_dir/$dev_set/out_timelag/ \ + data.in_scaler_path=$dump_norm_dir/in_timelag_scaler.joblib \ + data.out_scaler_path=$dump_norm_dir/out_timelag_scaler.joblib \ + train.out_dir=$expdir/timelag \ + log_dir=tensorboard/$expname/$timelag_model \ + $post_args + # train.resume.checkpoint=$resume_checkpoint $post_args diff --git a/train/scripts/yaml_parser.sh b/train/scripts/yaml_parser.sh new file mode 100644 index 0000000..0e0f064 --- /dev/null +++ b/train/scripts/yaml_parser.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +parse_yaml() { + local prefix=$2 + local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034') + sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ + -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | + awk -F$fs '{ + indent = length($1)/2; + vname[indent] = $2; + for (i in vname) {if (i > indent) {delete vname[i]}} + vn=""; for (i=0; i 0) { + printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3); + } else { + printf("%s%s%s=\n", "'$prefix'",vn, $2); + } + }' +} diff --git a/train/stage0/segment_lab.py b/train/stage0/segment_lab.py index 2302824..4cca260 100644 --- a/train/stage0/segment_lab.py +++ b/train/stage0/segment_lab.py @@ -198,6 +198,69 @@ def split_full_label_long(full_label: HTSFullLabel) -> list: del result[-1] return result +def split_mono_label_middle_ext(label: Label, frequency) -> List[Label]: + """ + モノラベルを分割する。分割後の複数のLabelからなるリストを返す。 + pauが10回出現するたびに分割する。 + """ + if frequency <= 0: + raise ValueError('Argument "frequency" must be positive integer.') + + new_label = Label() + result = [new_label] + new_label.append(label[0]) + + # pauが出現する回数をカウントする + counter = 0 + for phoneme in label[1:-1]: + if phoneme.symbol == 'pau': + counter += 1 + # pauが出現してfrequency回目のとき + if counter == frequency: + new_label = Label() + result.append(new_label) + # 回数をリセット + counter = 0 + new_label.append(phoneme) + # 最後の音素を追加 + new_label.append(label[-1]) + return result + + +def split_full_label_middle_ext(full_label: HTSFullLabel, frequency: int) -> List[HTSFullLabel]: + """ + モノラベルを分割する。分割後の複数のLabelからなるリストを返す。 + pauが10回出現するたびに分割する。 + """ + if frequency <= 0: + raise ValueError('Argument "frequency" must be positive integer.') + new_label = HTSFullLabel() + result = [new_label] + + new_label.append(full_label[0]) + # pauが出現する回数をカウントする + counter = 0 + for oneline in full_label[1:-1]: + if oneline.phoneme.identity == 'pau': + counter += 1 + if counter == frequency: + new_label = HTSFullLabel() + result.append(new_label) + counter = 0 + new_label.append(oneline) + # 最後の行を追加 + new_label.append(full_label[-1]) + # 休符だけの後奏部分があった場合は直前のラベルにまとめる。 + + # for line in result: + # if line.phoneme.identity == 'sil': + + + if len(result) >= 2 and all_phonemes_are_rest(result[-1]): + result[-2] += result[-1] + del result[-1] + return result + def split_label(label: Union[Label, HTSFullLabel], mode: str, middle_frequency: int ) -> List[Union[Label, HTSFullLabel]]: @@ -205,14 +268,16 @@ def split_label(label: Union[Label, HTSFullLabel], mode: str, middle_frequency: ラベルを分割してリストにして返す。フルラベルとモノラベルを自動で使い分ける。 mode: 'short' か 'long' のいずれか """ - if mode not in ('short', 'middle', 'long'): - raise ValueError('Argument "mode" must be "short" or "long".') + if mode not in ('short', 'middle', 'long', 'middle_ext'): + raise ValueError('Argument "mode" must be "short" or "middle" or "middle_ext" or "long".') if isinstance(label, Label): if mode == 'short': result = split_mono_label_short(label) elif mode == 'middle': result = split_mono_label_middle(label, middle_frequency) + elif mode == 'middle_ext': + result = split_mono_label_middle_ext(label, middle_frequency) elif mode == 'long': result = split_mono_label_long(label) elif isinstance(label, HTSFullLabel): @@ -220,6 +285,8 @@ def split_label(label: Union[Label, HTSFullLabel], mode: str, middle_frequency: result = split_full_label_short(label) elif mode == 'middle': result = split_full_label_middle(label, middle_frequency) + elif mode == 'middle_ext': + result = split_full_label_middle_ext(label, middle_frequency) elif mode == 'long': result = split_full_label_long(label) return result From a4d362a94b8c4d0267e94a5953c8bb73850ad80e Mon Sep 17 00:00:00 2001 From: Cardroid Date: Sun, 16 Oct 2022 19:44:39 +0900 Subject: [PATCH 2/2] Chore: Translate log messages into Korean --- train/stage0/assert_wav_is_longer_than_lab.py | 8 +- train/stage0/check_lab.py | 8 +- train/stage0/check_lab_after_segmentation.py | 6 +- train/stage0/check_wav.py | 14 ++-- .../compare_mono_align_and_mono_score.py | 40 +++++----- train/stage0/copy_files.py | 4 +- train/stage0/copy_mono_time_to_full.py | 4 +- train/stage0/finalize_lab.py | 18 ++--- train/stage0/force_ust_end_with_rest.py | 4 +- train/stage0/full2mono.py | 2 +- train/stage0/generate_train_list.py | 6 +- train/stage0/merge_rest_full_score.py | 2 +- train/stage0/merge_rest_mono_align.py | 2 +- train/stage0/round_lab.py | 4 +- train/stage0/segment_lab.py | 75 +------------------ train/stage0/ust2lab.py | 14 ++-- 16 files changed, 72 insertions(+), 139 deletions(-) diff --git a/train/stage0/assert_wav_is_longer_than_lab.py b/train/stage0/assert_wav_is_longer_than_lab.py index 9ef9ff6..8e228e6 100644 --- a/train/stage0/assert_wav_is_longer_than_lab.py +++ b/train/stage0/assert_wav_is_longer_than_lab.py @@ -44,7 +44,7 @@ def compare_wav_files_and_lab_files(wav_dir_in, lab_dir_in): lab_files = natsorted(glob(f'{lab_dir_in}/*.lab')) for path_wav, path_lab in zip(tqdm(wav_files), lab_files): if not wav_is_longer_than_lab(path_wav, path_lab): - warning_message = f'WAV is shorter than LAB or score. ({path_wav}) ({path_lab})' + warning_message = f'WAV가 LAB나 악보보다 짧습니다. ({path_wav}) ({path_lab})' warning(warning_message) @@ -52,7 +52,7 @@ def main(path_config_yaml): """ configを読み取ってフォルダを指定し、全体の処理を実行する。 """ - print('Asserting WAV files are longer than full_align_round label files') + print('WAV 파일이 full_align_round 레이블 파일보다 깁니다.') with open(path_config_yaml, 'r') as fy: config = yaml.load(fy, Loader=yaml.FullLoader) out_dir = config['out_dir'] @@ -62,9 +62,9 @@ def main(path_config_yaml): full_align_dir_in = join(out_dir, 'full_align_round') full_score_dir_in = join(out_dir, 'full_score_round') # 点検する - print('Comparing length of LAB and WAV') + print('LAB 길이와 WAV 길이 비교 중...') compare_wav_files_and_lab_files(wav_dir_in, full_align_dir_in) - print('Comparing length of score and WAV') + print('악보 길이와 WAV 길이 비교 중...') compare_wav_files_and_lab_files(wav_dir_in, full_score_dir_in) diff --git a/train/stage0/check_lab.py b/train/stage0/check_lab.py index 59a8aff..87a5823 100644 --- a/train/stage0/check_lab.py +++ b/train/stage0/check_lab.py @@ -28,7 +28,7 @@ def check_lab_files(lab_dir, threshold=0): if not label.is_valid(threshold): invalid_lab_files.append(path_mono) if len(invalid_lab_files) != threshold: - print('LABファイルの発声時刻に不具合があります。以下のファイルを点検してください。') + print('LAB파일의 발성 시각에 오류가 있습니다. 아래의 파일을 점검해주세요.') pprint(invalid_lab_files) raise Exception @@ -49,11 +49,11 @@ def repair_too_short_phoneme(lab_dir, threshold=5) -> None: continue # 短い音素が連続しても不具合が起こらないように逆向きにループする if label[0].duration < threshold_100ns: # pylint: disable=no-member - raise ValueError(f'最初の音素が短いです。修正できません。: {label[0]} ({path_mono})') + raise ValueError(f'첫 음소가 짧습니다. 수정할 수 없습니다. : {label[0]} ({path_mono})') for i, phoneme in enumerate(reversed(label)): # 発声時間が閾値より短い場合 if phoneme.duration < threshold_100ns: - logging.info('短い音素を修正します。: %s (%s)', phoneme, path_mono) + logging.info('짧은 음소를 수정합니다. : %s (%s)', phoneme, path_mono) # 閾値との差分を計算する。この分だけずらす。 delta_t = threshold_100ns - phoneme.duration # 対象の音素の開始時刻をずらして、発生時間を伸ばす。 @@ -78,7 +78,7 @@ def main(path_config_yaml): out_dir = expanduser(join(config_dir, config['out_dir'])).strip('"') lab_dir = join(out_dir, 'lab') # LABファイルを点検する - print(f'Checking LAB files in {lab_dir}') + print(f'{lab_dir} 안에서 LAB 파일을 확인하는 중...') check_lab_files(lab_dir) repair_too_short_phoneme(lab_dir) diff --git a/train/stage0/check_lab_after_segmentation.py b/train/stage0/check_lab_after_segmentation.py index bcc3a55..bef61a6 100644 --- a/train/stage0/check_lab_after_segmentation.py +++ b/train/stage0/check_lab_after_segmentation.py @@ -23,10 +23,10 @@ def check_lab_files(lab_dir, threshold=0): label = up.label.load(path_mono) if not label.is_valid(threshold): invalid_lab_files.append(path_mono) - logging.error('LABファイルの発声時刻に不具合があります。(%s)', path_mono) + logging.error('LAB파일의 발성 시각에 오류가 있습니다. (%s)', path_mono) print() if len(invalid_lab_files) != 0: - message = ' \n'.join(['LABファイルの発声時刻に不具合があります。以下のファイルを点検してください。'] + invalid_lab_files) + message = ' \n'.join(['LAB파일의 발성 시각에 오류가 있습니다. 아래의 파일을 점검해주세요.'] + invalid_lab_files) # logging.exception(message) raise Exception(message) @@ -45,7 +45,7 @@ def main(path_config_yaml): lab_dir = join(out_dir, 'lab') # LABファイルを点検する for lab_dir in [f'{out_dir}/full_align_round_seg', f'{out_dir}/mono_align_round_seg']: - print(f'Checking LAB files in {lab_dir}') + print(f'{lab_dir} 안에서 LAB 파일을 확인하는 중...') check_lab_files(lab_dir) diff --git a/train/stage0/check_wav.py b/train/stage0/check_wav.py index 9f962cf..d30ff37 100644 --- a/train/stage0/check_wav.py +++ b/train/stage0/check_wav.py @@ -37,7 +37,7 @@ def all_wav_files_are_mono(wav_dir_in) -> bool: # モノラルではないファイルが含まれるとき for path_wav, channels in zip(wav_files, all_channnels): if not channels == 1: - logging.error('モノラル音声ではありません。: %s', path_wav) + logging.error('Mono 음성이 아닙니다. : %s', path_wav) return False @@ -57,7 +57,7 @@ def all_wav_files_are_same_sampling_rate(wav_dir_in) -> bool: mode_frame_rate = mode(all_frame_rates) for path_wav, rate in zip(wav_files, all_frame_rates): if rate != mode_frame_rate: - logging.error('サンプリングレートが他のファイルと一致しません。: %s', path_wav) + logging.error('샘플레이트가 다른 파일과 일치하지 않습니다. : %s', path_wav) return False @@ -77,7 +77,7 @@ def all_wav_files_are_same_bit_depth(wav_dir_in) -> bool: mode_bit_depth = mode(all_sample_widths) for path_wav, width in zip(wav_files, all_sample_widths): if width != mode_bit_depth: - logging.error('ビット深度が他のファイルと一致しません。: %s', path_wav) + logging.error('비트 심도가 다른 파일과 일치하지 않습니다. : %s', path_wav) return False @@ -85,7 +85,7 @@ def main(path_config_yaml): """ 全体処理を実行する """ - print('Checking WAV files') + print('WAV 파일들을 확인하는 중...') with open(path_config_yaml, 'r') as fy: config = yaml.safe_load(fy) @@ -95,11 +95,11 @@ def main(path_config_yaml): # 全ファイルがモノラルか確認する if not all_wav_files_are_mono(wav_dir_in): - raise ValueError('モノラルではない音声ファイルがあります。ログを確認して修正して下さい。') + raise ValueError('Mono가 아닌 음성 파일이 있습니다. 로그를 확인해서 수정해주세요.') if not all_wav_files_are_same_sampling_rate(wav_dir_in): - raise ValueError('サンプリングレートが異なる音声ファイルがあります。ログを確認して修正して下さい。') + raise ValueError('샘플레이트가 다른 음성 파일이 있습니다. 로그를 확인해서 수정해주세요.') if not all_wav_files_are_same_bit_depth(wav_dir_in): - raise ValueError('ビット深度が異なる音声ファイルがあります。ログを確認して修正して下さい。') + raise ValueError('비트 심도가 다른 음성 파일이 있습니다. 로그를 확인해서 수정해주세요.') if __name__ == '__main__': diff --git a/train/stage0/compare_mono_align_and_mono_score.py b/train/stage0/compare_mono_align_and_mono_score.py index be39029..2eab342 100644 --- a/train/stage0/compare_mono_align_and_mono_score.py +++ b/train/stage0/compare_mono_align_and_mono_score.py @@ -34,17 +34,17 @@ def phoneme_is_ok(path_mono_align_lab, path_mono_score_lab): for mono_align_phoneme, mono_score_phoneme in zip(mono_align_label, mono_score_label): if mono_align_phoneme.symbol != mono_score_phoneme.symbol: error_message = '\n'.join([ - f'DB同梱のラベルと楽譜から生成したラベルの音素記号が一致しません。({basename(path_mono_align_lab)})', - f' DB同梱のラベル : {mono_align_phoneme}\t({path_mono_align_lab})', - f' 楽譜からのラベル: {mono_score_phoneme}\t({path_mono_score_lab})' + f'DB 동봉의 라벨과 악보에서 생성된 라벨의 음소기호가 일치하지 않습니다. ({basename(path_mono_align_lab)})', + f' DB동봉의 라벨 : {mono_align_phoneme}\t({path_mono_align_lab})', + f' 악보의 라벨 : {mono_score_phoneme}\t({path_mono_score_lab})' ]) logging.error(error_message) return False if len(mono_align_label) != len(mono_score_label): error_message = '\n'.join([ - f'DB同梱のラベルと楽譜から生成したラベルの音素数が一致しません。({basename(path_mono_align_lab)})', - f' DB同梱ラベルの音素数 : {len(mono_align_label)}\t({path_mono_align_lab})', - f' 楽譜からのラベルの音素数: {len(mono_score_label)}\t({path_mono_score_lab})' + f'DB동봉의 라벨과 악보에서 생성된 라벨의 음소 갯수가 일치하지 않습니다. ({basename(path_mono_align_lab)})', + f' DB동봉 라벨의 음소 갯수 : {len(mono_align_label)}\t({path_mono_align_lab})', + f' 악보의 라벨의 음소 갯수 : {len(mono_score_label)}\t({path_mono_score_lab})' ]) logging.error(error_message) return False @@ -59,7 +59,7 @@ def force_start_with_zero(path_mono_align_lab): mono_align_label = up.label.load(path_mono_align_lab) if mono_align_label[0].start != 0: warning_message = \ - 'DB同梱のラベルの最初の音素開始時刻が0ではありません。0に修正して処理を続行します。({})'.format( + 'DB동봉의 라벨의 첫 음소 개시 시각이 0이 아닙니다. 0으로 수정해서 처리를 진행해주세요. ({})'.format( basename(path_mono_align_lab)) logging.warning(warning_message) mono_align_label[0].start = 0 @@ -123,7 +123,7 @@ def offet_is_ok(path_mono_align_lab, duration_difference = mono_align_label[0].duration - mono_score_label[0].duration if not lower_threshold < duration_difference < upper_threshold: warning_message = \ - 'DB同梱のラベルの前奏が楽譜より {} ミリ秒以上早いか、{} ミリ秒以上長いです。({} ms) ({})'.format( + 'DB동봉의 라벨의 전주가 악보보다 {}ms 이상 빠르거나, {}ms 이상 깁니다. ({} ms) ({})'.format( round(lower_threshold / 10000), round(upper_threshold / 10000), round(duration_difference / 10000), @@ -167,16 +167,16 @@ def vowel_durations_are_ok(path_mono_align_lab, continue if phoneme_align.symbol in vowels and not lower_threshold < duration_difference < upper_threshold: warning_message = '\n'.join([ - 'DB同梱のラベルが楽譜から生成したラベルの母音より {} ミリ秒以上短いか、{} ミリ秒以上長いです。平均値 ± {}σ の範囲外です。({} ms) ({})'.format( + 'DB동봉의 라벨이 악보에서 생성된 라벨의 모음보다 {} ms 이상 짧거나, {} ms 이상 깁니다. 평균치 ± {}σ 의 범위 밖 입니다. ({} ms) ({})'.format( round(lower_threshold / 10000), round(upper_threshold / 10000), k, round(duration_difference / 10000), basename(path_mono_align_lab)), - f' 直前の音素: {mono_align_label[i-1].symbol}', - f' DB同梱のラベル : {phoneme_align}\t({phoneme_align.duration / 10000} ms)\t{path_mono_align_lab}', - f' 楽譜からのラベル: {phoneme_score}\t({phoneme_score.duration / 10000} ms)\t{path_mono_score_lab}', - f' 直後の音素: {mono_align_label[i+1].symbol}' + f' 직전 음소: {mono_align_label[i-1].symbol}', + f' DB동봉의 라벨 : {phoneme_align}\t({phoneme_align.duration / 10000} ms)\t{path_mono_align_lab}', + f' 악보의 라벨 : {phoneme_score}\t({phoneme_score.duration / 10000} ms)\t{path_mono_score_lab}', + f' 직전 음소: {mono_align_label[i+1].symbol}' ]) logging.warning(warning_message) ok_flag = False @@ -195,34 +195,34 @@ def main(path_config_yaml): duration_check_mode = config['stage0']['vowel_duration_check'] # mono_align_labの最初の音素が時刻0から始まるようにする。 - print('Overwriting mono-align-LAB so that it starts with zero.') + print('mono-align-LAB의 시작을 0으로 덮어씌웁니다.') for path_mono_align in tqdm(mono_align_files): force_start_with_zero(path_mono_align) # 音素記号や最初の休符の長さが一致するか確認する。 - print('Comparing mono-align-LAB and mono-score-LAB') + print('mono-align-LAB과 mono-score-LAB을 비교 중...') invalid_basenames = [] for path_mono_align, path_mono_score in zip(tqdm(mono_align_files), mono_score_files): if not phoneme_is_ok(path_mono_align, path_mono_score): invalid_basenames.append(basename(path_mono_align)) # 母音のdurationの統計値を取得 - print('Calculating median, mean and stdev of duration difference') + print('지속 시간 차이의 중위수, 평균 및 stdev 계산 중...') _, mean_100ns, stdev_100ns = calc_median_mean_pstdev( mono_align_files, mono_score_files) # 前奏の長さを点検 - print('Checking first pau duration') + print('첫 pau의 길이를 확인 중...') for path_mono_align, path_mono_score in zip(tqdm(mono_align_files), mono_score_files): if not offet_is_ok(path_mono_align, path_mono_score, mean_100ns, stdev_100ns, mode=duration_check_mode): invalid_basenames.append(basename(path_mono_align)) if len(invalid_basenames) > 0: - raise Exception('DBから生成したラベルと楽譜から生成したラベルに不整合があります。' - 'ログファイルを参照して修正して下さい。') + raise Exception('DB에서 생성된 라벨과 악보에서 생성된 라벨에 부정합이 있습니다.' + '로그 파일을 참조하여 수정해주세요.') # 音素長をチェックする。 - print('Comparing mono-align-LAB durations and mono-score-LAB durations') + print('mono-align-LAB 길이와 mono-score-LAB 길이를 비교 중...') for path_mono_align, path_mono_score in zip(tqdm(mono_align_files), mono_score_files): vowel_durations_are_ok(path_mono_align, path_mono_score, mean_100ns, stdev_100ns, mode=duration_check_mode) diff --git a/train/stage0/copy_files.py b/train/stage0/copy_files.py index 8f16001..80d0664 100644 --- a/train/stage0/copy_files.py +++ b/train/stage0/copy_files.py @@ -22,7 +22,7 @@ def copy_target_files(db_root, out_dir, ext): target_files = glob(f'{db_root}/**/*.{ext}', recursive=True) if len(target_files) != 0: makedirs(join(out_dir, ext), exist_ok=True) - print(f'Copying {ext} files') + print(f'{ext} 파일들 복사 중...') for path in tqdm(target_files): shutil.copy2(path, join(out_dir, ext)) @@ -50,7 +50,7 @@ def main(path_config_yaml): make_gitignore(out_dir) # 移動元と移動先を標準出力 - print(f'Copy files from "{db_root}" to "{out_dir}"') + print(f'"{db_root}"에서 "{out_dir}"으로 파일 복사 중...') # ファイルをコピー target_extensions = ('wav', 'xml', 'musicxml', 'ust', 'ini', 'lab') for ext in target_extensions: diff --git a/train/stage0/copy_mono_time_to_full.py b/train/stage0/copy_mono_time_to_full.py index b8a0b38..dd53faa 100644 --- a/train/stage0/copy_mono_time_to_full.py +++ b/train/stage0/copy_mono_time_to_full.py @@ -56,7 +56,7 @@ def main(path_config_yaml): # コンテキストのもとになるフルラベルファイル一覧 full_score_files = sorted(glob(f'{out_dir}/full_score_round/*.lab')) - print('Copying times of mono-LAB (mono_align_round) to full-LAB (full_score_round) and save into full_align_round') + print('mono-LAB(mono_align_round) 시간을 full-LAB(full_score_round)로 복사 후, full_align_round에 저장 중...') for path_mono_align, path_full_score in zip(tqdm(mono_align_files), full_score_files): path_full_align = f'{full_align_dir}/{basename(path_full_score)}' copy_mono_align_time_to_full(path_mono_align, path_full_score, path_full_align) @@ -65,6 +65,6 @@ def main(path_config_yaml): if __name__ == '__main__': print('----------------------------------------------------------------------------------') print('[ Stage 0 ] [ Step 3a ]') - print('Copy mono_align phonemes to full_score and save in full_align.') + print('mono_align 음소를 full_score로 복사하고 full_align으로 저장합니다.') print('----------------------------------------------------------------------------------') main(argv[1]) diff --git a/train/stage0/finalize_lab.py b/train/stage0/finalize_lab.py index 9c9bd33..3e1dd2f 100644 --- a/train/stage0/finalize_lab.py +++ b/train/stage0/finalize_lab.py @@ -55,12 +55,12 @@ def prepare_data_for_timelag_models( makedirs(label_phone_score_dir, exist_ok=True) # 手動設定したフルラベルファイルを複製 - print('Copying full_align_round_seg files') + print('full_align_round_seg 파일 복사 중...') for path_lab in tqdm(full_align_round_seg_files): copy(path_lab, f'{label_phone_align_dir}/{basename(path_lab)}') # 楽譜から生成したフルラベルファイルを複製 - print('Copying full_score_round_seg files') + print('full_score_round_seg 파일 복사 중...') for path_lab in tqdm(full_score_round_seg_files): copy(path_lab, f'{label_phone_score_dir}/{basename(path_lab)}') @@ -73,7 +73,7 @@ def prepare_data_for_duration_models(full_align_round_seg_files: list, duration_ makedirs(label_phone_align_dir, exist_ok=True) # 手動設定したフルラベルファイルを複製 - print('Copying full_align_round_seg files') + print('full_align_round_seg 파일 복사 중...') for path_lab_in in tqdm(full_align_round_seg_files): path_lab_out = f'{label_phone_align_dir}/{basename(path_lab_in)}' copy(path_lab_in, path_lab_out) @@ -117,7 +117,7 @@ def prepare_data_for_acoustic_models(full_align_round_seg_files: list, makedirs(label_phone_score_dir, exist_ok=True) # wavファイルを分割して保存する - print('Split wav files') + print('wav 파일들 분리 중...') for path_wav in tqdm(wav_files): songname = splitext(basename(path_wav))[0] corresponding_full_align_round_seg_files = [ @@ -126,14 +126,14 @@ def prepare_data_for_acoustic_models(full_align_round_seg_files: list, segment_wav(path_wav, wav_dir, corresponding_full_align_round_seg_files) # 手動設定したフルラベルファイルを複製 - print('Copying full_align_round_seg files') + print('full_align_round_seg 파일 복사 중...') for path_lab_in in tqdm(full_align_round_seg_files): path_lab_out = f'{label_phone_align_dir}/{basename(path_lab_in)}' copy(path_lab_in, path_lab_out) lab_fix_offset(path_lab_out) # 楽譜から生成したフルラベルファイルを複製 - print('Copying full_score_round_seg files') + print('full_score_round_seg 파일 복사 중...') for path_lab_in in tqdm(full_score_round_seg_files): path_lab_out = f'{label_phone_score_dir}/{basename(path_lab_in)}' copy(path_lab_in, path_lab_out) @@ -153,20 +153,20 @@ def main(path_config_yaml): wav_files = natsorted(glob(f'{out_dir}/wav/*.wav', recursive=True)) # フルラベルをtimelag用のフォルダに保存する。 - print('Preparing data for time-lag models') + print('지연 시간 모델에 대한 데이터 준비 중...') timelag_dir = f'{out_dir}/timelag' prepare_data_for_timelag_models(full_align_round_seg_files, full_score_round_seg_files, timelag_dir) # フルラベルのオフセット修正をして、duration用のフォルダに保存する。 - print('Preparing data for acoustic models') + print('음향 모델에 대한 데이터 준비 중...') duration_dir = f'{out_dir}/duration' prepare_data_for_duration_models(full_align_round_seg_files, duration_dir) # フルラベルのオフセット修正をして、acoustic用のフォルダに保存する。 # wavファイルをlabファイルのセグメントに合わせて切断 # wavファイルの前後にどのくらい余白を設けるか - print('Preparing data for acoustic models') + print('음향 모델에 대한 데이터 준비 중...') acoustic_dir = f'{out_dir}/acoustic' prepare_data_for_acoustic_models(full_align_round_seg_files, full_score_round_seg_files, diff --git a/train/stage0/force_ust_end_with_rest.py b/train/stage0/force_ust_end_with_rest.py index 852bb7a..2995cb0 100644 --- a/train/stage0/force_ust_end_with_rest.py +++ b/train/stage0/force_ust_end_with_rest.py @@ -21,7 +21,7 @@ def force_ust_files_end_with_rest(ust_dir): for path_ust in tqdm(ust_files): ust = up.ust.load(path_ust) if ust.notes[-1].lyric != 'R': - info_message = f'USTの末尾に休符がありません。({path_ust})' + info_message = f'UST의 끝에 쉼표가 없습니다. ({path_ust})' logging.info(info_message) ust.make_finalnote_R() ust.write(path_ust) @@ -38,7 +38,7 @@ def main(path_config_yaml): out_dir = config['out_dir'].strip('"') ust_dir = join(out_dir, 'ust') # oto2kabの仕様に合わせて、USTが休符で終わるようにする。 - print('Overwriting UST file so that it end with rest note.') + print('UST 파일이 쉼표로 끝나도록 덮어씌우는 중...') force_ust_files_end_with_rest(ust_dir) diff --git a/train/stage0/full2mono.py b/train/stage0/full2mono.py index 7f88609..4c53f43 100644 --- a/train/stage0/full2mono.py +++ b/train/stage0/full2mono.py @@ -36,7 +36,7 @@ def main(path_config_yaml): full_score_dir = join(out_dir, 'full_score_round') mono_score_dir = join(out_dir, 'mono_score_round') - print(f'Copying full-score-LAB an mono-score-LAB into {mono_score_dir}') + print(f'full-score-LAB 및 mono-score-LAB을 {mono_score_dir}에 복사 중...') full_files_to_mono_files(full_score_dir, mono_score_dir) diff --git a/train/stage0/generate_train_list.py b/train/stage0/generate_train_list.py index efab5d1..7138d4e 100644 --- a/train/stage0/generate_train_list.py +++ b/train/stage0/generate_train_list.py @@ -32,7 +32,7 @@ def generate_train_list(out_dir, interval: Union[int, None] = None): utt_list = natsorted([splitext(basename(path))[0] for path in utt_list]) len_utt_list = len(utt_list) if len_utt_list == 0: - raise Exception(f'There are no wav files in "{join(out_dir)}/acoustic/wav".') + raise Exception(f'"{join(out_dir)}/acoustic/wav"에 wav 파일들이 없습니다.') if interval is None: for i in (23, 19, 17, 13, 11): @@ -44,10 +44,10 @@ def generate_train_list(out_dir, interval: Union[int, None] = None): # 評価用が5分の1より多いと困るので elif interval <= 5: - raise ValueError('Argument "interval" must be larger than 5.') + raise ValueError('인수 "interval"은 5보다 커야합니다.') makedirs(join(out_dir, 'list'), exist_ok=True) - print(f'generate_train_list.py: interval = {interval}') + print(f'generate_train_list.py: 간격 = {interval}') # 各種曲名リストを作る eval_list = [songname for idx, songname in enumerate(utt_list) if idx % interval == 0] diff --git a/train/stage0/merge_rest_full_score.py b/train/stage0/merge_rest_full_score.py index 77d9a73..bcfcc4a 100644 --- a/train/stage0/merge_rest_full_score.py +++ b/train/stage0/merge_rest_full_score.py @@ -141,7 +141,7 @@ def main(path_config_yaml): # フルラベルを処理する。 lab_files = glob(f'{out_dir}/full_score/*.lab') - print('Merging rests of full-LAB files') + print('full-LAB 파일의 무음부 병합 중...') for path_full in tqdm(lab_files): song = up.hts.load(path_full).song # 休符を結合してもとのフルラベルを上書き diff --git a/train/stage0/merge_rest_mono_align.py b/train/stage0/merge_rest_mono_align.py index 356bf24..b083dbf 100644 --- a/train/stage0/merge_rest_mono_align.py +++ b/train/stage0/merge_rest_mono_align.py @@ -53,7 +53,7 @@ def main(path_config_yaml): config = yaml.load(fy, Loader=yaml.FullLoader) out_dir = config['out_dir'] mono_lab_dir = join(out_dir, 'lab') - print(f'Merging rests of mono-LAB files in {mono_lab_dir}') + print(f'{mono_lab_dir}에서 mono-LAB 파일의 무음부 병합 중...') merge_rests_mono_labfiles(mono_lab_dir) diff --git a/train/stage0/round_lab.py b/train/stage0/round_lab.py index 9042099..37ed6a0 100644 --- a/train/stage0/round_lab.py +++ b/train/stage0/round_lab.py @@ -45,13 +45,13 @@ def main(path_config_yaml): # DBに同梱されていたLABファイルを丸める lab_dir_in = join(out_dir, 'lab') lab_dir_out = join(out_dir, 'mono_align_round') - print(f'Rounding mono-LAB files in {lab_dir_in}') + print(f'{lab_dir_in}에서 mono-LAB 파일들 반올림 중...') round_lab_files(lab_dir_in, lab_dir_out, step_size=step_size) # 楽譜からつくったフルラベルを丸める lab_dir_in = join(out_dir, 'full_score') lab_dir_out = join(out_dir, 'full_score_round') - print(f'Rounding full-LAB files in {lab_dir_in}') + print(f'{lab_dir_in}에서 full-LAB 파일들 반올림 중...') round_lab_files(lab_dir_in, lab_dir_out, step_size=step_size) diff --git a/train/stage0/segment_lab.py b/train/stage0/segment_lab.py index 4cca260..b7df60f 100644 --- a/train/stage0/segment_lab.py +++ b/train/stage0/segment_lab.py @@ -74,7 +74,7 @@ def split_mono_label_middle(label: Label, frequency) -> List[Label]: pauが10回出現するたびに分割する。 """ if frequency <= 0: - raise ValueError('Argument "frequency" must be positive integer.') + raise ValueError('인수 "frequency"는 양의 정수여야 합니다.') new_label = Label() result = [new_label] @@ -145,7 +145,7 @@ def split_full_label_middle(full_label: HTSFullLabel, frequency: int) -> List[HT pauが10回出現するたびに分割する。 """ if frequency <= 0: - raise ValueError('Argument "frequency" must be positive integer.') + raise ValueError('인수 "frequency"는 양의 정수여야 합니다.') new_label = HTSFullLabel() result = [new_label] @@ -198,69 +198,6 @@ def split_full_label_long(full_label: HTSFullLabel) -> list: del result[-1] return result -def split_mono_label_middle_ext(label: Label, frequency) -> List[Label]: - """ - モノラベルを分割する。分割後の複数のLabelからなるリストを返す。 - pauが10回出現するたびに分割する。 - """ - if frequency <= 0: - raise ValueError('Argument "frequency" must be positive integer.') - - new_label = Label() - result = [new_label] - new_label.append(label[0]) - - # pauが出現する回数をカウントする - counter = 0 - for phoneme in label[1:-1]: - if phoneme.symbol == 'pau': - counter += 1 - # pauが出現してfrequency回目のとき - if counter == frequency: - new_label = Label() - result.append(new_label) - # 回数をリセット - counter = 0 - new_label.append(phoneme) - # 最後の音素を追加 - new_label.append(label[-1]) - return result - - -def split_full_label_middle_ext(full_label: HTSFullLabel, frequency: int) -> List[HTSFullLabel]: - """ - モノラベルを分割する。分割後の複数のLabelからなるリストを返す。 - pauが10回出現するたびに分割する。 - """ - if frequency <= 0: - raise ValueError('Argument "frequency" must be positive integer.') - new_label = HTSFullLabel() - result = [new_label] - - new_label.append(full_label[0]) - # pauが出現する回数をカウントする - counter = 0 - for oneline in full_label[1:-1]: - if oneline.phoneme.identity == 'pau': - counter += 1 - if counter == frequency: - new_label = HTSFullLabel() - result.append(new_label) - counter = 0 - new_label.append(oneline) - # 最後の行を追加 - new_label.append(full_label[-1]) - # 休符だけの後奏部分があった場合は直前のラベルにまとめる。 - - # for line in result: - # if line.phoneme.identity == 'sil': - - - if len(result) >= 2 and all_phonemes_are_rest(result[-1]): - result[-2] += result[-1] - del result[-1] - return result - def split_label(label: Union[Label, HTSFullLabel], mode: str, middle_frequency: int ) -> List[Union[Label, HTSFullLabel]]: @@ -268,16 +205,14 @@ def split_label(label: Union[Label, HTSFullLabel], mode: str, middle_frequency: ラベルを分割してリストにして返す。フルラベルとモノラベルを自動で使い分ける。 mode: 'short' か 'long' のいずれか """ - if mode not in ('short', 'middle', 'long', 'middle_ext'): - raise ValueError('Argument "mode" must be "short" or "middle" or "middle_ext" or "long".') + if mode not in ('short', 'middle', 'long'): + raise ValueError('인수 "mode"는 "short", "middle" 또는 "long"이어야 합니다.') if isinstance(label, Label): if mode == 'short': result = split_mono_label_short(label) elif mode == 'middle': result = split_mono_label_middle(label, middle_frequency) - elif mode == 'middle_ext': - result = split_mono_label_middle_ext(label, middle_frequency) elif mode == 'long': result = split_mono_label_long(label) elif isinstance(label, HTSFullLabel): @@ -285,8 +220,6 @@ def split_label(label: Union[Label, HTSFullLabel], mode: str, middle_frequency: result = split_full_label_short(label) elif mode == 'middle': result = split_full_label_middle(label, middle_frequency) - elif mode == 'middle_ext': - result = split_full_label_middle_ext(label, middle_frequency) elif mode == 'long': result = split_full_label_long(label) return result diff --git a/train/stage0/ust2lab.py b/train/stage0/ust2lab.py index 7f0e517..754e6d2 100644 --- a/train/stage0/ust2lab.py +++ b/train/stage0/ust2lab.py @@ -30,7 +30,7 @@ def ust2full(path_ust_dir_in, path_full_dir_out, path_table, exclude_songs): for path_ust in tqdm(ust_files): songname = splitext(basename(path_ust))[0] if songname in exclude_songs: - print(f'Skip excluded song: {songname}') + print(f'제외된 노래 건너 뜀: {songname}') else: path_full = f'{path_full_dir_out}/{songname}.lab' ust2hts(path_ust, path_full, path_table, strict_sinsy_style=False) @@ -46,7 +46,7 @@ def compare_number_of_ustfiles_and_labfiles(ust_dir, mono_align_dir): mono_files = natsorted(glob(f'{mono_align_dir}/*.lab')) # 個数が合うか点検 assert len(ust_files) == len(mono_files), \ - f'USTファイル数({len(ust_files)})とLABファイル数({len(mono_files)})が一致しません' + f'UST 파일 개수({len(ust_files)})와 LAB 파일 개수({len(mono_files)})가 일치하지 않습니다.' def compare_name_of_ustfiles_and_labfiles(ust_dir, mono_align_dir): @@ -68,10 +68,10 @@ def compare_name_of_ustfiles_and_labfiles(ust_dir, mono_align_dir): # すべての名前が一致したか確認 if len(songnames_dont_match) != 0: for path_ust_and_path_lab in songnames_dont_match: - logging.error('USTファイル名とLABファイル名が一致しません:') - logging.error(' path_ust: %s', path_ust_and_path_lab[0]) - logging.error(' path_lab: %s', path_ust_and_path_lab[1]) - raise ValueError('USTファイル名とLABファイル名が一致しませんでした。ファイル名を点検してください') + logging.error('UST 파일 이름과 LAB 파일의 이름이 일치하지 않습니다:') + logging.error(' ust 경로: %s', path_ust_and_path_lab[0]) + logging.error(' lab 경로: %s', path_ust_and_path_lab[1]) + raise ValueError('UST 파일 이름과 LAB 파일 이름이 일치하지 않습니다. 파일명을 점검해주세요.') def main(path_config_yaml): @@ -98,7 +98,7 @@ def main(path_config_yaml): compare_number_of_ustfiles_and_labfiles(ust_dir, mono_align_dir) compare_name_of_ustfiles_and_labfiles(ust_dir, mono_align_dir) - print('Converting UST files to full-LAB files') + print('UST 파일들을 full-LAB 파일들로 변환 중...') # USTからフルラベルを生成 ust2full(ust_dir, full_score_dir, path_table, exclude_songs=exclude_songs)