|
11 | 11 | 元のCosyVoiceは **Linux専用** として開発されており、Windowsでの動作は公式にサポートされていませんでした。 |
12 | 12 | 本フォークは、複数のWindows固有の問題を解決し、**Windowsネイティブ環境での完全動作** を実現しました。 |
13 | 13 |
|
14 | | -### 解決した技術的課題 |
| 14 | +--- |
| 15 | + |
| 16 | +## 解決した技術的課題 |
| 17 | + |
| 18 | +### Windows互換性の問題 |
| 19 | + |
| 20 | +| 問題 | 症状 | 原因 | 解決策 | |
| 21 | +|------|------|------|--------| |
| 22 | +| **DLLロードエラー** | `OSError: Error loading c10.dll` | GradioがPyTorchより先にロードされるとDLL依存関係が壊れる | Pythonモジュールのインポート順序を最適化(torch → gradio) | |
| 23 | +| **torchcodecエラー** | `TorchCodec is required for load_with_torchcodec` | torchaudioがWindowsで未サポートのtorchcodecを要求 | soundfileによるフォールバック処理を実装 | |
| 24 | +| **torchaudio API変更** | `torchaudio.info()` が動作しない | PyTorch nightly版でのAPI破壊的変更 | soundfile.info()で代替実装 | |
| 25 | +| **ruamel.yaml互換性** | `'Loader' object has no attribute 'max_depth'` | HyperPyYAMLとの互換性問題 | バージョン制限 `>=0.15.0,<0.18.0` で解決 | |
| 26 | +| **sox依存問題** | Linux専用の音声処理ツールに依存 | 元コードがsoxを前提 | 代替ライブラリで完全置換 | |
15 | 27 |
|
16 | | -| 問題 | 症状 | 解決策 | |
17 | | -|------|------|--------| |
18 | | -| **DLLロードエラー** | `OSError: Error loading c10.dll` - PyTorchのDLLが正しくロードされない | Pythonモジュールのインポート順序を最適化(torch → gradio) | |
19 | | -| **torchcodecエラー** | `TorchCodec is required` - Windowsで未サポートのコーデックを要求 | soundfileによるフォールバック処理を実装 | |
20 | | -| **sox依存問題** | Linux専用の音声処理ツールに依存 | 代替ライブラリで完全置換 | |
21 | | -| **torchaudio API変更** | PyTorch nightly版でのAPI破壊的変更 | soundfileベースの互換レイヤーを実装 | |
| 28 | +### CosyVoice3 固有の問題 |
| 29 | + |
| 30 | +| 問題 | 症状 | 原因 | 解決策 | |
| 31 | +|------|------|------|--------| |
| 32 | +| **プリセット音声が使えない** | SFTモードでエラー | CosyVoice3は`spk2info.pt`を持たない | プリセット音声モードをUIから削除 | |
| 33 | +| **音声が中国語っぽくなる** | 日本語テキストが正しく発音されない | `<\|endofprompt\|>`トークンの欠落 | 各推論モードで自動的にトークンを付与 | |
| 34 | +| **inference_instruct非対応** | instructモードでエラー | CosyVoice3は`inference_instruct2`のみ対応 | 正しいAPI呼び出しに修正 | |
22 | 35 |
|
23 | 36 | --- |
24 | 37 |
|
25 | 38 | ## 特徴 |
26 | 39 |
|
27 | | -### Windowsネイティブ完全対応 |
| 40 | +### 1. Windowsネイティブ完全対応 |
28 | 41 | - **Linux専用だったCosyVoiceをWindowsで動作可能に** |
29 | 42 | - RTX 5090 (sm_120) などの最新GPUにも対応 |
30 | 43 | - PyTorch nightly (CUDA 12.8) での動作確認済み |
31 | 44 | - ワンクリック起動(`run.bat`をダブルクリックするだけ) |
32 | | -- 自動ポート選択(使用中のポートを自動回避) |
| 45 | +- 自動ポート選択(使用中のポートを自動回避、7865から順に検索) |
| 46 | +- ブラウザ自動起動(8秒後に自動でWebUIを開く) |
33 | 47 |
|
34 | | -### GUI完全日本語化 |
| 48 | +### 2. GUI完全日本語化 |
35 | 49 | - すべてのUI要素を日本語に翻訳 |
36 | 50 | - 操作手順も日本語で表示 |
37 | | -- エラーメッセージも日本語化 |
| 51 | +- エラーメッセージ・警告メッセージも日本語化 |
| 52 | +- モード名: 「3秒ボイスクローン」「多言語クローン」「自然言語制御」 |
38 | 53 |
|
39 | | -### Whisper自動文字起こし統合 |
| 54 | +### 3. Whisper自動文字起こし統合 |
40 | 55 | - OpenAI Whisperをボタン一つで呼び出し |
41 | 56 | - プロンプト音声の内容を自動でテキスト化 |
42 | 57 | - 言語自動検出対応 |
| 58 | +- モデルサイズ選択可能(tiny/base/small/medium/large) |
| 59 | +- 遅延ロード実装(初回使用時のみモデルをロード) |
| 60 | + |
| 61 | +### 4. 言語選択機能(発音制御) |
| 62 | +- 出力言語を明示的に指定可能 |
| 63 | +- 「自然言語制御」モードで言語ヒントを自動付与 |
| 64 | +- 対応言語: 日本語、英語、中国語、韓国語、ドイツ語、フランス語、スペイン語、イタリア語、ロシア語 |
| 65 | + |
| 66 | +### 5. CosyVoice3 最適化 |
| 67 | +- `<|endofprompt|>`トークンの自動付与 |
| 68 | +- 各推論モード(zero_shot, cross_lingual, instruct2)の適切な使い分け |
| 69 | +- 声質クローン優先モード(言語制御より声質を重視) |
43 | 70 |
|
44 | | -### 言語選択機能 |
45 | | -- 出力言語(発音)を明示的に指定可能 |
46 | | -- 日本語、英語、中国語、韓国語など9言語対応 |
| 71 | +### 6. エラーハンドリング強化 |
| 72 | +- 音声ファイル読み込みエラーの詳細表示 |
| 73 | +- 音声生成エラー時のスタックトレース出力 |
| 74 | +- サンプリングレートチェック(16kHz以上を要求) |
47 | 75 |
|
48 | 76 | --- |
49 | 77 |
|
50 | 78 | ## 元リポジトリからの変更点 |
51 | 79 |
|
52 | 80 | | ファイル | 変更内容 | |
53 | 81 | |----------|----------| |
54 | | -| `webui.py` | GUI日本語化、Whisper統合、Windows互換性修正、言語選択機能 | |
55 | | -| `launcher.py` | 自動ポート選択、ブラウザ自動起動(**新規作成**) | |
56 | | -| `run.bat` | ワンクリック起動スクリプト(**新規作成**) | |
57 | | -| `cosyvoice/utils/file_utils.py` | torchcodec問題の回避パッチ、soundfileフォールバック | |
| 82 | +| `webui.py` | GUI日本語化、Whisper統合、Windows互換性修正、言語選択機能、CosyVoice3 API対応、エラーハンドリング強化 | |
| 83 | +| `launcher.py` | 自動ポート選択、ブラウザ自動起動、環境変数設定(**新規作成**) | |
| 84 | +| `run.bat` | ワンクリック起動スクリプト、Conda環境自動有効化(**新規作成**) | |
| 85 | +| `cosyvoice/utils/file_utils.py` | torchcodec問題の回避、soundfileフォールバック、numpy変換処理 | |
| 86 | +| `.gitignore` | Windows固有ファイル、大容量モデルファイルの除外追加 | |
58 | 87 |
|
59 | 88 | --- |
60 | 89 |
|
|
64 | 93 | |------|------| |
65 | 94 | | **OS** | Windows 10/11(Linux非依存) | |
66 | 95 | | **GPU** | NVIDIA GPU(CUDA対応) | |
| 96 | +| **VRAM** | 8GB以上推奨 | |
67 | 97 | | **Python** | 3.10 | |
68 | 98 | | **PyTorch** | nightly版推奨(CUDA 12.8対応) | |
69 | | -| **特記** | RTX 5090など最新GPU対応 | |
| 99 | +| **特記** | RTX 5090 (sm_120) 対応確認済み | |
70 | 100 |
|
71 | 101 | --- |
72 | 102 |
|
@@ -124,26 +154,65 @@ python launcher.py |
124 | 154 | ``` |
125 | 155 |
|
126 | 156 | ブラウザが自動で開き、`http://localhost:7865` でWebUIにアクセスできます。 |
| 157 | +(ポート7865が使用中の場合は自動的に次の空きポートを使用) |
127 | 158 |
|
128 | 159 | --- |
129 | 160 |
|
130 | 161 | ## 使い方 |
131 | 162 |
|
132 | 163 | ### 3秒ボイスクローン(推奨) |
| 164 | +最も高品質な声質クローンが可能なモード |
| 165 | + |
133 | 166 | 1. プロンプト音声をアップロードまたは録音(3〜30秒) |
134 | 167 | 2. 「自動文字起こし (Whisper)」ボタンでテキストを取得 |
135 | 168 | 3. 合成テキストを入力 |
136 | 169 | 4. 「音声を生成」をクリック |
137 | 170 |
|
138 | 171 | ### 多言語クローン |
139 | | -1. プロンプト音声をアップロード(例:英語) |
140 | | -2. 合成テキストを別の言語で入力(例:日本語) |
| 172 | +プロンプト音声と異なる言語で出力するモード |
| 173 | + |
| 174 | +1. プロンプト音声をアップロード(例:英語の音声) |
| 175 | +2. 合成テキストを別の言語で入力(例:日本語のテキスト) |
141 | 176 | 3. 「音声を生成」をクリック |
142 | 177 |
|
143 | 178 | ### 自然言語制御 |
| 179 | +話し方を自然言語で指示するモード |
| 180 | + |
144 | 181 | 1. プロンプト音声をアップロード |
145 | | -2. 指示テキストを入力(例:「優しく話して」「早口で」「囁いて」) |
146 | | -3. 「音声を生成」をクリック |
| 182 | +2. 指示テキストを入力(例:「優しく話して」「早口で」「囁いて」「悲しそうに」) |
| 183 | +3. 言語選択で出力言語を指定(オプション) |
| 184 | +4. 「音声を生成」をクリック |
| 185 | + |
| 186 | +--- |
| 187 | + |
| 188 | +## トラブルシューティング |
| 189 | + |
| 190 | +### DLLロードエラーが発生する |
| 191 | +``` |
| 192 | +OSError: Error loading c10.dll |
| 193 | +``` |
| 194 | +→ `webui.py`の先頭で`torch`を`gradio`より先にインポートしているか確認 |
| 195 | + |
| 196 | +### torchcodecエラーが発生する |
| 197 | +``` |
| 198 | +TorchCodec is required for load_with_torchcodec |
| 199 | +``` |
| 200 | +→ `pip install soundfile` を実行し、`file_utils.py`が更新されているか確認 |
| 201 | + |
| 202 | +### ポートが使用中でエラーになる |
| 203 | +``` |
| 204 | +OSError: Cannot find empty port in range |
| 205 | +``` |
| 206 | +→ 既存のPythonプロセスを終了するか、`launcher.py`が最新か確認 |
| 207 | + |
| 208 | +### 音声が中国語っぽくなる |
| 209 | +→ 「自然言語制御」モードで言語選択を「日本語」に設定 |
| 210 | + |
| 211 | +### ruamel.yamlエラー |
| 212 | +``` |
| 213 | +'Loader' object has no attribute 'max_depth' |
| 214 | +``` |
| 215 | +→ `pip install "ruamel.yaml>=0.15.0,<0.18.0"` を実行 |
147 | 216 |
|
148 | 217 | --- |
149 | 218 |
|
|
0 commit comments