-
Notifications
You must be signed in to change notification settings - Fork 305
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
50021番ポートが空いてなくて他のポートを使ったとき、それがサードパーティからわかるようにしたい #1738
Comments
すみません、Issue起こしていただいてありがとうございます。 手段としては
出力方法としては
などがパッと思いつきます。(元提案にもありました) マルチエンジンみたいなものがあるので、フォーマットはJSONあたりが良さそうかなぁとおもいました。 UXを考えたときには、EXEファイル位置の特定/指示が必要になるという点はサードパーティからすれば できれば解消したい課題になるかもしれません。 あと、ツールからVOICEVOXを立ち上がることが前提にすると、1つのツールしか連携できなくなるので、案2、3は使いやすそうです。(ファイルが格納されるフォルダがある程度決まっていれば、何も設定せずに連携できそうです) (もう少し議論&本作業にかかわれたらとおもってます) |
誘導ありがとうございます。 標準出力サード側がVOICEVOXの実行ファイルのパスを把握していることを前提とするのであれば、この方法が一番簡単かつ直感的なのかなと思いました。 ファイルこちらも使い勝手は良さそうです。 具体的には
などでしょうか。
このissueの趣旨からは外れますが、 |
@nmori さん、 @manju-summoner さん、ご意見ありがとうございます!! 使い勝手を考えると、固定ディレクトリに直接配置がいいのかなと思いました!
こちらは確か場合によって結構難しくて、管理者権限がある場所とかだとファイル保存が難しかったりするかもです。
ちなみにこちらは1年くらい前に まとめるとこうでしょうか。
他の情報も保存できるように、実行中の情報を保存できるよう |
なるほど、そうだったんですね。 'runtime-info.json'に保管する情報も、特に不足は無いかと思います。 |
いったん、上記の話をコード化したものを、PRしてみようとおもいます。 |
* ファイルは runtime-info.json に書き出し * エンジン全起動もしくは個別起動/終了のタイミングで更新
@nmori おー!!!!ぜひぜひ・・・!!! |
実装側で会話が進んでいますが、こちらの方が会話に埋もれないので 書き込んでみます。 吐き出すデータ形式をこういう形に据えています。 {
"versions": {
"fileFormat": "1.0",
"VOICEVOX": "999.999.999"
},
"engineInfos": [
{
"uuid": "074fc39e-678b-4c13-8916-ffca8d505d1d",
"url": "http://127.0.0.1:50021",
"name": "VOICEVOX Engine",
"executionEnabled": true,
"executionFilePath": "D:\\VOICEVOX0.15.0\\run.exe",
"executionArgs": [],
"type": "default"
},
{
…
}
]
} |
必要な情報がわかりやすく保存されていて良いと思います! |
ありがとうございます。 |
@nmori まとめありがとうございます!! ファイルフォーマットのバージョンはルート直下が良いかもです!(versionsの下だとずっとversionsを変えられなくなるため) VOICEVOXとなってる部分は、エディタをforkしている場合は名前が異なるので汎用的な名前が良いかもです。有用な情報でしょうし、appVersionとかにしてroot直下に置くのはどうでしょう? エンジンの情報はYAGNI原則に従い、必要なものだけにしておきたい気持ちがちょっとだけあります。 |
@Hiroshiba ありがとうございます。ではこのような形にシンプルにする感じで進めてみましょうか。
{
"formatVersion": 1,
"appVersion":"999.999.999",
"engineInfos": [
{
"uuid": "074fc39e-678b-4c13-8916-ffca8d505d1d",
"url": "http://127.0.0.1:50021",
"name": "VOICEVOX Engine",
"executionFilePath": "D:\\VOICEVOX0.15.0\\run.exe",
"executionArgs": []
}
]
} |
@nmori 方針良いと思います! 「構造が変わったらバージョンを変える」だと、動作に問題がない変更(要素を足すとか)と、動作に問題がある変更(要素が消えたとか、入ってる内容の意味を変えるとか)を区別できなくて不便かなと思います。 ちなみにexecutionFilePathが入ってますが、これは起動に便利だからでしょうか? |
たしかに。サードパーティサイド側で想定していた項目からいけば、
@manju-summoner ここでの会話でいいね、となれば追加、んまぁ・・・という感じならYAGNI原則に従って削除という感じにしたいので、ご意見伺いたいです。 |
@nmori あ、すみません!言葉足らずでした。 このruntime-info.jsonファイルはVOICEVOX.exe起動後に手に入る情報なんですよね。つまりここに書き込まれてる情報は、いったんVOICEVOX.exeを1回以上起動しないと得られない。 |
@Hiroshiba ですが、A.I.Voiceに合わせる必要もないので、別手段として作って体感をあげるというのもありですね。では、他の方にもコメント頂いた上で、「そこまで難しくしなくても…」という感じであれば最小実装、いやいや必要だねとなれば、これとは別に実装提案していくことにしますね。 |
AIVOICEの仕様なるほどです。
ぜひぜひ!! |
インストーラー版であればインストール処理中に実行ファイルのパスをファイルやレジストリに保存するというのが正道なのですが、zip版の場合はインストール処理というものが存在しない都合上、どうしても実行後にしか実行ファイルのパスを記録できないという事情があります。 とはいえ、この情報がなくてもインストーラーのデフォルトのインストール場所を決め打ちするだけでも大半のユーザーをカバーできる上、zip版だけを想定して実行後にしか保存されないファイルに実行ファイルのパスを記録するという気持ち悪さもあるのも確かです。 いずれにせよ、最優先されるべきはポート番号の保存処理なので、まずは最小実装を行い続きは別Issueでというのが良いかと思います。 |
コメント頂きありがとうございます。 議論をみながら感じたのは、この情報ファイル書き出し機能はエンジン側に実装すべきものかもしれませんね。 |
* 未対応エンジン追加時にリストが消える件(#1168) ・追加されたエンジンが未対応である場合には追加を阻止 ・追加されてしまっている場合には、エラーで処理中断しないように * lintチェックエラー部分の修正 * コードレビューの反映 (ref #1179) ・MinimumEngineManifestの更新 * コードレビュー分の反映② ref #1179 ・engineManifests[selectedId]自体が undefined であるケースに対応 * サードパーティがエンジンへのアクセス情報を得るための設定書き出し機能(ref #1738) * ファイルは runtime-info.json に書き出し * エンジン全起動もしくは個別起動/終了のタイミングで更新 * * 関数名の変更 : writeEngineInfoFor3rdParty * 排他ロックの追加 * 処理の非同期化 * * コンストラクタ引数でファイルパスを渡すように * 関数をシンプルに * ログメッセージ修正 * コメント位置修正 * * エクスポートファイパスを渡す所を引数にした * 変数、関数名修正 * いくつかの構造をクラス化 * 議論 #1738 に基づき、最小項目の書き出しに変更 * * ファイル書き出しクラスに機能を集約 * 変数名、コメントの修正 * RuntimeInfoManager.tsをブラッシュアップ * EngineManagerとRuntimeInfoManagerを疎結合に * データ構造調整、テスト追加 * Apply suggestions from code review --------- Co-authored-by: Hiroshiba <hihokaruta@gmail.com>
@Hiroshiba こちらで会話があった件ですが |
@nmori こちらこそありがとうございます!!
ぜひお願いしたいです!! あ、ちなみに書く内容ってどういう感じを想像されてますか? 👀 |
そうですね、書くとするとこんな感じでしょうか
|
@nmori ありがとうございます!! とても良さそうに思いました!!
こちらの項目に関してはあげだすとキリがないので、いったん書かなくてもいいのかなと思いました! |
* 未対応エンジン追加時にリストが消える件(#1168) ・追加されたエンジンが未対応である場合には追加を阻止 ・追加されてしまっている場合には、エラーで処理中断しないように * lintチェックエラー部分の修正 * コードレビューの反映 (ref #1179) ・MinimumEngineManifestの更新 * コードレビュー分の反映② ref #1179 ・engineManifests[selectedId]自体が undefined であるケースに対応 * ref #1738 の会話にあった「情報ファイルに関するドキュメント」(新規執筆) * markdown lint でエラーが出てた件の修正 * Update docs/サードパーティ開発者の方へ.md Co-authored-by: Hiroshiba <hihokaruta@gmail.com> * フォーマット表記提案サジェストの適用 Co-authored-by: Nanashi. <sevenc7c@sevenc7c.com> * * 表の表記をJSONP内コメント追記に * VOICEVOXの仕組みを追記 * 環境変数の修正 Co-authored-by: Hiroshiba <hihokaruta@gmail.com> * コメントいただいた部分を中心に追記 * Update docs/サードパーティ開発者の方へ.md --------- Co-authored-by: Hiroshiba <hihokaruta@gmail.com> Co-authored-by: Nanashi. <sevenc7c@sevenc7c.com>
内容
50021番ポートが空いていなければ、ユーザーに通知しつつ他の空いてるポートで起動するようになりました。
もしこうなった場合サードパーティアプリからわからないので、最悪「VOICEVOX.exeは立ち上がったのにサードパーティアプリからエンジンと通信できない」状況になります。
これがどれくらい問題になるかはわかりませんが、できれば対処法を確立しておき、もっといえば解決策を実装したいです。
Pros 良くなる点
サードパーティの利便性が上がる
実現方法
パッと思いつく方法が3つあります。
voicevox:message=1行json
(参考{"type":
"enginePorts", "message": {エンジンID: 元のポートとか今のポートとかエンジン名とかの情報}}`config.json
が保存されてる辺りにmessage/enginePorts.json
とか保存すれば良さそうvoicevox.exe --getEnginePorts
と叩くとstdoutで返すようにするその他
やり方とフォーマットさえ決まればかなり簡単だと思います。(特に1の方法)
まずはそれを決めるとこからかなと。ご意見募集中です。(もちろん実装でも大歓迎です)
The text was updated successfully, but these errors were encountered: