initial refactor of rvc studio
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
|
||||
import hashlib
|
||||
import os
|
||||
import torch.nn.functional as F
|
||||
import librosa
|
||||
import torch
|
||||
|
||||
def get_hash(model_path):
|
||||
try:
|
||||
with open(model_path, 'rb') as f:
|
||||
f.seek(- 10000 * 1024, 2)
|
||||
model_hash = hashlib.md5(f.read()).hexdigest()
|
||||
except:
|
||||
model_hash = hashlib.md5(open(model_path, 'rb').read()).hexdigest()
|
||||
|
||||
return model_hash
|
||||
|
||||
def load_hubert(model_path,config):
|
||||
try:
|
||||
from fairseq import checkpoint_utils
|
||||
models, _, _ = checkpoint_utils.load_model_ensemble_and_task([model_path],suffix="",)
|
||||
hubert_model = models[0]
|
||||
hubert_model = hubert_model.to(config.device)
|
||||
if config.is_half:
|
||||
hubert_model = hubert_model.half()
|
||||
else:
|
||||
hubert_model = hubert_model.float()
|
||||
hubert_model.eval()
|
||||
return hubert_model
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return None
|
||||
|
||||
def change_rms(data1, sr1, data2, sr2, rate): # 1是输入音频,2是输出音频,rate是2的占比
|
||||
# print(data1.max(),data2.max())
|
||||
rms1 = librosa.feature.rms(
|
||||
y=data1, frame_length=sr1 // 2 * 2, hop_length=sr1 // 2
|
||||
) # 每半秒一个点
|
||||
rms2 = librosa.feature.rms(y=data2, frame_length=sr2 // 2 * 2, hop_length=sr2 // 2)
|
||||
rms1 = torch.from_numpy(rms1)
|
||||
rms1 = F.interpolate(
|
||||
rms1.unsqueeze(0), size=data2.shape[0], mode="linear"
|
||||
).squeeze()
|
||||
rms2 = torch.from_numpy(rms2)
|
||||
rms2 = F.interpolate(
|
||||
rms2.unsqueeze(0), size=data2.shape[0], mode="linear"
|
||||
).squeeze()
|
||||
rms2 = torch.max(rms2, torch.zeros_like(rms2) + 1e-6)
|
||||
data2 *= (
|
||||
torch.pow(rms1, torch.tensor(1 - rate))
|
||||
* torch.pow(rms2, torch.tensor(rate - 1))
|
||||
).numpy()
|
||||
return data2
|
||||
Reference in New Issue
Block a user