Skip to content

Commit

Permalink
stash
Browse files Browse the repository at this point in the history
  • Loading branch information
Hiroshiba committed Sep 20, 2024
1 parent 11c5aa8 commit e6ab7c0
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 82 deletions.
84 changes: 84 additions & 0 deletions docs/エンジン周りについて.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# エンジン周りについて

VOICEVOXはマルチエンジン機能を介して複数のVOICEVOX AIP準拠エンジンを扱うことができます。
それ以外にも多様な概念が存在するため、ここでまとめてドキュメント化しています。

## 用語説明

| 用語 | 説明 |
| ------------------------- | -------------------------------------------------------------------------------------------- |
| VOICEVOX API 準拠エンジン | VOICEVOX API に準拠したエンジンのこと。 |
| マルチエンジン | エディタ内で複数のエンジンを扱う機能のこと。 |
| デフォルトエンジン | エディタに付属しているエンジンのこと。<br>デフォルトエンジンがないとエディタが起動しない。 |
| VVPP | VOICEVOXにインストールできるエンジンのパッケージファイル。<br>エンジンやエンジン情報を含む。 |

## マルチエンジン

エンジンの追加は VVPP ファイルをインストールする形と、エンジンディレクトリのパスを指定する形があります。

| | VVPP | パス |
| -------------------- | ------------------------------------ | ----------------------------------- |
| `EngineInfo``type` | `"vvpp"` | `"path"` |
| 追加時の処理 | zipファイルを所定のフォルダに展開 | エンジンのパスを`config.json`に保存 |
| 読み込み時の処理 | 所定のフォルダ内にあるものを読む | `config.json`に保存されたパスを読む |
| 削除時の処理 | 所定のフォルダ内のディレクトリを削除 | `config.json`からパスを削除 |

## デフォルトエンジンの更新情報

デフォルトエンジンの更新情報をjson形式で管理しています。
更新情報には最新のパッケージ(VVPP・VVPPPファイル)のURLやバージョンなどを記載しています。
パッケージの情報はOS・アーキテクチャ・デバイスごとに分けています。

ファイルフォーマットは以下の通りです。

```JSONC
{
//[number] ファイル構造バージョン(仕様変更毎にインクリメントされる)
"formatVersion": 1,

// Windowsの情報
"windows": {
"x64": {
"CPU": {
//[string] バージョン
"version": "x.x.x",

// vvppやvvpppの情報
"packages": [
{
//[string] ダウンロードURL
"url": "https://example.com/example.vvpp",

//[string] ファイル名
"name": "example.vvpp",

//[number] バイト数
"size": 123456,

//[string(Optional)] ハッシュ値
"hash": "xxxxxxx",
},
//...
]
},
"GPU/CPU": { /* 同上 */ }
}
},

"macos": {
"x64": {
"CPU": { /* 同上 */ }
},
"arm64": {
"CPU": { /* 同上 */ }
}
},

"linux": {
"x64": {
"CPU": { /* 同上 */ },
"GPU/CPU": { /* 同上 */ }
}
}
}
```
71 changes: 0 additions & 71 deletions docs/細かい設計方針.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,74 +38,3 @@ export const hogeFugaSchema = z.object({

export type HogeFugaType = z.infer<typeof hogeFugaSchema>;
```

## マルチエンジン

エンジンの追加は VVPP ファイルをインストールする形と、エンジンディレクトリのパスを指定する形があります。

| | VVPP | パス |
| -------------------- | ------------------------------------ | ----------------------------------- |
| `EngineInfo``type` | `"vvpp"` | `"path"` |
| 追加時の処理 | zipファイルを所定のフォルダに展開 | エンジンのパスを`config.json`に保存 |
| 読み込み時の処理 | 所定のフォルダ内にあるものを読む | `config.json`に保存されたパスを読む |
| 削除時の処理 | 所定のフォルダ内のディレクトリを削除 | `config.json`からパスを削除 |

## デフォルトエンジンの更新情報

デフォルトエンジンの更新情報をjson形式で管理しています。
更新情報には最新のパッケージ(VVPP・VVPPPファイル)のURLやバージョンなどを記載しています。
パッケージの情報はOS・アーキテクチャ・デバイスごとに分けています。

ファイルフォーマットは以下の通りです。

```JSONC
{
//[number] ファイル構造バージョン(仕様変更毎にインクリメントされる)
"formatVersion": 1,

// Windowsの情報
"windows": {
"x64": {
"CPU": {
//[string] バージョン
"version": "x.x.x",

// vvppやvvpppの情報
"packages": [
{
//[string] ダウンロードURL
"url": "https://example.com/example.vvpp",

//[string] ファイル名
"name": "example.vvpp",

//[number] バイト数
"size": 123456,

//[string(Optional)] ハッシュ値
"hash": "xxxxxxx",
},
//...
]
},
"GPU/CPU": { /* 同上 */ }
}
},

"macos": {
"x64": {
"CPU": { /* 同上 */ }
},
"arm64": {
"CPU": { /* 同上 */ }
}
},

"linux": {
"x64": {
"CPU": { /* 同上 */ },
"GPU/CPU": { /* 同上 */ }
}
}
}
```
16 changes: 16 additions & 0 deletions src/backend/common/envEngineInfoSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { z } from "zod";

import { engineIdSchema } from "@/type/preload";

/** .envに書くエンジン情報のスキーマ */
export const envEngineInfoSchema = z.object({
uuid: engineIdSchema,
host: z.string(),
name: z.string(),
executionEnabled: z.boolean(),
executionFilePath: z.string(),
executionArgs: z.array(z.string()),
path: z.string().optional(), // FIXME: typeがpathのときは必須
type: z.union([z.literal("path"), z.literal("vvpp")]).default("path"),
latestDefaultEngineInfosUrl: z.string().optional(), // FIXME: typeがvvppのときは必須
});
7 changes: 7 additions & 0 deletions src/backend/electron/manager/engineManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ function createDefaultEngineInfos(defaultEngineDir: string): EngineInfo[] {
const defaultEngineInfosEnv =
import.meta.env.VITE_DEFAULT_ENGINE_INFOS ?? "[]";

/*
先リファクタリング入れたほうが良いかも。
2. エンジン情報マネージャーとエンジンプロセスマネージャーを分ける?
3. ついでにelectronへの依存をなくしてもよい
4. .envの情報から、エラー情報を返す関数作っても良いかも、あとでも良いかも(エンジンが見つからないとか、vvppが未インストールとか)
*/

const envSchema = envEngineInfoSchema.array();
const engines = envSchema.parse(JSON.parse(defaultEngineInfosEnv));

Expand Down
11 changes: 0 additions & 11 deletions src/type/preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -700,17 +700,6 @@ export const configSchema = z
.merge(rootMiscSettingSchema);
export type ConfigType = z.infer<typeof configSchema>;

export const envEngineInfoSchema = z.object({
uuid: engineIdSchema,
host: z.string(),
name: z.string(),
executionEnabled: z.boolean(),
executionFilePath: z.string(),
executionArgs: z.array(z.string()),
path: z.string().optional(),
});
export type EnvEngineInfoType = z.infer<typeof envEngineInfoSchema>;

// workaround. SystemError(https://nodejs.org/api/errors.html#class-systemerror)が2022/05/19時点ではNodeJSの型定義に記述されていないためこれを追加しています。
export class SystemError extends Error {
code?: string | undefined;
Expand Down

0 comments on commit e6ab7c0

Please sign in to comment.