# Copyright 2021 Tomoki Hayashi
# Copyright 2021 Carnegie Mellon University (Jiatong Shi)
# Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
"""Singing-voice-synthesis abstrast class."""
from abc import ABC, abstractmethod
from typing import Dict, Tuple
import torch
[docs]class AbsSVS(torch.nn.Module, ABC):
"""SVS abstract class."""
[docs] @abstractmethod
def forward(
self,
text: torch.Tensor,
text_lengths: torch.Tensor,
feats: torch.Tensor,
feats_lengths: torch.Tensor,
**kwargs,
) -> Tuple[torch.Tensor, Dict[str, torch.Tensor], torch.Tensor]:
"""Calculate outputs and return the loss tensor."""
raise NotImplementedError
[docs] @abstractmethod
def inference(
self,
text: torch.Tensor,
**kwargs,
) -> Dict[str, torch.Tensor]:
"""Return predicted output as a dict."""
raise NotImplementedError
@property
def require_raw_singing(self):
"""Return whether or not raw_singing is required."""
return False
@property
def require_vocoder(self):
"""Return whether or not vocoder is required."""
return True