10時起床して出社して仕事。バグ解決した。原因としては普通に実装ミスだった。アニメーションループの中で state 更新してて、その state が useEffect の依存として登録されてたから、とんでもない勢いで再レンダリングのタスクが積まれ、結果として時間が経過するほど応答性が悪くなって音ズレしてるように見えていたという話。プロファイラ見たらヒープがどんどん増大してた。こういうときにヒープって増えてくんですね。というかまずプロファイラを見るって発想にもっと早く至るべきだったな。
結局のところこの手の仕事(この先もこういう仕事するかはわからんが)で Canvas や WebGL と UI フレームワークを組み合わせるときは、2つの異なる世界のライフサイクル(アニメーションループ / コンポーネントのレンダリング)を混ぜこぜにしないことが重要。それができてれば基本的に原因不明の副作用が発生することはないはず。はあ・・・伸び代、やな・・・とりあえずもう一日だけ延長して仕事する。あと明日ベースの弦変えて、ちょっと曲思い出す時間取らにゃ。