llama.cppは、Pocket TTSモデルにあらかじめ収録された声を名前で選択できる新ビルドを公開した。音声合成、つまり文字を音声に変える機能を組み込む開発者は、サーバーで選択可能な声を確認できる。モデル変換時には、音声情報が重み、つまりモデルが学習した数値情報とどれほど一致するかをログで確認できる。
1. 収録済みの音声を名前で選択
b12061の対応対象は、音声複製、つまり参照する声をまねて音声を作る機能を持たないkyutai/pocket-tts-without-voice-cloningの重みだ。定義済み音声は、音声プロンプトという参照音声の入力を処理した後にモデル内部に残る状態情報、つまり処理中に保持する値として格納されている。モデル形式を変える変換ツールは、これを再入力可能な表現に戻して保存し、値が0の音声エンコーダー、つまり音声をモデル入力に変える構成要素を除外する。
サーバーへのリクエストではvoiceフィールドに、コマンドラインツールでは--tts-voiceオプションに音声名を指定する。別の録音から声を取り込むのではなく、モデルに付属する声から1つを選ぶ方式だ。音声エンコーダーのないモデルに話者参照、つまりまねる声の基準となる音声を送ると、リクエストは拒否される。
2. 変換状態の差を音声ごとに記録
リリースノートによると、Kyutaiが提供する音声状態は、同パッケージの重みが同じプロンプトで生成する状態と異なる場合がある。イタリア語・ドイツ語・スペイン語の状態は、bf16という小数精度を下げた16ビット数値形式の丸め誤差の範囲内で一致する。一方、english_2026-04は2%、frenchは20%の差がある。フランス語の状態の0番層は別の重みに由来する。
これは音質のスコアではなく、提供された音声情報と重みから再生成した情報との差だ。リリースノートでは、動作の基準となる参照実装が提供された状態をそのまま読み込んでも、同じ声に聞こえると説明している。
新しい変換ツールは、復元した入力でモデルを再実行し、状態全体を比較して音声ごとの差を記録する。差が5%を超えると警告し、その重みとまったく一致しない状態はスキップする。この処理により、kyutai/pocket-ttsパッケージも変換できるようになった。
3. 一覧の取得と不正な名前の処理
モデルに定義済み音声がある場合、サーバーのGET /propsレスポンスのvoices項目で名前の一覧を確認できる。
C APIには、音声数を提供するn_voicesと名前を取得する関数mtmd_gen_audio_voice_name()が追加された。リリースノートでは、音声を特定モデル専用の機能ではなく、音声生成モデルの機能として扱うよう整理したとしている。
定義済み音声があるモデルに存在しない名前を送ると、サーバーはエラーレスポンスを500ではなく400に変更し、その音声名をレスポンスに含める。サーバー自体の問題に見えていた失敗を、指定した名前の問題として案内する変更だ。音声一覧のないモデルは、警告とともにvoice入力を無視する。
デフォルトの選択も導入された。リリースノートによると、こうしたモデルは音声プロンプトがないとほぼ無音しか出力しない。このため、音声と話者参照の両方を省略すると最初の音声を選び、llama-ttsとサーバーのログに選択したことを記録するようにした。
4. 名前の比較方法と利用上の変化
LFM3-Audioのチャットテンプレート、つまり会話をモデルの入力形式に変える規則は、音声名を小文字に変換して処理する。音声の検索も大文字と小文字を区別しないようにし、Maleのように大文字が混ざった名前も該当する音声に一致させる。ユーザーが入力した名前とテンプレートが処理した名前で大文字と小文字が異なっても、同じ音声を見つけられるようにした。
ユーザーは、一覧の取得とデフォルト音声の選択により、リクエストを組み立てやすくなる。その一方、変換処理にはモデルの再実行、状態全体の比較、音声ごとのログ記録が加わる。選択手順は簡単になり、重みと音声情報の整合性の確認は変換段階でより明示的に扱われる。
サーバー連携コードでは、不正な音声名に対するエラー処理経路を確認する価値がある。同じリクエストの誤りでも、今後は500ではなく400のレスポンスに名前が含まれるため、どの名前を修正すべきかをユーザーに案内する際に活用できる。
b12061は、Pocket TTSの内蔵音声を名前で選択できるようにし、重みと音声状態の差を変換ログで確認できるよう改善した。
