Sound Problems fixed!
So it turns out ffts on the fly is no problem, a quick check with timeit suggests I should be able to do around 1500 a second of the size I’m trying to do and I only need to do two per frame ie about 120 if we’re locked to vsync. The problem was that pyglet seems to take sound data twice as often as it “schedules” things if you set them up using pyglet.clock.schedule so I was giving two different data chunks for the same start time.