Aoedeで本を閉じても、Aoedeはその本の処理をやめていませんでした。ドキュメントから戻っても、選択を解除するだけ。MLXのKokoroエンジンはキャッシュを抱えたままで、さらに悪いことに、合成スケジューラも回り続けていました。先読みを1000文に設定していたので、本を開いた瞬間にほぼ一冊まるごとを先回りして合成し始め、一時停止していても回り続けます。スケジューラは、音声が実際に再生されてはじめて緩むからです。Macでは、これは読み終わっても下がってこないメモリとCPUとして、だいたい隠れていました。RAMの超過でアプリが殺されるiOSでは、そうは静かにいきませんでした。
iOSでより大きな問題だったのは、バックグラウンドに回したときのクラッシュです。iOSはバックグラウンドでのGPU処理を禁じていて、MLXがそこでコマンドバッファを送ると、アプリごと落ちます(「Insufficient Permission to submit GPU work from background」)。素朴な対処は、フォアグラウンドを離れたら全部止めることですが、それだと再生してよいはずの音声まで止まってしまいます。そこでいまは、ニューラル合成だけを中断します。シーンフェーズを見て、非アクティブになった早い段階でKokoroのGPU処理を止め(実行中の処理に終わる余裕を与え)、MLXのキャッシュを解放し、復帰時に再開します。Appleの音声はCPUだけで動くので、バックグラウンドでもそのまま再生されます。Kokoroは、バッファに溜めたぶんを再生しきってから待機し、戻ってきたら続きから再開します。
いまは先読みを数文に抑え、本を閉じれば合成を止めてキャッシュを破棄し、キャッシュ上限も端末に合わせて変わります。その多くはiOSが問題を顕在化させたものでしたが、本を閉じたあとに処理が残るバグは、どのプラットフォームでもバグでした。気づくのに、それで殺してくるシステムが必要だっただけです。