Kristopher Baker iOSを土台に · プロダクトシステム · AI支援ワークフロー
← Aoede

decision · 2026.06.07 · 約2分

KokoroをCoreMLからMLXへ

Aoedeの高音質の声はKokoro、小さなオープンソースのニューラル音声合成モデルです。最初の統合では、FluidAudioのCoreMLとApple Neural Engineのパイプラインで動かしていました。これは自然な選択で、たいていのMacで動きます。

ところが自分のMacでは動きませんでした。このApple M5では、FluidAudioのKokoroチェーンが、試したすべての計算ユニットでクラッシュしたのです。GPUではMetalの「JIT not supported」エラー、CPUとANEでは低レベルのBNNSセグフォルト。同じライブラリが古いApple siliconでは問題なく動くので、これは新しいハードウェアが依存ライブラリを追い越した格好でした。古いFluidAudioを使った自分の別アプリは今も喋れたので、モデルは無事でランタイムが問題だとわかりました。

そこでKokoroを別のランタイムに移しました。CoreMLの代わりにAppleのMLXフレームワークでモデルを動かす、MLX移植版です。こちらはこちらで面倒もありました。MLXのMetalシェーダーは素のswift buildではコンパイルできず、本物のXcodeビルドが必要なので、プロバイダはアプリのターゲットに置かねばならず、Metal Toolchainのインストールも要ります。でも、これはM5で動きます。そしてトークンごとのタイムスタンプを露出します。結果はシンプルでした。Kokoroが動き、声はより良く聞こえ、カラオケのハイライトを推定ではなく正確にする、単語レベルのタイムスタンプが手に入ったのです。ハードウェアの事情が変わったときのために、FluidAudioの作業はブランチに残しておきました。

この乗り換えが、次のアップデートのデバッグの夜の下地にもなりました。ランタイムの移行はクラッシュを解決し、そしてもっと微妙な問題をひそかに持ち込んだのです。