vllm_omni.diffusion.models.soulx_singer.modules.preprocess.rmvpe ¶
RMVPE F0 extractor.
All model code is inlined (originally from RickyL-2000/ROSVOT modules/pe/rmvpe/) with two minor substitutions:
librosa.filters.mel→torchaudio.functional.melscale_fbanks(already used elsewhere in vllm-omni);librosa.sequence.viterbi→ hand-written numpy viterbi (non-default path).pyworld(deprecated) → removed.
BiGRU ¶
ConvBlockRes ¶
Bases: Module
conv instance-attribute ¶
conv = nn.Sequential(
nn.Conv2d(
in_channels,
out_channels,
kernel_size=(3, 3),
stride=(1, 1),
padding=(1, 1),
bias=False,
),
nn.BatchNorm2d(out_channels, momentum=momentum),
nn.ReLU(),
nn.Conv2d(
out_channels,
out_channels,
kernel_size=(3, 3),
stride=(1, 1),
padding=(1, 1),
bias=False,
),
nn.BatchNorm2d(out_channels, momentum=momentum),
nn.ReLU(),
)
Decoder ¶
DeepUnet0 ¶
Bases: Module
decoder instance-attribute ¶
decoder = Decoder(
self.encoder.out_channel,
en_de_layers,
kernel_size,
n_blocks,
)
encoder instance-attribute ¶
encoder = Encoder(
in_channels,
_N_MELS,
en_de_layers,
kernel_size,
n_blocks,
en_out_channels,
)
intermediate instance-attribute ¶
intermediate = Intermediate(
self.encoder.out_channel // 2,
self.encoder.out_channel,
inter_layers,
n_blocks,
)
E2E0 ¶
Bases: Module
E2E0 pitch estimator network (DeepUnet0 + CNN + BiGRU + classifier).
Encoder ¶
Bases: Module
Intermediate ¶
MelSpectrogram ¶
Bases: Module
Mel-spectrogram extractor matching ROSVOT's MelSpectrogram.
Log-mel spectrogram via torch.stft + adaptive filterbank.
RMVPE ¶
Bases: Module, SupportAudioInput, SupportsComponentDiscovery
RMVPE F0 extractor (SoulX-Singer).
Wraps the E2E0 model with mel-spectrogram front-end and decoding post-processing.
mel_extractor instance-attribute ¶
mel_extractor = MelSpectrogram(
_N_MELS,
RMVPE_SAMPLE_RATE,
_WINDOW_LENGTH,
hop_length,
None,
_MEL_FMIN,
_MEL_FMAX,
).to(self.device)
get_pitch ¶
get_pitch(
waveform,
sample_rate: int,
hop_size: int,
length: int,
interp_uv: bool = False,
fmin: float = 50,
fmax: float = 1000,
) -> tuple[ndarray, ndarray]
get_pitch_batch ¶
get_pitch_batch(
waveforms,
sample_rate: int,
hop_size: int,
lengths: list[int],
interp_uv: bool = False,
fmin: float = 50,
fmax: float = 1000,
) -> tuple[list[ndarray], list[ndarray]]
infer_from_audio ¶
infer_from_audio(
audio: ndarray,
sample_rate: int = 16000,
thread: float = 0.03,
use_viterbi: bool = False,
) -> ndarray
infer_from_audio_batch ¶
infer_from_audio_batch(
audios,
sample_rate: int = 16000,
thread: float = 0.03,
use_viterbi: bool = False,
) -> list[ndarray]
postprocess ¶
ResDecoderBlock ¶
Bases: Module
conv1 instance-attribute ¶
conv1 = nn.Sequential(
nn.ConvTranspose2d(
in_channels,
out_channels,
kernel_size=(3, 3),
stride=stride,
padding=(1, 1),
output_padding=out_padding,
bias=False,
),
nn.BatchNorm2d(out_channels, momentum=momentum),
nn.ReLU(),
)
ResEncoderBlock ¶
Bases: Module
TimbreFilter ¶
numpy_viterbi ¶
Viterbi decoding on log-probabilities (numpy).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prob | ndarray | Emission probabilities, shape (n_states, n_obs). | required |
transition | ndarray | Transition matrix, shape (n_states, n_states), row-stochastic. | required |
Returns:
| Name | Type | Description |
|---|---|---|
path | ndarray | Most likely state sequence, shape (n_obs,). |
resample_align_curve ¶
resample_align_curve(
points: ndarray,
original_timestep: float,
target_timestep: float,
align_length: int = -1,
) -> ndarray
Align a curve from one time grid to another via linear interpolation.