Convert wave visualization into library object

Convert the wave visualization from an effectively-standalone procedural
routine into a library object which can be used to generate wave
visualizations from various input sources and for various output
encodings.