Split into smaller, reusable components.  Introduce ComputeValues and ImageFromValues to enable faster regeneration of waveforms.