51 lines
2.3 KiB
Python
Raw Normal View History

2023-05-02 22:29:28 +09:00
from typing import Protocol
from const import PitchExtractorType
from voice_changer.RVC.pitchExtractor.CrepeOnnxPitchExtractor import CrepeOnnxPitchExtractor
2023-05-02 22:29:28 +09:00
from voice_changer.RVC.pitchExtractor.DioPitchExtractor import DioPitchExtractor
from voice_changer.RVC.pitchExtractor.HarvestPitchExtractor import HarvestPitchExtractor
2023-05-20 16:33:17 +09:00
from voice_changer.RVC.pitchExtractor.CrepePitchExtractor import CrepePitchExtractor
2023-05-02 22:29:28 +09:00
from voice_changer.RVC.pitchExtractor.PitchExtractor import PitchExtractor
2023-09-21 09:28:41 +09:00
from voice_changer.RVC.pitchExtractor.RMVPEOnnxPitchExtractor import RMVPEOnnxPitchExtractor
2023-07-18 23:02:06 +09:00
from voice_changer.RVC.pitchExtractor.RMVPEPitchExtractor import RMVPEPitchExtractor
from voice_changer.utils.VoiceChangerParams import VoiceChangerParams
2023-05-02 22:29:28 +09:00
class PitchExtractorManager(Protocol):
currentPitchExtractor: PitchExtractor | None = None
params: VoiceChangerParams
@classmethod
def initialize(cls, params: VoiceChangerParams):
cls.params = params
2023-05-02 22:29:28 +09:00
@classmethod
def getPitchExtractor(
cls, pitchExtractorType: PitchExtractorType, gpu: int
2023-05-02 22:29:28 +09:00
) -> PitchExtractor:
cls.currentPitchExtractor = cls.loadPitchExtractor(pitchExtractorType, gpu)
2023-05-02 22:29:28 +09:00
return cls.currentPitchExtractor
@classmethod
def loadPitchExtractor(
cls, pitchExtractorType: PitchExtractorType, gpu: int
2023-05-02 22:29:28 +09:00
) -> PitchExtractor:
if pitchExtractorType == "harvest":
2023-05-02 22:29:28 +09:00
return HarvestPitchExtractor()
elif pitchExtractorType == "dio":
2023-05-02 22:29:28 +09:00
return DioPitchExtractor()
elif pitchExtractorType == "crepe":
2023-07-23 23:01:35 +09:00
return CrepePitchExtractor(gpu)
elif pitchExtractorType == "crepe_tiny":
return CrepeOnnxPitchExtractor(pitchExtractorType, cls.params.crepe_onnx_tiny, gpu)
elif pitchExtractorType == "crepe_full":
return CrepeOnnxPitchExtractor(pitchExtractorType, cls.params.crepe_onnx_full, gpu)
2023-07-18 23:02:06 +09:00
elif pitchExtractorType == "rmvpe":
return RMVPEPitchExtractor(cls.params.rmvpe, gpu)
2023-08-26 13:48:03 +09:00
elif pitchExtractorType == "rmvpe_onnx":
2023-09-21 09:28:41 +09:00
return RMVPEOnnxPitchExtractor(cls.params.rmvpe_onnx, gpu)
2023-05-02 22:29:28 +09:00
else:
# return hubert as default
2023-07-15 10:01:42 +09:00
print("[Voice Changer] PitchExctractor not found", pitchExtractorType)
print(" fallback to dio")
return DioPitchExtractor()