ローカルのWindows上で音声合成したいと思ってVOICEVOXやStyle-Bert-VITS2を試してたのですが、なんかあるとき起動しなくなりました。
VOICEVOXの場合は「エンジン起動に時間がかかっています。」の状態から進まなくなります。

Style-Bert-VITS2の場合はしばらく時間がたった後、エラーをはいて終了します。
.\Server.bat
C:>chcp 65001 1>NUL
Running server_fastapi.py
03-20 14:57:48 | DEBUG | __init__.py:92 | try starting pyopenjtalk worker server
03-20 14:57:48 | DEBUG | __init__.py:130 | pyopenjtalk worker server started
Error: Failed to update dictionary.
Traceback (most recent call last):
File "C:\style_bert_vits2\nlp\japanese\user_dict\__init__.py", line 150, in update_dict
pyopenjtalk.unset_user_dict()
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\__init__.py", line 66, in unset_user_dict
WORKER_CLIENT.dispatch_pyopenjtalk("unset_user_dict")
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\worker_client.py", line 41, in dispatch_pyopenjtalk
response = receive_data(self.sock)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\worker_common.py", line 42, in receive_data
header = __receive_until(sock, HEADER_SIZE)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\worker_common.py", line 33, in __receive_until
part = sock.recv(size - len(data))
^^^^^^^^^^^^^^^^^^^^^^^^^^^
TimeoutError: timed out
Traceback (most recent call last):
File "C:\server_fastapi.py", line 52, in <module>
update_dict()
File "C:\style_bert_vits2\nlp\japanese\user_dict\__init__.py", line 159, in update_dict
raise e
File "C:\style_bert_vits2\nlp\japanese\user_dict\__init__.py", line 150, in update_dict
pyopenjtalk.unset_user_dict()
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\__init__.py", line 66, in unset_user_dict
WORKER_CLIENT.dispatch_pyopenjtalk("unset_user_dict")
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\worker_client.py", line 41, in dispatch_pyopenjtalk
response = receive_data(self.sock)
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\worker_common.py", line 42, in receive_data
header = __receive_until(sock, HEADER_SIZE)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\style_bert_vits2\nlp\japanese\pyopenjtalk_worker\worker_common.py", line 33, in __receive_until
part = sock.recv(size - len(data))
^^^^^^^^^^^^^^^^^^^^^^^^^^^
TimeoutError: timed out
03-20 14:58:48 | DEBUG | __init__.py:147 | pyopenjtalk worker server terminated
03-20 14:59:48 | ERROR | __init__.py:157 | timed out
Press any key to continue . . .
結論から言うとOSのTCP輻輳制御プロバイダーがBottleneck Bandwidth and RTT (BBR2)になってると起動しないようです。
ダメなケース
netsh int tcp show supplemental
既定の TCP グローバル テンプレートは internet です
TCP 補足パラメーター
----------------------------------------------
最小 RTO (ミリ秒) : 300
初期輻輳ウィンドウ (MSS) : 10
輻輳制御プロバイダー : bbr2
輻輳ウィンドウの再起動の有効化 : disabled
遅延 ACK のタイムアウト (ミリ秒) : 40
遅延 ACK 間隔 : 2
RACK の有効化 : enabled
Tail Loss Probe の有効化 : enabled
そういえばBBR2試してみるか~って変えたんですよね。こんなところに影響があるとは思わなかった。発話エンジンのサーバーを起動するときのSocket周りでエラーになってそうだな?と思って気付けたんですけど原因よくわからない。
というわけでさくっと設定を戻すことに。(Template=~のところはshow supplementalで見れるテンプレートに合わせてください)
netsh int tcp set supplemental Template=Internet CongestionProvider=cubic
OK
netsh int tcp show supplemental
既定の TCP グローバル テンプレートは internet です
TCP 補足パラメーター
----------------------------------------------
最小 RTO (ミリ秒) : 300
初期輻輳ウィンドウ (MSS) : 10
輻輳制御プロバイダー : cubic
輻輳ウィンドウの再起動の有効化 : disabled
遅延 ACK のタイムアウト (ミリ秒) : 40
遅延 ACK 間隔 : 2
RACK の有効化 : enabled
Tail Loss Probe の有効化 : enabled
スッと起動するようになりました。
おわり。