From 9eef8fcb11e907f2401d859ba2317953ecc070c9 Mon Sep 17 00:00:00 2001 From: w-okada Date: Sat, 15 Jul 2023 23:39:02 +0900 Subject: [PATCH] WIP: refactor --- server/voice_changer/VoiceChanger.py | 6 ++--- server/voice_changer/VoiceChangerManager.py | 3 --- server/voice_changer/VoiceChangerV2.py | 7 ++--- server/voice_changer/utils/VoiceChangerIF.py | 28 ++++++++++++++++++++ 4 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 server/voice_changer/utils/VoiceChangerIF.py diff --git a/server/voice_changer/VoiceChanger.py b/server/voice_changer/VoiceChanger.py index 3915338a..ad515609 100755 --- a/server/voice_changer/VoiceChanger.py +++ b/server/voice_changer/VoiceChanger.py @@ -12,6 +12,7 @@ import onnxruntime from voice_changer.IORecorder import IORecorder from voice_changer.utils.Timer import Timer +from voice_changer.utils.VoiceChangerIF import VoiceChangerIF from voice_changer.utils.VoiceChangerModel import AudioInOut, VoiceChangerModel from Exceptions import ( DeviceCannotSupportHalfPrecisionException, @@ -59,7 +60,7 @@ class VoiceChangerSettings: strData: list[str] = field(default_factory=lambda: []) -class VoiceChanger: +class VoiceChanger(VoiceChangerIF): ioRecorder: IORecorder sola_buffer: AudioInOut @@ -83,9 +84,6 @@ class VoiceChanger: def setModel(self, model: Any): self.voiceChanger = model - def getModelType(self): - return {"status": "OK", "vc": "-----"} - def get_info(self): data = asdict(self.settings) if self.voiceChanger is not None: diff --git a/server/voice_changer/VoiceChangerManager.py b/server/voice_changer/VoiceChangerManager.py index 7ce2eebd..91779539 100644 --- a/server/voice_changer/VoiceChangerManager.py +++ b/server/voice_changer/VoiceChangerManager.py @@ -280,9 +280,6 @@ class VoiceChangerManager(ServerDeviceCallbacks): print("Voice Change is not loaded. Did you load a correct model?") return np.zeros(1).astype(np.int16), [] - def getModelType(self): - return self.voiceChanger.getModelType() - def export2onnx(self): return self.voiceChanger.export2onnx() diff --git a/server/voice_changer/VoiceChangerV2.py b/server/voice_changer/VoiceChangerV2.py index b5e5be4b..b4c51802 100644 --- a/server/voice_changer/VoiceChangerV2.py +++ b/server/voice_changer/VoiceChangerV2.py @@ -22,6 +22,7 @@ import onnxruntime from voice_changer.IORecorder import IORecorder from voice_changer.utils.Timer import Timer +from voice_changer.utils.VoiceChangerIF import VoiceChangerIF from voice_changer.utils.VoiceChangerModel import AudioInOut, VoiceChangerModel from Exceptions import ( DeviceCannotSupportHalfPrecisionException, @@ -69,7 +70,7 @@ class VoiceChangerV2Settings: strData: list[str] = field(default_factory=lambda: []) -class VoiceChangerV2: +class VoiceChangerV2(VoiceChangerIF): ioRecorder: IORecorder sola_buffer: AudioInOut @@ -198,7 +199,7 @@ class VoiceChangerV2: block_frame = receivedData.shape[0] crossfade_frame = min(self.settings.crossFadeOverlapSize, block_frame) self._generate_strength(crossfade_frame) - # data = self.voiceChanger.generate_input(newData, block_frame, crossfade_frame, sola_search_frame) + # data = self.voiceChanger.generate_input(newData, block_frame, crossfade_frame, sola_search_frame) audio = self.voiceChanger.inference( receivedData, crossfade_frame=crossfade_frame, @@ -242,7 +243,7 @@ class VoiceChangerV2: else: self.sola_buffer = audio[-crossfade_frame:] * self.np_prev_strength # self.sola_buffer = audio[- crossfade_frame:] - + mainprocess_time = t.secs # 後処理 diff --git a/server/voice_changer/utils/VoiceChangerIF.py b/server/voice_changer/utils/VoiceChangerIF.py new file mode 100644 index 00000000..7bd77074 --- /dev/null +++ b/server/voice_changer/utils/VoiceChangerIF.py @@ -0,0 +1,28 @@ +from typing import Any, Protocol + +from voice_changer.utils.VoiceChangerModel import AudioInOut, VoiceChangerModel + + +class VoiceChangerIF(Protocol): + + def get_processing_sampling_rate() -> int: + ... + + def get_info(self) -> dict[str, Any]: + ... + + def get_performance(self) -> list[int]: + ... + + def setModel(model: VoiceChangerModel) -> None: + ... + + def update_settings(self, key: str, val: int | float | str) -> bool: + ... + + def on_request(receivedData: AudioInOut) -> tuple[AudioInOut, list[int | float]]: + ... + + def export2onnx() -> Any: + ... +