【要約】RVCのBase64を送っても動かない問題を解決したお話: AIに好きな声を与える方法 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
RVC APIの設計と実装における以下の課題がある。
- ・バリデーションの不備:
input_audio_pathが空だと処理が中断される。 - ・厳格すぎるパスチェック:Gradioの一時ファイル名がランダムで、
os.path.existsで失敗する。 - ・設計思想の乖離:RVCは「ファイル完結型」であり、Base64によるファイルレス通信を想定していない。
// Approach
既存機能を壊さず、UserScript専用のバイパスを増設する手法を採用。
1.
globによるワイルドカード検索:ランダムな一時ファイル名を特定し、確実にデータを捕捉する。2.戻り値の拡張:APIの戻り値に、隠しパラメータとして
US_Base64_Data(JSON形式のBase64)を追加。3.
requestRvcConversionの実装:VOICEVOXのWAVデータをBase64 URIに変換し、RVCへ送信・回収するロジックを構築。// Result
RVC本体の修正を伴うが、既存のWebUIの動作を維持したまま、UserScriptからBase64形式で音声データを直接扱える「専用の出口」を確立した。これにより、理論上の空論であったVOICEVOXとRVCの連携が、実用的な形へと昇華された。
Senior Engineer Insight
> 既存システムの設計思想(ファイル完結型)と、新しいユースケース(ファイルレス通信)の衝突を、「拡張」で解決した点が極めて実践的である。本体のロジックを破壊せず、戻り値に専用の出口を作る手法は、レガシーなシステムへの機能追加において非常に有効な戦略だ。ただし、APIの非公式な拡張となるため、本体のバージョンアップ時に互換性が失われるリスクには注意が必要である。スケーラビリティよりも、既存環境への低侵襲な統合を優先した、現場主義的な判断と言える。