From f9dcb5d7a67c09f5aa3879302748afef44355ef5 Mon Sep 17 00:00:00 2001 From: wataru Date: Tue, 9 May 2023 22:40:21 +0900 Subject: [PATCH] WIP: v.1.5.2.9 --- server/MMVCServerSIO.py | 72 ++++++++++++++++++++++++++++ server/voice_changer/VoiceChanger.py | 59 ++++++++++++----------- 2 files changed, 104 insertions(+), 27 deletions(-) diff --git a/server/MMVCServerSIO.py b/server/MMVCServerSIO.py index 0ab298a2..f8515858 100755 --- a/server/MMVCServerSIO.py +++ b/server/MMVCServerSIO.py @@ -92,6 +92,75 @@ def printMessage(message, level=0): print(f"\033[47m {message}\033[0m") +def downloadWeight(): + voiceChangerParams = VoiceChangerParams( + content_vec_500=args.content_vec_500, + content_vec_500_onnx=args.content_vec_500_onnx, + content_vec_500_onnx_on=args.content_vec_500_onnx_on, + hubert_base=args.hubert_base, + hubert_base_jp=args.hubert_base_jp, + hubert_soft=args.hubert_soft, + nsf_hifigan=args.nsf_hifigan, + ) + + # file exists check (currently only for rvc) + downloadParams = [] + if os.path.exists(voiceChangerParams.hubert_base) is False: + downloadParams.append( + { + "url": "https://huggingface.co/ddPn08/rvc-webui-models/resolve/main/embeddings/hubert_base.pt", + "saveTo": voiceChangerParams.hubert_base, + "position": 0, + } + ) + if os.path.exists(voiceChangerParams.hubert_base_jp) is False: + downloadParams.append( + { + "url": "https://huggingface.co/rinna/japanese-hubert-base/resolve/main/fairseq/model.pt", + "saveTo": voiceChangerParams.hubert_base_jp, + "position": 1, + } + ) + if os.path.exists(voiceChangerParams.hubert_soft) is False: + downloadParams.append( + { + "url": "https://huggingface.co/wok000/weights/resolve/main/ddsp-svc30/embedder/hubert-soft-0d54a1f4.pt", + "saveTo": voiceChangerParams.hubert_soft, + "position": 2, + } + ) + if os.path.exists(voiceChangerParams.nsf_hifigan) is False: + downloadParams.append( + { + "url": "https://huggingface.co/wok000/weights/resolve/main/ddsp-svc30/nsf_hifigan_20221211/model.bin", + "saveTo": voiceChangerParams.nsf_hifigan, + "position": 3, + } + ) + nsf_hifigan_config = os.path.join( + os.path.dirname(voiceChangerParams.nsf_hifigan), "config.json" + ) + + if os.path.exists(nsf_hifigan_config) is False: + downloadParams.append( + { + "url": "https://huggingface.co/wok000/weights/raw/main/ddsp-svc30/nsf_hifigan_20221211/config.json", + "saveTo": nsf_hifigan_config, + "position": 4, + } + ) + + with ThreadPoolExecutor() as pool: + pool.map(download, downloadParams) + + if ( + os.path.exists(voiceChangerParams.hubert_base) is False + or os.path.exists(voiceChangerParams.hubert_base_jp) is False + ): + printMessage("RVC用のモデルファイルのダウンロードに失敗しました。", level=2) + printMessage("failed to download weight for rvc", level=2) + + parser = setupArgParser() args, unknown = parser.parse_known_args() @@ -221,6 +290,9 @@ if __name__ == "__main__": mp.freeze_support() printMessage("Voice Changerを起動しています。", level=2) + + downloadWeight() + PORT = args.p if os.getenv("EX_PORT"): diff --git a/server/voice_changer/VoiceChanger.py b/server/voice_changer/VoiceChanger.py index 95d30431..b1c80c7f 100755 --- a/server/voice_changer/VoiceChanger.py +++ b/server/voice_changer/VoiceChanger.py @@ -209,41 +209,46 @@ class VoiceChanger: ) def switchModelType(self, modelType: ModelType): - if hasattr(self, "voiceChanger") and self.voiceChanger is not None: - # return {"status": "ERROR", "msg": "vc is already selected. currently re-select is not implemented"} - del self.voiceChanger - self.voiceChanger = None + try: + print("switch model type", 1) + if hasattr(self, "voiceChanger") and self.voiceChanger is not None: + # return {"status": "ERROR", "msg": "vc is already selected. currently re-select is not implemented"} + del self.voiceChanger + self.voiceChanger = None - self.modelType = modelType - if self.modelType == "MMVCv15": - from voice_changer.MMVCv15.MMVCv15 import MMVCv15 + self.modelType = modelType + if self.modelType == "MMVCv15": + from voice_changer.MMVCv15.MMVCv15 import MMVCv15 - self.voiceChanger = MMVCv15() # type: ignore - elif self.modelType == "MMVCv13": - from voice_changer.MMVCv13.MMVCv13 import MMVCv13 + self.voiceChanger = MMVCv15() # type: ignore + elif self.modelType == "MMVCv13": + from voice_changer.MMVCv13.MMVCv13 import MMVCv13 - self.voiceChanger = MMVCv13() - elif self.modelType == "so-vits-svc-40v2": - from voice_changer.SoVitsSvc40v2.SoVitsSvc40v2 import SoVitsSvc40v2 + self.voiceChanger = MMVCv13() + elif self.modelType == "so-vits-svc-40v2": + from voice_changer.SoVitsSvc40v2.SoVitsSvc40v2 import SoVitsSvc40v2 - self.voiceChanger = SoVitsSvc40v2(self.params) - elif self.modelType == "so-vits-svc-40" or self.modelType == "so-vits-svc-40_c": - from voice_changer.SoVitsSvc40.SoVitsSvc40 import SoVitsSvc40 + self.voiceChanger = SoVitsSvc40v2(self.params) + elif self.modelType == "so-vits-svc-40" or self.modelType == "so-vits-svc-40_c": + from voice_changer.SoVitsSvc40.SoVitsSvc40 import SoVitsSvc40 - self.voiceChanger = SoVitsSvc40(self.params) - elif self.modelType == "DDSP-SVC": - from voice_changer.DDSP_SVC.DDSP_SVC import DDSP_SVC + self.voiceChanger = SoVitsSvc40(self.params) + elif self.modelType == "DDSP-SVC": + print("switch model type", 2) + from voice_changer.DDSP_SVC.DDSP_SVC import DDSP_SVC - self.voiceChanger = DDSP_SVC(self.params) - elif self.modelType == "RVC": - from voice_changer.RVC.RVC import RVC + self.voiceChanger = DDSP_SVC(self.params) + elif self.modelType == "RVC": + from voice_changer.RVC.RVC import RVC - self.voiceChanger = RVC(self.params) - else: - from voice_changer.MMVCv13.MMVCv13 import MMVCv13 - - self.voiceChanger = MMVCv13() + self.voiceChanger = RVC(self.params) + else: + from voice_changer.MMVCv13.MMVCv13 import MMVCv13 + self.voiceChanger = MMVCv13() + except Exception as e: + print(e) + print(traceback.format_exc()) return {"status": "OK", "msg": "vc is switched."} def getModelType(self):