- fix display bugs in linvis when we change sizes?
- change diffs_to_pixels to iterator over dists instead
- fix data reduction to be psychoacoustically more realistic.
  (download several MP3 encoders)
- tweak UI (label everything)
- add ui: configure
   - ui for adjusting windowing (rectangular, Hamming, Hanning)
   - parameters for data reduction
- thread properly (?)
  - calc thread, UI thread, play thread?  calc + UI thread vs play thread?
- improve display in dist mat (show where we are at top, scroll, maybe circs)?
- add online continuous input (ouch!)
- is there an extra line at the bottom to use in LinVis
- names: dissociated studio, foolascap (punning icon)
  (no disrespect is meant to the nice people at ASCAP, without whom
   we'd have even more muzak in quasipublic spaces...)
- explain why not wavelets...
- release!
- If we have a number of samples of silence (or very quiet stuff),
  we currently rely on stable sorting to prevent us from falling
  into small-period loops.  The energy-like alg would do better.
- currently we mix down to mono at read time.  We could either:
  - mix when computing loudnesses, but play back correctly in n-channels
  - compute loudness vectors for each channel (costs more...)
- hook in PCL to time reading, calcing loudness, diffs
- get signalling nans (avoid need for assertions...) see fpu_control.h,
  fenv.h?

C = A . B : c_ij = \sigma a_ij b_jk
Distance val d(i,j) = l_i . l_j = \sigma l_ik . l_jk

k = 1 .. chunk_sz (as reduced)

turn this into a matrix:
D = [l_i . l_j] = L . L^T (right)?
L is chunk_cnt by reduce (chunk_sz)

which we can now feed to Blitz++ to reblock for cache efficiency.

Norwegian Wood at 44 KHz, 0.1 second intervals, 8 byte doubles
is chunk_sz 4410, cnt 1254, entire D matrix is thus 40 megs.
Except that we only store the top 10 distances / chunk, which
makes things much cheaper (although we still have to do all the
computation).  As long as the L matrix fits into cache ( +
temporary working storage to sort one row of D), we're OK.
Except that it's about 20 MB.

Note that the dot product has totally predictable access patterns,
so if the problem is latency, not b/w, prefetch is a win.


