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

Add: 母音・子音サブクラス #894

Open
3 tasks done
tarepan opened this issue Dec 17, 2023 · 4 comments
Open
3 tasks done

Add: 母音・子音サブクラス #894

tarepan opened this issue Dec 17, 2023 · 4 comments
Labels

Comments

@tarepan
Copy link
Contributor

tarepan commented Dec 17, 2023

内容

要望: 母音・子音サブクラスの追加

VOICEVOX ENGINE では母音と子音を 厳密に 区別する必要がある。
しかし現在の実装は full_context_label.Phonemeacounstic_feature_extractor.OjtPhoneme においてこの2つを区別していない。
ゆえに Mora.consonant 等でも区別がなく、例えば .consonant に vowel相当の Phoneme が代入されることを型チェックで弾けていない。
このような背景から、母音・子音サブクラスの追加を提案します。

Pros 良くなる点

  • 型チェック/静的検証によるバグの防止
  • validation/動的検査による異常動作の検出・防止
  • Literal型による音素種の明示化・理解度向上

Cons 悪くなる点

  • コード量の増加

音素の扱いは TTS pipeline の text processing における最重要項目であるため、コード量を増加させてでも安全性・明確性を確保する価値があると考える。
また継承を活用すればコード増を抑制でき、例えば full_context_label.Phoneme では子音・母音サブクラスを合計+20行ほどで実装できる。

実現方法

音素クラスにサブクラスを用意する。
.consonant 相当のプロパティをこれらサブクラスで型付けすることで、静的に子音・母音を保証する。
OpenJTalk 各サブクラスの入力は text 分析から得られた str であるため、初期化あるいはアクセッサでの validation で母音・子音を保証する。

VOICEVOXのバージョン

0.14.10

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

  • Windows
  • macOS
  • Linux
@github-actions github-actions bot added OS 依存:linux Linux に依存した現象 OS 依存:mac macOS に依存した現象 OS 依存:win Windows に依存した現象 labels Dec 17, 2023
@Hiroshiba
Copy link
Member

音素を区別できるようにするのは賛成です!

ただ子音と母音の他にpauとcl(側音)があって、これらをどう扱うべきなのか迷いそうに思いました。
まあとりあえず子音と子音以外にわければ良さそう…?
(よくよく考えればMora.vowelにpauが入りうるの変ですね…。)

@tarepan
Copy link
Contributor Author

tarepan commented Dec 18, 2023

音素を区別できるようにするのは賛成

👍

とりあえず子音と子音以外にわければ良さそう

👍
同意です。

よくよく考えればMora.vowelにpauが入りうるの変

実装読めば vowel 属性に押し込みたくなる理由がわかりますが、最初は混乱しましたね…🥺
型とクラスを用意すれば見るべき場所がはっきりするので、そこに NOTE なり CAUTION なりで注意事項として「vowel は母音+〇〇です」と書いて茶を濁すのがコスパ良さそうではあります。

@Hiroshiba
Copy link
Member

型とクラスを用意すれば見るべき場所がはっきりするので、そこに NOTE なり CAUTION なりで注意事項として「vowel は母音+〇〇です」と書いて茶を濁すのがコスパ良さそうではあります。

賛成です!
もうちょっとPythonの型サポートがしっかりしてジェネリクスとEnumがうまいこと組み合わせられれば綺麗に細分化もできそうですが、まあそこまでしなくてもと思いました!

がっつり細分化するならこうですかね!

  • Mora
    • OnePhonemeMora
      • PauseMora
    • TwoPhonemeMora
  • Phoneme
    • ConsonantPhoneme
    • 単体でMoraになれるPhoneme(名前が思いつかない)
      • VowelPhoneme
      • PausePhoneme
      • N(ん)Phoneme
      • 促音(っ)Phoneme

Copy link

github-actions bot commented Sep 4, 2024

本 Issue は直近 180 日間で活動がありません。今後の方針について VOICEVOX チームによる再検討がおこなわれる予定です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants