suzuna / ph1 brushup

Kotoha Ph1 Brush-up

1. UI改善(UI_Brushup_Phase1.mdより)

1-1. 試聴エリアの再生ボタン

  • 未選択状態でもボタンの形が視認できるよう --color-primary-muted で塗る
  • disabled時は opacity: 0.4 + cursor: not-allowed

1-2. サイドバー幅

  • 220px → 240px に拡張
  • 「TTSスタジオ」が1行に収まるように

1-3. GPU/CPUバッジ

  • CPUモード時: --color-warning(橙系)ベース
  • GPUモード時: --color-primary(グリーン)ベース

1-4. 録音ボタン

  • マイク未接続時は明示的にdisabled(グレーアウト)
  • ホバー時にツールチップ「マイク未接続」表示

2. 推論パラメーター拡張

2-1. APIスキーマ追加

interface ConvertRequest {
  // 既存
  input_path: string
  model_path: string
  index_path?: string
  pitch_shift: number
  index_rate: number
  f0_method: string

  // 追加
  rms_mix_rate: number   // 音量エンベロープ融合率 0〜1    default: 0.25
  protect: number        // 子音・呼吸音保護      0〜0.5  default: 0.33
  filter_radius: number  // メディアンフィルター   0〜7    default: 3
  resample_sr: number    // リサンプリング         0=なし  default: 0
}

2-2. Python側(convert.py)

@app.post("/convert")
async def convert(req: ConvertRequest):
    rvc.infer_file(
        req.input_path,
        req.output_path,
        f0_up_key=req.pitch_shift,
        f0_method=req.f0_method,
        index_rate=req.index_rate,
        rms_mix_rate=req.rms_mix_rate,   # 追加
        protect=req.protect,              # 追加
        filter_radius=req.filter_radius,  # 追加
        resample_sr=req.resample_sr,      # 追加
    )

2-3. UI追加(ConvertPage.tsx)

詳細設定をアコーディオンで折りたたむ。初心者はデフォルトのまま使え、こだわる人だけ触れる設計。

変換設定
├─ モデル選択        (既存)
├─ ピッチ            (既存)
├─ インデックス強度  (既存)
├─ F0推定            (既存)
└─ [詳細設定 ▼]
    ├─ 音量融合率     slider 0〜1    default: 0.25
    ├─ 子音保護       slider 0〜0.5  default: 0.33
    └─ フィルター強度 slider 0〜7    default: 3