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

トーク:テキスト処理し忘れなくする仕組みを実装したい #2068

Open
Hiroshiba opened this issue May 8, 2024 · 5 comments
Labels
機能向上 要議論 実行する前に議論が必要そうなもの

Comments

@Hiroshiba
Copy link
Member

内容

トークのテキストにはルビ機能やメモ機能があり、テキストからそれらの記号を取り外した後、エンジンに音声をリクエストするっていう経路になっています。

ただテキストを読み込む経路も3種類ぐらいあり、それぞれに実装しなくちゃいけなかったり、そもそも実装し忘れてたりということがどうしても発生します。
読み込む経路だけではなく書き込む経路も同様で、経路が多数存在して同じようなことが起こりやすいです。

いくら気をつけていてもどうしても気づかないので、可能であれば仕組みとして解決したいです。
誰か良い実装方針などはないでしょうか。

実現方法

例えばただのテキストだと変更前などが変更後なのかがわからないので、stringをブランド型にしてしまうという手があるかもしれません。
ブランド型はこんな感じで実装できます。

type BindingKey = string & { __brand: "BindingKey" }; // BindingKey専用のブランド型

同じようにしてstring & __brandにし、テキストの変更前と変更後、保存用テキストをそれぞれ型を付けてあげて、専用の変換関数を通さないと型を変換できないようにすれば、間違えてしまうのを防げるかもしれません。

その他

現状とソースコードを読める力とTypeScriptの力が必要そうですが、実装者募集中です!

@Hiroshiba Hiroshiba added 機能向上 要議論 実行する前に議論が必要そうなもの labels May 8, 2024
@Hiroshiba Hiroshiba changed the title トーク:テキスト処理する経路をまとめる仕組みを実装したい トーク:テキスト処理し忘れなくする仕組みを実装したい May 8, 2024
@Hiroshiba

This comment was marked as off-topic.

@weweweok

This comment was marked as off-topic.

@Hiroshiba

This comment was marked as off-topic.

@weweweok
Copy link
Contributor

weweweok commented May 28, 2024

こちらで、話題に上がった方法をメモします。

テキストを無視する処理は、audio_queryや、accent_phrasesを生成する処理の直前に行った方が、記述ミスが減りそうな気がしました。

と私が言って、

場所によっては無視しない方がいい気もするので、変換を行うかの引数を作るのとかどうでしょうか?

と、ヒホさんが仰った流れです。

audio_queryの場合、この辺りの引数を変える必要がありそうです。

voicevox/src/store/audio.ts

Lines 946 to 954 in 279ab2c

FETCH_AUDIO_QUERY: {
action(
{ dispatch },
{
text,
engineId,
styleId,
}: { text: string; engineId: EngineId; styleId: StyleId },
) {

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

3 participants