In 2016, I finally learned OpenGL.
All the line offsetting (z-direction in time, y-direction for frequency magnitude) is now done directly in the shader. This makes the animation much smoother, as no THREE.js points/lines have to be created and destroyed anymore. It also allows more flexibility in color effects.
To hide the lines behind each other, a
gl.LINE_STRIP of triangles is rendered for each line.
DEPTH_TEST is not enabled, the lines and triangles are just rendered in the right order.
zxcvb for some color presets.
q for enabling/disabling lines, and
wertyu for changing the line color. Use
a for enabling/disabling the stripes, and
sdfghj for changing their color. Use
1234 to change line thickness.