| | import infer_web |
| | import wget |
| | import os |
| | import scipy.io.wavfile as wavfile |
| | from utils import model |
| | import validators |
| | from myutils import delete_files |
| |
|
| | class Inference: |
| | |
| | inference_cont = 0 |
| | |
| | def __init__( |
| | self, |
| | model_name=None, |
| | source_audio_path=None, |
| | output_file_name=None, |
| | feature_index_path="", |
| | f0_file=None, |
| | speaker_id=0, |
| | transposition=-2, |
| | f0_method="harvest", |
| | crepe_hop_length=160, |
| | harvest_median_filter=3, |
| | resample=0, |
| | mix=1, |
| | feature_ratio=0.78, |
| | protection_amnt=0.33, |
| | protect1=False |
| | ): |
| | Inference.inference_cont += 1 |
| | self._model_name = model_name |
| | self._source_audio_path = source_audio_path |
| | self._output_file_name = output_file_name |
| | self._feature_index_path = feature_index_path |
| | self._f0_file = f0_file |
| | self._speaker_id = speaker_id |
| | self._transposition = transposition |
| | self._f0_method = f0_method |
| | self._crepe_hop_length = crepe_hop_length |
| | self._harvest_median_filter = harvest_median_filter |
| | self._resample = resample |
| | self._mix = mix |
| | self._feature_ratio = feature_ratio |
| | self._protection_amnt = protection_amnt |
| | self._protect1 = protect1 |
| | self._id = Inference.inference_cont |
| |
|
| | if not os.path.exists("./hubert_base.pt"): |
| | wget.download( |
| | "https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt", out="./hubert_base.pt") |
| | |
| | if not os.path.exists("./rmvpe.pt"): |
| | wget.download( |
| | "https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt", out="./rmvpe.pt" |
| | ) |
| | |
| | @property |
| | def id(self): |
| | return self._id |
| |
|
| | @id.setter |
| | def id(self, id): |
| | self._id = id |
| | |
| | @property |
| | def audio(self): |
| | return self._audio |
| |
|
| | @audio.setter |
| | def audio_file(self, audio): |
| | self._audio_file = audio |
| |
|
| | @property |
| | def model_name(self): |
| | return self._model_name |
| |
|
| | @model_name.setter |
| | def model_name(self, model_name): |
| | self._model_name = model_name |
| |
|
| | @property |
| | def source_audio_path(self): |
| | return self._source_audio_path |
| |
|
| | @source_audio_path.setter |
| | def source_audio_path(self, source_audio_path): |
| | if not self._output_file_name: |
| | self._output_file_name = os.path.join("./audio-outputs", os.path.basename(source_audio_path)) |
| | self._source_audio_path = source_audio_path |
| |
|
| | @property |
| | def output_file_name(self): |
| | return self._output_file_name |
| |
|
| | @output_file_name.setter |
| | def output_file_name(self, output_file_name): |
| | self._output_file_name = output_file_name |
| |
|
| | @property |
| | def feature_index_path(self): |
| | return self._feature_index_path |
| |
|
| | @feature_index_path.setter |
| | def feature_index_path(self, feature_index_path): |
| | self._feature_index_path = feature_index_path |
| |
|
| | @property |
| | def f0_file(self): |
| | return self._f0_file |
| |
|
| | @f0_file.setter |
| | def f0_file(self, f0_file): |
| | self._f0_file = f0_file |
| |
|
| | @property |
| | def speaker_id(self): |
| | return self._speaker_id |
| |
|
| | @speaker_id.setter |
| | def speaker_id(self, speaker_id): |
| | self._speaker_id = speaker_id |
| |
|
| | @property |
| | def transposition(self): |
| | return self._transposition |
| |
|
| | @transposition.setter |
| | def transposition(self, transposition): |
| | self._transposition = transposition |
| |
|
| | @property |
| | def f0_method(self): |
| | return self._f0_method |
| |
|
| | @f0_method.setter |
| | def f0_method(self, f0_method): |
| | self._f0_method = f0_method |
| |
|
| | @property |
| | def crepe_hop_length(self): |
| | return self._crepe_hop_length |
| |
|
| | @crepe_hop_length.setter |
| | def crepe_hop_length(self, crepe_hop_length): |
| | self._crepe_hop_length = crepe_hop_length |
| |
|
| | @property |
| | def harvest_median_filter(self): |
| | return self._harvest_median_filter |
| |
|
| | @crepe_hop_length.setter |
| | def harvest_median_filter(self, harvest_median_filter): |
| | self._harvest_median_filter = harvest_median_filter |
| |
|
| | @property |
| | def resample(self): |
| | return self._resample |
| |
|
| | @resample.setter |
| | def resample(self, resample): |
| | self._resample = resample |
| |
|
| | @property |
| | def mix(self): |
| | return self._mix |
| |
|
| | @mix.setter |
| | def mix(self, mix): |
| | self._mix = mix |
| |
|
| | @property |
| | def feature_ratio(self): |
| | return self._feature_ratio |
| |
|
| | @feature_ratio.setter |
| | def feature_ratio(self, feature_ratio): |
| | self._feature_ratio = feature_ratio |
| |
|
| | @property |
| | def protection_amnt(self): |
| | return self._protection_amnt |
| |
|
| | @protection_amnt.setter |
| | def protection_amnt(self, protection_amnt): |
| | self._protection_amnt = protection_amnt |
| |
|
| | @property |
| | def protect1(self): |
| | return self._protect1 |
| |
|
| | @protect1.setter |
| | def protect1(self, protect1): |
| | self._protect1 = protect1 |
| |
|
| | def run(self): |
| | current_dir = os.getcwd() |
| | modelname = model.model_downloader(self._model_name, "./zips/", "./weights/") |
| | |
| | model_info = model.get_model(os.path.join(current_dir, 'weights') , modelname) |
| | if not model_info: |
| | return "No se encontrado un modelo valido, verifica el contenido del enlace e intentalo más tarde." |
| |
|
| | if not model_info.get('pth'): |
| | return "No se encontrado un modelo valido, verifica el contenido del enlace e intentalo más tarde." |
| | |
| | index = model_info.get('index', '') |
| | pth = model_info.get('pth', None) |
| | |
| | infer_web.get_vc(pth) |
| | |
| | conversion_data = infer_web.vc_single( |
| | self.speaker_id, |
| | self.source_audio_path, |
| | self.source_audio_path, |
| | self.transposition, |
| | self.f0_file, |
| | self.f0_method, |
| | index, |
| | index, |
| | self.feature_ratio, |
| | self.harvest_median_filter, |
| | self.resample, |
| | self.mix, |
| | self.protection_amnt, |
| | self.crepe_hop_length, |
| | ) |
| | |
| | if "Success." in conversion_data[0]: |
| | wavfile.write( |
| | "%s/%s" % ("audio-outputs",os.path.basename(self._output_file_name)), |
| | conversion_data[1][0], |
| | conversion_data[1][1], |
| | ) |
| | return({ |
| | "success": True, |
| | "file": self._output_file_name |
| | }) |
| | else: |
| | return({ |
| | "success": False, |
| | "file": self._output_file_name |
| | }) |
| | |