Log in to leave a comment
No posts yet
毎月決済される ElevenLabs や OpenAI の TTS 請求書を見るとため息が出ます。インディーゲーム開発者にとって API 呼び出し費用は、プロジェクトの息の根を止める固定支出です。Kokoro 82M は Apache 2.0 ライセンスを持つオープンソースモデルで、ローカル環境で商用レベルの音声を生成します。8,200万個のパラメータで構成されたこの軽量モデルを自分の PC に載せれば、もう外部サーバーのポリシー変更に振り回される必要はありません。
ローカルモデルを動かす際の最大の懸念は、ゲームのフレームがカクつく現象です。音声合成時に発生する CPU 負荷を防止するには、演算スレッドを強制的に制御する必要があります。Kokoro 82M は StyleTTS 2 構造に従っているため、ONNX ランタイムで駆動する際に最も効率的です。
SessionOptions で intra_op_num_threads を全コアの半分以下に制限してください。8コア CPU なら 2~4個割り当てるだけで十分です。enable_cpu_mem_arena をオンにしてメモリ断片化を防ぐ必要があります。これはバックグラウンドでオーディオを生成する際に発生する微細なラグを抑えてくれます。asyncio キューを使用して、最初のデータチャンクが出力された直後にオーディオデバイスへ送信する必要があります。この設定を行うことで、最初の音声が出るまでの時間 (TTFA) を 0.5秒未満に短縮できます。
Kokoro 82M がいかに優れていても、「API」を「アピ」と読んだり、「10%」を適切に処理できなかったりすると没入感が削がれます。このモデルは国際音声記号 (IPA) に基づいて学習されているため、入力テキストを正規化するプロセスが必須です。
単にテキストを投入するのではなく、正規表現のマッピング辞書を作成してください。r'\bAPI\b' は「エイピーアイ」に、数字は「ハンゲ(1個)」、「イルパーセント(1%)」のように文脈に合わせて韓国語で展開して渡す必要があります。特に韓国語特有の連音法則は、korean-text-normalizer のようなライブラリを補助的に使うことで解決します。手動で音声ファイルを編集して夜を明かしていた時間を、週に 5時間は節約できるはずです。
既存の OpenAI SDK コードをすべて書き直す必要はありません。ローカルホストに FastAPI で軽量サーバーを立ち上げれば、エンドポイントのアドレスを一行修正するだけで有料 API を代替できます。
/v1/audio/speech パスを作成し、OpenAI 規格の JSON データを受け取るように設計します。INT8 量子化モデルをロードしてください。推論速度が標準モデルより 3倍以上速く、耳で聞く音質の差はわずかです。pydub で加工し、.mp3 や .wav として即座に返します。こうすることで、有料サービスに依存していたコードベースを維持したまま、毎月の購読料だけをきれいに排除できます。
軽量モデルは 500字以上の長い文章を一度に処理すると、後半の発音がもつれたり機械音が混ざったりする限界があります。これを解決するには、文章をインテリジェントに分割する必要があります。
句読点を基準に文章を分割した後、AudioSegment.silent を活用して文章の間に 200~500ms の無音を強制的に挿入してください。人間の呼吸周期をシミュレートするだけで、モデルの不自然さが解消されます。単にテキストを分けるのではなく、オーディオの断片を自然につなぎ合わせるシームレス再生ロジックが核心です。このプロセスを自動化すれば、長い台詞も途切れることなく自然な演技が可能になります。