A lightweight singing-voice synthesizer. The multi-speaker acoustic model (harmonic-excitation rectified flow, one step) predicts a mel-spectrogram, rendered to audio by the bundled NHVSing vocoder. This page puts the released versions side by side:
The two models on the 71 held-out phrases (songs never seen in training), synthesised in one step from the true phoneme durations and F0 and measured with tools/eval_ab.py. Ratios are generated / recording, so 1 means "like the recording"; per-band values are 68 Hz–945 Hz / 973 Hz–2.4 kHz / 2.5–6.1 kHz / 6.3–15.5 kHz. Bold = closer to the recording (ratios closer to 1, offsets closer to 0, error lower).
| metric | V1 | V2 |
|---|---|---|
| Fine time texture (per band) | 0.86 / 0.91 / 0.94 / 0.92 | 0.92 / 0.95 / 0.99 / 1.01 |
| Spectral-shape peaks and valleys, consonants (per band) | 0.95 / 0.86 / 0.73 / 0.72 | 1.04 / 0.96 / 0.88 / 0.93 |
| Spectral-shape peaks and valleys, vowels (per band) | 0.99 / 0.97 / 0.86 / 0.78 | 1.02 / 1.01 / 0.90 / 0.87 |
| Motion at the phoneme rate, 30–150 ms, vowels (per band) | 0.93 / 0.95 / 0.92 / 0.87 | 0.98 / 0.99 / 0.99 / 0.98 |
| Harmonic peak roughness, < 1 kHz / 1–3 kHz (above 1 = jagged) | 1.57 / 1.34 | 1.20 / 1.12 |
| Harmonic valley level vs recording (+ = valleys filled in) | +0.7 / +0.7 dB | −0.6 / −0.5 dB |
| Regular (GAN-like) pattern, largest excess (per band) | 2.8 / 2.4 / 2.1 / 6.3 dB | 0.7 / 1.4 / 1.7 / 2.3 dB |
| Steadiness inside long vowels | 0.91 | 1.03 |
| Mel error against each model's own training target (non-silent frames) | 5.08 dB | 5.32 dB |
| The same after smoothing both by 21 frames × 21 bins (coarse shape only) | 2.44 dB | 2.32 dB |
| Phrase-level level offset | 0.95 dB | 0.64 dB |
Per singer, 3 phrases from training songs and 2 from held-out songs (eval, never seen in training), driven by the real F0, durations and phonemes taken from each recording. Columns: the original audio, the synthesis by V1 / V2, the GT mel, and for each version the model's mel (top) with the mel of the vocoded output (bottom). mel-L1 (shown for V1) is the L1 distance to the GT mel (lower = closer); it does not track perception, so judge by ear. The other versions train on a loudness-corrected target, so their distance to the raw GT is not comparable and is not shown.
| phrase | GT audio | V1 audio | V2 audio | GT mel | V1 mel | V2 mel |
|---|---|---|---|---|---|---|
| fujino_yama_0000 train 5.5s | mel-L1 1.049 | ![]() | model vocoded | model vocoded | ||
| hamabeno_uta_0003 train 6.7s | mel-L1 0.904 | ![]() | model vocoded | model vocoded | ||
| kachushano_uta_0005 train 5.2s | mel-L1 0.768 | ![]() | model vocoded | model vocoded | ||
| sakura_sakura_0001 eval 5.7s | mel-L1 1.306 | ![]() | model vocoded | model vocoded | ||
| sakura_sakura_0006 eval 5.8s | mel-L1 1.388 | ![]() | model vocoded | model vocoded |
| phrase | GT audio | V1 audio | V2 audio | GT mel | V1 mel | V2 mel |
|---|---|---|---|---|---|---|
| 12_0001 train 3.8s | mel-L1 0.817 | ![]() | model vocoded | model vocoded | ||
| 1_0012 train 4.8s | mel-L1 0.797 | ![]() | model vocoded | model vocoded | ||
| 23_0002 train 4.7s | mel-L1 0.983 | ![]() | model vocoded | model vocoded | ||
| 46_0006 eval 4.7s | mel-L1 0.792 | ![]() | model vocoded | model vocoded | ||
| 46_0016 eval 5.0s | mel-L1 1.112 | ![]() | model vocoded | model vocoded |
| phrase | GT audio | V1 audio | V2 audio | GT mel | V1 mel | V2 mel |
|---|---|---|---|---|---|---|
| FACE_0000 train 4.8s | mel-L1 0.859 | ![]() | model vocoded | model vocoded | ||
| byebye_aimai_sound_0009 train 4.7s | mel-L1 0.659 | ![]() | model vocoded | model vocoded | ||
| dokomademomukuni_0000 train 3.9s | mel-L1 0.843 | ![]() | model vocoded | model vocoded | ||
| FlashBlack_0004 eval 4.2s | mel-L1 0.859 | ![]() | model vocoded | model vocoded | ||
| night_shief_0002 eval 5.5s | mel-L1 0.930 | ![]() | model vocoded | model vocoded |
These are songs the model has never seen, sung from a musical score. The score is turned into an F0 curve and phoneme durations by our pitch and duration models, then the acoustic model and the NHVSing vocoder render the audio. Three children’s songs, each sung by all three voices, every version stacked in each cell.
| song | Oniku Kurumi | Natsume Yuuri | Namine Ritsu |
|---|---|---|---|
| Furusato · ふるさと | V1V2 | V1V2 | V1V2 |
| Haru no Ogawa · 春の小川 | V1V2 | V1V2 | V1V2 |
| Kirakiraboshi · きらきら星 | V1V2 | V1V2 | V1V2 |
Bonus — Momiji (もみじ), a three-part chorus. The three voices arranged into harmony (V1).
The full model carries Namine Ritsu’s three voice styles — default (kire), normal, and soft. One phrase (a real recording, re-rendered by copy-synthesis) is sung with the style blended continuously from default toward normal, and toward soft. Only the timbre changes — the notes, timing and pitch stay identical. This section uses the V1 three-style model (v0.1.0); the later release models have no style input.
Original recording (reference):
| blend → | 0% default | 25% | 50% | 75% | 100% |
|---|---|---|---|---|---|
| → normal | |||||
| → soft |