読み上げのハイライトは、見た目がひとつだけでした。いま喋っている単語に、アクセント色のピルが付くというものです。「これがAoedeの形」をひとつ決め打ちする前に、いくつか試してみたかったので、ハイライトそのものを差し替え可能にしました。いまは現在の単語の見せ方をトランスポートバーから選べる設定になっていて、テーマと同じように保存され、下のタイミングの仕組みには一切触れずに、喋っている単語の示し方だけを変えられます。各単語はもともとそれぞれが小さなビューなので、新しいエフェクトはその場に差し込むだけで済みます。テキストと同期させる別レイヤーは要りません。
そのうえで、選べるメニューを用意しました。Tint がいちばん控えめで、文のバンドはそのままに、現在の単語に色を付けるだけ、ピルもなし。Karaoke は喋られるのに合わせて単語が左から右へアクセント色で埋まっていって、文字の中を進むプログレスバーのようになり、読み終わると ink に戻ります。Shimmer は単語の上を明るい光沢が走り、Wave は小さな波で単語をゆらします。後ろの二つは Metal シェーダーです。
全部に共通して気にしていたのは、これがフレームレートを食わないことです。フィルやシマーは、再生ドライバーが毎ティック計算しているサブワードの進捗値(レート非依存なので、どの速度でも正直な値)から駆動していて、毎フレーム描き直すのは現在の単語だけ、ページ全体ではありません。Metal シェーダーは stitchable な種類で、パッケージ自体にコンパイルされるので、素の swift build でも Xcode でも同じようにビルドでき、速いパッケージ単位のテストループも緑のままです。狙いは五種類のハイライトを出すことではありませんでした。実際の本でひとつずつ感触を確かめてから、どれがAoedeのハイライトなのかを決められるようにすることでした。