Kristopher Baker iOSを土台に · プロダクトシステム · AI支援ワークフロー
← 制作中へ
active updated 1w ago

Aoede

ローカルファースト・プライバシーファーストの、macOSとiOSのための読書アプリ。txt、EPUB、PDFを取り込み、自分の好きなやり方で読み進められます。単語のハイライトと同期させて読み上げてもいいし、音をまったく出さずに自分のペースで読んでもいい。音声はデバイス上で合成し、ライブラリは自分のマシンに置いたまま。アカウントも、サブスクも、クラウドもありません。

SwiftmacOSiOSSwiftUITTSMLXKokoro

自分のMacで、Speechifyのように「読みながら聴く」体験がほしいと思いました。声が読み上げ、進むにつれて単語がハイライトされていく、あの体験です。でも、そのためにまた新しいサブスクリプションを払うのは嫌でした。別のプロジェクトの作業を通じて、Kokoroという小さなオープンソースのニューラルモデルを使えば、本当に良い音質の音声合成をローカルで動かせると最近知ったところでした。だから、それを核にして自分用のリーダーを作りました。

ほとんどの読み上げ製品は、あなたの本が誰かのクラウドにあること、そして聴くにはサブスクが要ることを前提にしています。Aoedeは逆の発想を取ります。書類を取り込み、音声をローカルで合成し、同期した単語ハイライトで追いかけ、ライブラリは自分のデバイスに置いたまま。アカウントも、サブスクも、クラウドもありません。

Accelerandoを読み上げるAoede。章の見出しとリストが保持され、アクティブな単語がアンバーのハイライトで灯っている。 Accelerandoを読み上げるAoede。EPUBの構造を保ったまま、単語ハイライトを同期させ、再生コントロールが浮かんでいます。

名前がそのまま狙いです。Aoede(アオイデー)は、声と歌のミューズ。有名人に読んでもらう必要はありません。自分のものだと言える、シンプルで音の良い声がいくつかあれば十分です。内部ではAppleの組み込み音声と、MLX経由でローカルに動くKokoroの両方を使っています。目指すのは何百もの声ではなく、オフラインで動く、本当に良い少数の声です。いつか本当に使いたくなったときのために、ElevenLabsのようなクラウド版の余地も残してあります。

「聴くための道具」として始まったものが、「読むための道具」になってきました。Aoedeはいまでは英語だけでなく日本語にも対応し、ふりがなと読みの補正も入っています。そしてページを読み進める方法も一つではありません。声で読み上げる方法もあれば、音をまったく出さずにハイライトだけを自分のペースで進めるサイレントなReading Pacerもあります。出発点は声でしたが、いま育っているのは読書体験そのものです。

動くのは新しめのApple silicon、macOS 26、そしていまはiOS 26です。Macアプリと、iPhone・iPadとで、ひとつのコアを共有しています。いまのところ個人プロジェクトで、関心があれば少人数にTestFlightで配るか、まだ決めかねています。

下のアップデートが制作ログです。エンドツーエンドで配線した土台、KokoroのランタイムをCoreMLからMLXへ移したこと、ふりがなと読みの補正つきで日本語を読めるようにしたこと、コア全体をパッケージに抽出してiOSで動くようにしたこと、数十ギガバイトのまま居座っていたメモリキャッシュに上限を付けたこと、そして「これは声ではなく読書アプリになりつつある」と気づかせてくれたサイレントな読書ペーサー。

アップデート 37

二種類の間違ったふりがな 段落ごとに1セル スクロールのための、TextKit 2リーダー 学ぶほど、ふりがなが減っていく いま印をつけて、カードはあとで作る 編集しても壊れないノート 読むだけでなく、復習まで その文章についてAoedeに聞く リーダーの中で辞書を引く 音声は読み続けたのに、ページは止まった 本に絵があるとき Aoedeの中だけで本を見つける 横にして読む 「16%」が「sixteen」になっていた シマーか、ウェーブか、ただのティントか 読むそばから溶けていく単語 本の中を探す、ライブラリ全体を探す 「I reed it yesterday」と読み上げていたころ 声を追って、一行ずつ コードレビューでAoedeから出てきたもの Finderから「このアプリケーションで開く」 声を出さない読書モード 設定を開かずに声を切り替える 本を閉じても、Kokoroは動き続けていた AoedeがiPhoneとiPadで動くようになった 音声と一致するふりがな 「わたくし」ではなく「わたし」と読むようになった 49GBはリークではなくキャッシュだった Aoedeが日本語を読み上げるようになった 本は翻訳せず、アプリだけをローカライズする 初回起動で、まず声をそろえる 最初から最後まで、読み上げが動く テキストファイルだけでなく、本物の本を読む 本は、本らしく見えるべき KokoroをCoreMLからMLXへ ロボットのような声は、自分のコードではなく依存ライブラリのせいだった タイポグラフィがインターフェースだ

次へ

KiFinder 制作ログを見る