Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace_phoneme_length の無音挿入 #924

Closed
3 tasks done
tarepan opened this issue Dec 22, 2023 · 4 comments
Closed
3 tasks done

replace_phoneme_length の無音挿入 #924

tarepan opened this issue Dec 22, 2023 · 4 comments

Comments

@tarepan
Copy link
Contributor

tarepan commented Dec 22, 2023

質問の内容

概要: replace_phoneme_length における無音挿入は必須か、その役割は何か

TTSEngine.replace_phoneme_length() は音素長生成を担っている。

phonemes = [OjtPhoneme("pau")] + phonemes + [OjtPhoneme("pau")]
# 音素クラスから音素IDスカラへ表現を変換する
phoneme_ids = numpy.array([p.phoneme_id for p in phonemes], dtype=numpy.int64)
# コアを用いて音素長を生成する
phoneme_lengths = self.core.safe_yukarin_s_forward(phoneme_ids, style_id)
# 生成結果でモーラ内の音素長属性を置換する
vowel_indexes = [
i for i, p in enumerate(phonemes) if p.phoneme in mora_phoneme_list
]
for i, mora in enumerate(moras):
if mora.consonant is None:
mora.consonant_length = None
else:
mora.consonant_length = phoneme_lengths[vowel_indexes[i + 1] - 1]
mora.vowel_length = phoneme_lengths[vowel_indexes[i + 1]]

この際、コアの yukarin_s_forward() へ渡される音素系列には前後無音(pau)が付与されている。
そして yukarin_s_forward() から得られた phoneme_lengths のうち、pau に当たる部分は mora へ反映されず捨てられる。
つまり一見すると pau を付けて捨てているように見える。
一方で音声合成の観点から考えると、生成/推論のための padding はしばしばあるため、そのケースにも見える。

このような背景から次の質問があります:
Q「 replace_phoneme_length における無音挿入は必須か、必須ならその役割は何か」

VOICEVOXのバージョン

0.14.10

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux
@tarepan tarepan added the 要議論 実行する前に議論が必要そうなもの label Dec 22, 2023
@github-actions github-actions bot added OS 依存:linux Linux に依存した現象 OS 依存:mac macOS に依存した現象 OS 依存:win Windows に依存した現象 labels Dec 22, 2023
@Hiroshiba
Copy link
Member

Hiroshiba commented Dec 22, 2023

ご質問ありがとうございます!!

Q「 replace_phoneme_length における無音挿入は必須か、必須ならその役割は何か」

必須になります!
役割は多分エンジン側にとっては何でもよくて、「コアのAPIがそうなってるから」です。

ちなみにここから先はエンジン側に漏れるべきではない情報になりますが一応共有すると、

  • コアにとっては「モデルがそういう仕様だから」
  • モデルにとっては「学習時がそうだったから」
  • 学習時の気持ちは「拡張性を考慮したから」

です!
拡張性というのは、pauといっても「。」や「?」や「!」や呼吸音があり得るので、将来そのあたりを追加できるようにしておいた(けど結局使ってない)って感じです!

@tarepan
Copy link
Contributor Author

tarepan commented Dec 23, 2023

エンジン側に漏れるべきではない情報 ... 一応共有

詳細にありがとうございます!
末尾表現等の拡張性を考え前後 pau が付く前提/仕様になっている、ということですね。理解しました。

必須

👍

役割は多分エンジン側にとっては何でもよくて

👍
コードコメントに残す必要がある(コメント無いとバグに見える)のですが、どういう表現が良いでしょうか?

# 生成のために前後無音を挿入する(コアの仕様。c.f. voicevox_engine#924)
phonemes = [OjtPhoneme("pau")] + phonemes + [OjtPhoneme("pau")] 

とかが第一感です。

@Hiroshiba
Copy link
Member

コードコメントに残す必要がある(コメント無いとバグに見える)のですが、どういう表現が良いでしょうか?

良さそうに思いました!!
このコードが全体で2箇所以上にあるなら、コアのアダプター側に無音を足す処理を入れても良いかも・・・?
あとはコアの仕様なので、コアアダプターのドキュメントあたりに書いてもいいかも・・・?

どれもこれもそこまでこだわりはないです!!

@tarepan
Copy link
Contributor Author

tarepan commented Dec 25, 2023

良さそうに思いました!!

👍

コアのアダプター側に無音を足す処理を入れ ...

👍
理の通ったコード配置に感じます。影響範囲等を精査して PR できればと思います。

コアの仕様なので、コアアダプターのドキュメントあたりに書い

👍
コア利用上の注意としてアダプターに記載するのが妥当そうです。PR できればと思います。

@tarepan tarepan closed this as completed Dec 25, 2023
@tarepan tarepan removed 要議論 実行する前に議論が必要そうなもの OS 依存:mac macOS に依存した現象 OS 依存:linux Linux に依存した現象 OS 依存:win Windows に依存した現象 labels Mar 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants