Miko voice for piper-plus
A small Japanese text-to-speech model that speaks as Miko, the official
character of AITuber OnAir.
It is a piper-plus VITS model
fine-tuned from the multilingual zs-v1 base, exported to ONNX in FP16 so it
runs in the browser with WebAssembly.
The voice is synthetic. The training audio was generated with Irodori-TTS from a designed voice; no person was recorded.
Two versions are available. sample-voice-v2 is the recommended one; it is
closer to the teacher voice in intonation and tempo and makes fewer reading
errors, at the same size and with the same inputs as v1.
Files
| File | Size | Purpose |
|---|---|---|
sample-voice-v2.onnx |
about 38 MB | FP16 ONNX model (recommended) |
sample-voice-v2.onnx.json |
6 KB | piper-plus model config for v2 |
sample-voice-v1.onnx |
about 38 MB | FP16 ONNX model (previous version) |
sample-voice-v1.onnx.json |
6 KB | piper-plus model config for v1 |
- Sample rate: 22,050 Hz, mono
- Inputs:
input,input_lengths,scales,lid,prosody_features - Language id:
ja= 0 (the model is based on a six-language table but was fine-tuned on Japanese only) - Suggested
length_scale: 1.07 for v2, 1.1 for v1 (slightly slower than each model's native pace)
Usage
With @aituber-onair/voice 0.27.0 or later, which builds the padded phoneme
sequence this model expects:
import { PiperPlusEngine } from '@aituber-onair/voice';
const engine = new PiperPlusEngine();
engine.setAssets({
basePath: '/piper/', // piper-plus web runtime + OpenJTalk dictionary
modelConfigFile: 'sample-voice-v2.onnx.json',
modelFile: 'sample-voice-v2.onnx',
voiceFile: 'mei_normal.htsvoice',
});
engine.setSpeed(0.93); // length_scale = 1 / speed ≈ 1.07
engine.setNoiseScale(0.667);
const wav = await engine.fetchAudio({ style: 'talk', message: 'こんにちは' }, '');
The piper-plus web runtime (npm install piper-plus) can load the same files
through its multilingual code path.
Training
Both versions:
- Base: piper-plus
zs-v1(ayousanz/piper-plus-base,releases/zs-v1) - Fine-tuned as a single speaker on synthetic Japanese speech; training sentences are original sentences plus the public-domain ITA corpus
- Exported with piper-plus 2.0.0
v2:
- About 3.8 hours of training audio (3,674 sentences), about 4.6 times v1
- Training phoneme sequences rebuilt in the same padded format the inference path produces (v1 was trained on an unpadded format, which made it slower and pulled its intonation toward the base model)
- Speaker conditioning folded into the language embedding before fine-tuning, and the duration predictor trained instead of frozen
- 120 epochs
v1:
- About 0.8 hours of training audio (734 sentences)
- 300 epochs, duration predictor frozen
Evaluation
Averages over 50 held-out test sentences, compared with the teacher audio.
| Metric | Teacher | v1 | v2 |
|---|---|---|---|
| Speaker similarity (CAM++) | 0.83 | 0.70 | 0.73 |
| F0 correlation with the teacher | - | 0.48 | 0.64 |
| F0 error (cents, lower is better) | - | 362 | 311 |
| Pitch range (relative to reference) | - | 0.89 | 0.99 |
| Character error rate (Whisper) | 1.0% | 4.7% | 2.0% |
| Naturalness (UTMOSv2) | 2.32 | 1.77 | 1.86 |
| Speaking rate (morae/s) | 7.08 | 7.61 | 7.51 |
v2 still sounds slightly rougher than the teacher.
License and notices
- Model weights: MIT, following the base model. See
BASE_MODEL_LICENSE.txtandBASE_MODEL_NOTICE.mdfor the base model's provenance, including the datasets its authors used. - Miko is the character of AITuber OnAir, © Yuki Shindo. Use of the character follows the Miko Character Usage Guidelines.
- Do not present output from this model as a recording of a real person.