| { |
| "description": "OpenVoice V2 ToneColorConverter を5つの CoreML モデルに分割。voice_conversion パスを再現する実行順序は以下の通り。", |
| "pipeline": [ |
| { |
| "step": 1, |
| "model": "ToneColorConverter_ReferenceEncoder.mlpackage", |
| "role": "参照音声の mel-spectrogram → tone color embedding v(C)", |
| "inputs": { |
| "spec": "[1, T, n_mels] float32" |
| }, |
| "outputs": { |
| "g": "[1, gin_channels, 1] float32" |
| } |
| }, |
| { |
| "step": 2, |
| "model": "ToneColorConverter_PosteriorEncoder.mlpackage", |
| "role": "ベース音声の STFT スペクトル → 潜在変数 z", |
| "inputs": { |
| "spec": "[1, n_fft, T] float32", |
| "spec_lengths": "[1] int32", |
| "g": "[1, gin_channels, 1] float32 (ソーススピーカーの g)" |
| }, |
| "outputs": { |
| "z": "[1, inter_channels, T] float32", |
| "y_mask": "[1, 1, T] float32" |
| } |
| }, |
| { |
| "step": 3, |
| "model": "ToneColorConverter_Flow_Forward.mlpackage", |
| "role": "z → z_p (ソーストーンカラー除去)", |
| "inputs": { |
| "z": "step2.z", |
| "y_mask": "step2.y_mask", |
| "g": "ソース g" |
| }, |
| "outputs": { |
| "z_p": "[1, inter_channels, T] float32" |
| } |
| }, |
| { |
| "step": 4, |
| "model": "ToneColorConverter_Flow_Reverse.mlpackage", |
| "role": "z_p → z_hat (ターゲットトーンカラー注入)", |
| "inputs": { |
| "z_p": "step3.z_p", |
| "y_mask": "step2.y_mask", |
| "g_tgt": "ターゲット g" |
| }, |
| "outputs": { |
| "z_hat": "[1, inter_channels, T] float32" |
| } |
| }, |
| { |
| "step": 5, |
| "model": "ToneColorConverter_Decoder.mlpackage", |
| "role": "z_hat → 波形 (HiFi-GAN)", |
| "inputs": { |
| "z_hat": "step4.z_hat", |
| "y_mask": "step2.y_mask", |
| "g": "ターゲット g" |
| }, |
| "outputs": { |
| "audio": "[1, 1, T_audio] float32" |
| } |
| } |
| ], |
| "hyperparameters": { |
| "sampling_rate": 22050, |
| "filter_length": 1024, |
| "hop_length": 256, |
| "win_length": 1024, |
| "n_fft": 513, |
| "inter_channels": 192, |
| "hidden_channels": 192, |
| "gin_channels": 256, |
| "upsample_rates": [ |
| 8, |
| 8, |
| 2, |
| 2 |
| ] |
| }, |
| "notes": [ |
| "MeloTTS (BaseSpeakerTTS) は可変長 tokenizer のため CoreML 化対象外。", |
| "ベース音声は Python/MeloTTS で生成し、そのスペクトルを step2 に渡す。", |
| "PosteriorEncoder は Core ML 用に後験平均 (tau=0 相当) のみ。PyTorch の randn サンプリングは含まない。", |
| "tone color embedding は事前計算して .pth/.bin で保存しておくと効率的。", |
| "iOS 推論時は AVAudioEngine で sampling_rate に合わせてリサンプリング要。" |
| ] |
| } |