voice-changer/server/voice_changer/RVC/inferencer/OnnxRVCInferencerNono.py
2023-09-06 08:04:39 +09:00

48 lines
1.6 KiB
Python

import torch
import numpy as np
from const import EnumInferenceTypes
from voice_changer.RVC.inferencer.OnnxRVCInferencer import OnnxRVCInferencer
class OnnxRVCInferencerNono(OnnxRVCInferencer):
def loadModel(self, file: str, gpu: int, inferencerTypeVersion: str | None = None):
super().loadModel(file, gpu, inferencerTypeVersion)
self.setProps(EnumInferenceTypes.onnxRVCNono, file, self.isHalf, gpu)
return self
def infer(
self,
feats: torch.Tensor,
pitch_length: torch.Tensor,
pitch: torch.Tensor | None,
pitchf: torch.Tensor | None,
sid: torch.Tensor,
convert_length: int | None,
) -> torch.Tensor:
if self.isHalf:
audio1 = self.model.run(
["audio"],
{
"feats": feats.cpu().numpy().astype(np.float16),
"p_len": pitch_length.cpu().numpy().astype(np.int64),
"sid": sid.cpu().numpy().astype(np.int64),
},
)
else:
audio1 = self.model.run(
["audio"],
{
"feats": feats.cpu().numpy().astype(np.float32),
"p_len": pitch_length.cpu().numpy().astype(np.int64),
"sid": sid.cpu().numpy().astype(np.int64),
},
)
if self.inferencerTypeVersion == "v2.1" or self.inferencerTypeVersion == "v1.1":
res = audio1[0]
else:
res = np.array(audio1)[0][0, 0]
res = np.clip(res, -1.0, 1.0)
return torch.tensor(res)