NEWER TODOS:
- fix asan issues in PandaResampler
- handle XPARAM scaled parameters for modulation
- update manual
- does mono work well with clap / clap ids?
- LV2 window resizing doesn't work in Ardour7
- JACK control-by-CC should use midi channel, too
- non-linear modulation mapping
- formant corrected playback
- portamento could morph while sliding
- visual feedback for adsr envelope
- try to get old performance from new inner loop
- could implement UI scaling for macOS
- maybe treat std::sin, std::cos like std::fabs
- maybe subharmonic tagging
- we may want to publish spectmorph vs. crossfade results
- why does white noise not sound like white noise?
- panning per note
- better spectral subtract [1]
- vibrato could have delay property
- possibly add MPE timbre

insts:
 - tuba
 - flute

new operators:
 - crossfade by midi note -> control (bass-trombone / trumpet inst)
 - tremolo
 - key track
 - "wave" table
 - envelope
 - synthetic
_________

smenc:
- move partial pruning step to seperate step to be performed after attack optimization
- merge new-pruning-scaling branch somehow
- implement phase-correct "nearest frame" decoding instead of overlap-adding frames
- compute peak over nearest minimum in dB
- compute peak over local (frame) maximum in dB
- debug performance problems
  => implement downsampling for really low notes
  => use symmetry to speed up optimize_partials
  => make a squared window table (optimize_partials)
- implement sinc interpolation for spectrum phase
- make load() function of SpectMorph::Audio and SpectMorph::WavSet reset state
- optimize memory usage of encoder
- reanalyze residual after first pass
- increase time resolution for residual for low notes
- use NoiseBandPartition class to get faster noise band splitting
- adjust noise bands according to frequency specs

smlive:
- make FFTW integration thread safe
- maybe use integer phase representation (-> less floor()/float->int/int->float cycles)
- SSEified noise generation:
  * use a table of (sin[0] cos[0], .. sin[255] cos[255])
  * load sincos[random] sincos[random+1] and shuffle values together
  * write out result
  * combine loop with apply window
- SSEify render_partial

lag diagrams of note start

documentation:
- update API documentation with new classes (LiveDecoder, GenericIn*)

sminspector:
- figure out why mix_freq is 0 for inspect1 foo.wav

morphing:
- performance: use O(n) loop to associate each freq with the nearest freq of the
  other input -> less search cycles, since we already have the best match freq

lv2:
- could implement ui:showInterface for hosts that don't support X11UI

------------ NEW RELEASE ------------

- git tag
- debian updates
- pbuilder
- make distcheck
- instruments.tar.xz (in evaluation/: make-dist)
- update NEWS
- update spectmorph.org
  - rebuild docs
  - release tarball
  - debs
- freshcode
- blog
- google+
- facebook
- release announcement mailing lists
- mail arch linux maintainer (AUR)
- test builds on gentoo and ubuntu 17.04

------------------------------------

[1] encoder: better spectral subtract

Often, partials are not stable within one analysis frame - their amplitude
and/or frequency can change (see claudia-ah|claudia-ih|claudia-oh) - as a
result, the peak can be more wide than a mere windowed sine. The result
is extra noise (for instance claudia-ah-1-84.sm with frame size 20).

The idea of this change is to subtract a slightly wider peak from the
spectrum to compensate for unstable partials. A gaussian peak could be
tried, or sines with different frequency|amplitude variations could be
analyzed.

Noise very close to the partial would normally not be audible anyways, as
it should be masked.
