-
Notifications
You must be signed in to change notification settings - Fork 120
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
Rustから直接VOICEVOX Coreを使いたい #388
Comments
issue作成ありがとうございます!!
という視点面白いですね! Rust対応はちゃんとした予定がありませんが、もしモデルを読み込めるようになると普通に利用できるようになるかもです。 VOICEVOXはプログラミングにそこまで詳しくない方が趣味で使う人が多い想定で、Rustはあまりメジャーな言語ではないため需要はあまり高くないだろうなとは思います。 |
少なくとも @CrafterKina さんが作ってくださるならウェルカムという感じかもです!! |
個人的にはdllの配布に加えてrlibもしくは(cdylibではなくdylibで生成される)dllとともにヘッダファイルの代わりの薄いRustファイルがついてくるみたいなのを想像していました。一旦Cの表現にしたものをRustの表現にするのはすごい二度手間を感じるところではあるので。 |
Rustに詳しくないのですが、crateとして配布できるならとりあえず何でも良いのかなという気持ちです! |
先程のonnxruntime-rsの例ですが、libloadingを使うのはどうでしょうか? 現在onnxruntime本家に出されているRust API追加のPRではそのような動きがあります。 |
あ、勘違いしていたのですがabi_stableってlibloadingと似た感じのものなんですね。 |
ただ手間はやはりかかるため、cdylibとrlibの両方を提供する理由としては弱い気もします。 |
@qryxip さんありがとうございます、いつも助かってます🙇♂️ ちなみにonnxruntimeはディープラーニングしたものをいい感じに使えるライブラリで、マイクロソフト製でかなりしっかりしてるのでこのリポジトリでもいろいろ参考にしてます。 |
全体のrlib化が難しいのであれば、(製品版とコードが異なる部分である?)モデルの読み込み部だけcdylibにしてそれをRustから使う方式に変更するというのがあんまり表現を行ったり来たりしなくなる方法ではありそうですね。 |
私もこの Issue の趣旨と同じようなことを以前個人的に考えたことがあったのですが、以下のような考察をした上で、これについて議論を開始するのは早すぎると考えたため、提案を見合わせていました。 「実現方法」で言及していただいている
が一つのハードルになっています。 このリポジトリで OSS として公開されている部分とは別に、配布されている製品版では暗号化された音声合成モデルを復号する処理を行なっています。提案されている方法は、この処理を担当する部分を別ライブラリ化して、OSS 版と製品版で差し替え可能にする、というものだと理解しています。 ただし、暗号化されたモデルを復号したあと、ヒープにあるそのデータへのポインタが外部に漏れないようにするために、その別ライブラリ化した部分に onnxruntime を使用している処理を全て移す必要がありそうだと考えています。つまり、モデルをロードする部分のみをインターフェースとして切り出すだけでは足りず、 ( @Hiroshiba さんが
と #388 (comment) で言及されていますが、その仕組みでは足りないと考えている、ということです) 現在は voicevox_core の設計が大きく変わっている途中であり、これ以上の大きな変更を持ち込むと混乱が大きくなると考えていたため、特に提案はしてきませんでした。 ただ、(Prosで触れられている通り)Rust コードから voicevox_core を利用しやすくすることは、Rust を使用する開発者がこのプロジェクトに貢献するモチベーションを高めることにつながると思うので、リソースを割く価値のある取り組みにはなりそうだと思っています。 |
内容
クレートとして整備し、RustからFFIを経ずにVOICEVOX COREを利用できるようにする。
Pros 良くなる点
VOICEVOX Core内で扱われているものが、Cのエラー表現などを経ずに扱えるようになる。
RustからVOICEVOX Coreを扱う人が増えれば、必然的にRustでVOICEVOX Coreに貢献できる人が増える。
Cons 悪くなる点
実現方法
モデルの読み込み部分だけ(あるいはCやPython同様インターフェース部分以外)を別ライブラリ化し、製品版とダミーで切り分けられるようにする。
rlib形式などで直接扱う他のlibと同じ方法で頒布することもできそうだが、Rustにはヘッダファイルに該当するものがないため、エディタの補完機能などの面で厳しそうなため。
OSの種類/ディストリ/バージョン
その他
モデルの外部化やライブラリ構成を変えるプロジェクトが進行中なので、裏で検討済みっぽそうではあるもののRustからの利用を考慮する予定があるのかを問い合わせたい。
あんまりRustに詳しいわけではないので、実現方法の間違い改善点や、そもそも何もしなくてもRustから簡単に扱えるよというのがあるかもしれない。
The text was updated successfully, but these errors were encountered: