| | import torch |
| | import numpy as np |
| |
|
| | class DJCMExtractor: |
| | def __init__(self, model_path, device="cuda"): |
| | self.device = device |
| | self.model = torch.jit.load(model_path, map_location=device) |
| | self.model.eval() |
| |
|
| | def __call__(self, audio, sr=16000): |
| | """ |
| | audio: numpy array (1D, float32) |
| | sr: sample rate (default 16k atau sesuaikan dengan DJCM) |
| | return: f0 contour (numpy array 1D) |
| | """ |
| | x = torch.tensor(audio, dtype=torch.float32, device=self.device).unsqueeze(0) |
| | with torch.no_grad(): |
| | f0 = self.model(x, sr) |
| | return f0.squeeze().cpu().numpy() |
| |
|