*******************************************************************************
* TODO LIST
*******************************************************************************

=== Planned ===
- Implemented Frequenzselektiver Kompressor (Multiband Compressor) Mono, Stereo, LeftRight, MidSide
  plugin series
- Refactored and optimized filter transfer function calculation. 
- Migrated to CMake build system.

=== 1.1.8 ===

- Implemented 3D reverb simulator.
- Implemented sampler plugin series with stereo outputs
- Added possibility to place direct output to the pre-mixer/post-mixer position in the sampler.
- Ported all DSP code to support AArch64 architecture.
- Additionally ptimized DSP code with AVX, AVX2 and FMA3 instruction set.
- Added possibility to double-click the parameter's value number and enter it manually with keyboard.
- Added bookmarks to file opening dialog.
- Added audio preview to file open dialog.
- Added subsystem for loading missed files. 
- Added frequency-domain spectral analysis to convolver plugin series.
- Added frequency-domain spectral analysis to profiler plugin series.
 

*******************************************************************************
* Release steps
*******************************************************************************
* Update version in Makefile
* Update CHANGELOG.txt and TODO.txt
* Run make clean && make test to build testing system
* Run .build/lsp-plugins-test utest for running all unit tests and
  ensure that there are no broken unit tests
* Run make clean && make uninstall && make install && make clean to
  build and install binaries
* Make video
* Add video cover to res/video-covers
* Upload release video to the site
* Add link to the video to src/doc/config/youtube.php
* Commit all changes to GIT into devel branch
* Run ./release.sh to build binaries
* Merge all changes from devel branch to master branch including complete
  change set in the message
* Tag version in GIT at master branch
* Upload binaries to sourceforge
* Copy contents of src/doc and res/doc/img/plugins to the site
* Publish video on youtube
* Publish news

*******************************************************************************
* PLUGIN LIST
*******************************************************************************

* Compressor
* Convolver
* Expander
* Gate
* Graphic Equalizer
* Impulse Reverb
* Limiter
* Linear Audio Profiler
* Multi-Sampler
* Multiband Compressor
* Parametric Equalizer
* Phase Compensator
* Phase Detector
* Sampler
* Slap-back delay
* Spectrum Analyzer
* Trigger

- Dynamic equalizer
- One-band compressor
- Multiband expander
- Multiband gate
- Multiband limiter
- Nonlinear audio profiler
- Hysteresis-based saturator
- Saturator
- Doubler (Stereo enhancer)
- Feedback Destroyer
- Verstärker Profiler (Amplifier profiler)
- Noise suppressor
- Transient Designer
- Reverb Simulator
- Pitch Shifter
- Circuit Switcher
- Corellometer
- Transient designer
- Decapitator
- HeadCrusher
- Dynamic Equalizer
- Dynamic panner
- Distortion
- Real sampler (with sample recording option) 


*******************************************************************************
* BUG REPORTS: Detailed
*******************************************************************************
  sysrqer:
    The graphics seem to be a little buggy on my system, turning a band on/off
    sometimes doesn't update the graph properly. Also when switching to band
    view leaves part of the old view at the bottom.

*******************************************************************************
* FEATURE REQUESTS: Detailed
*******************************************************************************

==== FFT analysis of the Profiler and Convolver ====

Could it be possible to add a frequency-domain display mode? 
It'd make it much easier to quickly identify room modes and such. Or if the
plugin could play back the created IR sample - I could use another plugin to analyze that.﻿

==== Rack / Channel strip plugin ====

Tobbe:
  Another thing I come and think about is Channel Strip Plugin. Anything you been thinking
  About? I saw a video and that guy using Studio One and the (I think) stock plugin is called
  Fat Channel, where he can add plugin in a rack and shift order the way he like.
  Everything is vertical: Gate, Compressor, EQ ie Compressor, EQ Gate with a touch of a button.

  It's like drag'n'drop plugins the way you want. Looks pretty cool. I know there's tons of them
  for Windows, but now when I'm a Linux drivers since mid 2000 I rather see things like that for
  Linux also.

  Exactly what I mean :D a real Channel Strip console where you have the freedom to put whatever
  you like in whatever order you want. Reverb, Delay, Gate, Compressor...you name it. Maybe it's a
  crazy idea but what the heck :mrgreen:

  I know about Carla, but that's get me a plugin to add another plugin (like all the Calf Suite)
  because Reaper only support linux vst for now. Maybe more in the future. Or else I might learn
  more about Ardour...but I like Reaper alot so...

==== Sampler ====
  naught101:
    So, the features I was thinking for Klangerzueger were:
      - file preview in the file load dialog
      - pitch/tune control (note and fine tuning)
      - Allowing a single sample to be used across a range of midi notes (with pitch shifting away from a centre note).
      - looping (start/end, fade length)

    I've also been considering a modification of Helm that might cover the same functionality, 
    and I'm not sure which is the better path to tackle. Helm has a lot of nice modulation options
    that are pretty attractive, but maybe also a bit overkill for a simple sampler.

    Probably also a filter would be good, and velocity mappable the filter cut-off, 
    and tail cut/fade-out. Some of these things might be easier to do in Helm, 
    since the modulation and filter is already built in.

==== Convolution Reverb ====
  cooltechno
    If it's possible, one feature request: to make a sound-preview in adding samples window in Klangerzeuger
    
  ufug:
    LSP offers the most tweakable one, but it does not seem to have a browser for easily auditioning your
    collection of impulse responses (as far as I can see)
    
  funkmuscle:
    Also the older versions, you could of bookmarked the dir where IR files are. I can't seem to figure out
    how to do it with the version.
  
  sadko4u:
    Currently because all dialogs were written from scratch, there are no bookmarks currently.

==== UI ====
  tom-:
    - Make all grid lines more 'darken' in the UI.
    - Add possibility to activate bands not only by switching dropdown menu in the Combo Group.
    - Implement tabs instead of combo group.

==== Equalizer tuning ====
  Jan Lentfer
    it would be very cool if the parametric EQs could import settings exported from "Room EQ Wizard".
    That would make life so much easier :D
    https://www.roomeqwizard.com/
    Thanks and keep up the great work!
    
    The content of a text exported file looks like this:
    Filter Settings file
    Room EQ V5.18
    Dated: 10.01.2018 18:58:28
    Notes:
    Equaliser: Generic
    Average 1
    Filter  1: ON  PK       Fc    42.0 Hz  Gain  -6.5 dB  Q 13.20
    Filter  2: ON  PK       Fc    47.6 Hz  Gain  -3.3 dB  Q 16.77
    Filter  3: ON  PK       Fc    62.0 Hz  Gain   9.0 dB  Q  5.41
    Filter  4: ON  PK       Fc    67.1 Hz  Gain -12.3 dB  Q  5.02
    Filter  5: ON  PK       Fc    86.2 Hz  Gain -15.4 dB  Q  3.01
    Filter  6: ON  PK       Fc     122 Hz  Gain   6.3 dB  Q 15.03
    Filter  7: ON  PK       Fc     132 Hz  Gain  -9.1 dB  Q  6.77
    Filter  8: ON  PK       Fc     150 Hz  Gain  -8.5 dB  Q 10.00
    Filter  9: ON  PK       Fc     165 Hz  Gain   4.3 dB  Q 26.53
    Filter 10: ON  PK       Fc     190 Hz  Gain -19.7 dB  Q  5.03
    Filter 11: ON  PK       Fc     202 Hz  Gain   9.0 dB  Q  5.00
    Filter 12: ON  PK       Fc     247 Hz  Gain  -9.2 dB  Q  5.00
    Filter 13: ON  PK       Fc     258 Hz  Gain   9.0 dB  Q  5.00
    Filter 14: ON  PK       Fc    2073 Hz  Gain  -4.2 dB  Q  5.00
    Filter 15: ON  PK       Fc   10879 Hz  Gain  -3.8 dB  Q  5.00
    Filter 16: ON  None  
    Filter 17: ON  None  
    Filter 18: ON  None  
    Filter 19: ON  None  
    Filter 20: ON  None  

    I thought about an option to "just" read in such a file and set the Freq, Gain and Q values from this file. As far as I understood,
    these are just peak filters. 

==== Noise reduction ====
  <unknown>:
    I think noise reduction is the other big hole in LA currently.
  
  Marcel:
    P.S. I hear there is also a great need for a good noise reduction similar
    to the Audacity one.

==== Spectrum analyzer ====
  sysrqer:
    I've been using the spectrum analyser recently and I have one question which is puzzling me - how can I
    find out what the exact frequency is of a particular peak or area? I would expect to have a display of
    where my mouse is to easily see the frequency. I tried to use the selector but it moves in increments
    so sometimes it is not possible to get to the frequency you want to know, especially in the low end.
    Am I missing something here or would this be a feature request?

    I came across Melda's MMultiAnalyser in a video recently, it has a very interesting feature of showing
    the frequency spectrum of collisions/clashes, would this be something could be implemented at some point?

    Here is a quick overview of it https://youtu.be/Za7cbeKJUoY?t=164
    
====
  bhilmers:
    A channel-strip style drum plugin would be really great for Linux. Maybe someone will get inspired one day and make it.
    Wish I could! Not my area of expertise.
    
    http://www.kvraudio.com/product/bdm-broken-drum-machine-by-nusofting
    BDM is a plugin instrument designed for the musicians who love chaos and usually find the unpredictable behaviour of an
    uncontrollable sound machine stimulating and inspiring.
    BDM basically offers 4 drum pads like an old, small, beat box with: Bass Drum, Snare, Hi-Hat and Stick, each of those has
    controls like Decay, Pitch and Filter. But the creative power of the BDM is all in the four "Broken" sliders, one for each
    pad. With those sliders you can set the amount of wild, weird, chaotic and unpredictable variations to the sound, just
    like the circuits inside go crazy producing bleeps and glitches you never thought you'd hear from this machine.
    Sound source is double: a "Osc.Mix.PCM" slider, per pad, allows to choose between the internal VA oscillator or an external
    Wav sample, or a mix of the two.
    The output is configured as 1 stereo + 4 mono outs.

==== Curve equalizer ====
  12strings2hands:
    The Voxengo CurveEQ can generate an EQ curves based on the input, in this case they use pink noise through 2
    microphones and you can use the curves to make one mic match the other.
    Given that there are a lot of other differences between mics, I can see a lot of uses for something like this.
    Is there a linux equivalent?
    Here's a couple of links to the subject:
    https://groupdiy.com/index.php?topic=67322.msg0
    https://www.youtube.com/watch?v=0qoGEpOuY6U

==== Filters ====
  A filter collection where you could use bezier or pixel-pencil to draw filter sweeps.
  
==== Extension of filter set ====
  unfa:
    I've stumbled upon these while trying to understand how Optimod works.
    The seem to have the steepest possible transition from the pass and to the stopband. Could sound pretty cutting edge I guess ;)
    Do we have any implentations of these on the Linux audio world? I'm pretty sure SoX has something, but I never managed to use it.

====
  Conor Mc Cormack:
    I also have a suggestion for the list of plugins on your site in the manuals section.
    As much as anything else it is for selfish reasons as i feel it would make it easier for
    me to keep the list on LMP up to date :) However, I also think it might help others too.

    So for example, instead of -
      Limiter Mono - Begrenzer Mono
      Limiter Stereo - Begrenzer Stereo
      Dynamic Processor LeftRight - Dynamikprozessor LeftRight
      Dynamic Processor MidSide - Dynamikprozessor MidSide
      Dynamic Processor Mono - Dynamikprozessor Mono
      Dynamic Processor Stereo - Dynamikprozessor Stereo

    Maybe something like this -
      Begrenzer (limiter)
        Limiter Mono - Begrenzer Mono
        Limiter Stereo - Begrenzer Stereo

    Dynamikprozessor (Dynamic Processor)
      Dynamic Processor LeftRight - Dynamikprozessor LeftRight
      Dynamic Processor MidSide - Dynamikprozessor MidSide
      Dynamic Processor Mono - Dynamikprozessor Mono
      Dynamic Processor Stereo - Dynamikprozessor Stereo

    It is great that you have so many output configurations but maybe bundling them together
    would make for easier navigation? 

==== Saturator ====
  <unknown>:
    I'd say I think we're missing subtle saturation / distortion plugins. Stuff like
    VarietyOfSound used to put out -- FerricTDS, Tessla, the saturation stage in NastyVCS.
  
  Braxton Salyer:
    Hey guys, LOVE YOUR WORK. Makes doing pro-audio in linux so much more viable.
    One thing we're definitely missing though is a good saturation plugin (a-la Decapitator,
    HeadCrusher, and similar). Is something like this in the works, our would it be in consideration?

====
  rghvdberg:
    The reduction meter on the compressors. I think they are a bit to fast to read out. It's also talked about in the lm forum.

==== Feedback Destroyer ====
  mattpepin:
    A useful plugin for live situations would be a feedback analyzer/destroyer like Waves X-FDBK.
    It would be a matter of combining the Analyzer and an EQ strip and make it into a standalone plugin.

==== Formant Processor ====
  unfa:
    AFAIK apart from Autotalent there is no opensource formant-processing capable plugin. And Autotalent
    is pretty limited in that regard. Do you think a dedicated formant processor would be good thing to
    have? I guess there are more things possible todo with formants than just shifting, I guess compressing/
    expanding formant could also be a thing, and possibly amplifying/attenuating the formant depth could
    also be a thing.

==== Ducker/SideChain Compressor ====
  adiknoth
    Hi!
    There's this awesome Waves plugin named "OneKnob pumper", it's essentially a side-chain compressor
    with a builtin side-chain signal generator.
    This video illustrates it: https://youtu.be/lVrw3StPi24?t=1m25s
    So three buttons: amount, rate, offset.
    I think you already have all the ingredients, it's only about chaining components together.
    FYI: There are more OneKnob plugins: https://youtu.be/HSjMtYzqlL8. They're all just stripped-down
    versions of existing tools to simplify the workflow. Instant magic sauce. ;)

==== Shuffler ====

  pms967:
    would be really nice to have: a good "Blumelein Shuffler".
    See: http://www.aes.org/e-lib/browse.cfm?elib=6686
    See also here: http://www.audiosignal.co.uk/Resources/Stereo_shuffling_A4.pdf
    (there you'll also find a very interesting PFB-based analog implementation, which may be inspiring)
    ...and here: http://kokkinizita.linuxaudio.org/linuxaudio/zita-bls1-doc/quickguide.html
    (but this otherwise very nice implementation -unfortunately available only as a stand-alone jack app, no plugin-
    is somewhat specific and optimized for a special use-case).
    Well, I know that a similar results can be obtained e.g. applying different shelving eq. to the mid/side
    signals using your great "5 band Eq" plugin (possibly in combination with the "Stereo Tools" to adjust the
    overall M-to-S ratio, etc), which in fact is what I'm currently using. Yet, a dedicated plugin would be handy
    and could provide more specific features, such as different / optimized shelving filters, possibly with
    phase / delay compensation, etc.

    Moreover, it would have the welcome side effect to have more people re-discover this ancient but very effective
    and useful technique. :-)

====
  unfa:
    Are you looking for an idea to code a cool LV2 plugin?
    
    I guess we are all familiar with wavetable synthesis - a concept where an oscillator has a list (or a table)
    of looping waveforms and allows the user to alter the sound by picking different table indexes at any given moment.
    Mainstream exampls are NI Massive and Serum, an opensource one - Calf Wavetable.

    What can this concept have to do with convolution (impulse response) reverbs?

    What if we had a plugin that could load 128 short IR samples instead of one (like IR.lv2 or Klangfalter)
    and allowed the user to automate the table index for which sample is used at any given time? This could
    probably sound like morphing the physical environment of the room you're playing in. Maybe it'd be a boring
    thing, like there's nothing too amazing about automating a standrd C* Plate 2x2 reverb's tail length, or maybe...

    If we treated the IR table just like a wavetable synthesizer (think more Serum than Massive now), using
    very short (a few miliseconds) loops extracted from recorded or syntesized sounds like explosions, human
    speech, mechanical noises, randomly generated sequeces (creating short looped noise bursts - if you ever
    looped radom 30 samples of a sound in Audacity and loved the tone you know what I mean. Now imagine shifting
    the looped "selection" along a soundfile and using this as your virtual "stompbox emulation" for playing
    an instrument or a synth?

    Maybe instead of loading 128 soundfiles, load 1 and split it automatically at zero-crossings? That should be
    much easier to work with, who can manually cut up a soundfile to 128 chunks and remain sane after that?

    Adding an LFO and an envelope follower to the table index control, spiced up with manual automation - this
    could create some interesting moving sounds, from crazy growling bass synths to haunting ambient pads.

    Or maybe we could make a convolution processor that has a sidechain input - it uses that and slices it at zero
    crossings to create a short IR sample, and uses that to convolute the main input? A bit like a granular vocoder,
    w wicked stuff?

    Feeling inspired? Or am I crazy?

==== Sample replacing ====
  Nekosounds:
    Is there any search/replace function implemented in case of lost impulse samples when moving your session to another computer?﻿
  LSP Project:
    Currently there is no search/replace method. Information about location of the file is stored as a pathname. If you have any suggestions
    about search/replace algorithm, we can discuss it.
  Nekosounds:﻿
    For me the best solution of this problem is in Ableton Live:
    - the program stores file path but also fingerprints
    - when loading a project and the samples are missing a warning is displayed
    - user can choose the location where to search for samples
    - program finds all candidate files with needed name and automatically replaces missing sample with the first file whose fingerprints matches pattern
    - if the program cannot find a file witch correct fingerprint, but filenames matches a dialog is displayed and user can choose the right file from the list
    - if no files found then a warning is displayed, user can manually replace the file with all settings preserved
  LSP Project:
    Displaying plugins error messages when loading project is possible at least for VSTs - eg. Sforzando behaves this way

==== Modulation Reverb ====
  A nice reverb plugin based on freeverb 3. It's old but does sound good IMHO.

==== Transient Designer ====
  Transient Designer I like to see. Calf has one but Calf works only sometimes in Ardour.

==== Tape simulator ====
  That's what I miss right now, as to what I really would like? A really good tape/dub delay with
  parameter changes which causes extreme zipper type effects, like Analogic Delay can produce.
  Tal Dub is amazing but it does not make the crazy sounds when you change the delay time which
  is a shame.

==== Spring reverb ====
  Looking at scientific publications like this one, an accurate physical model of a spring reverb
  in real time seems out of reach for a longtime. 
  http://www.ness-music.eu/wp-content/uploads/2013/06/dafx13.pdf
  
  Do we have any resonator plugins? I used to use the on in ableton live years ago to create some
  quite nice spring reverb sounding fx when combined with the autofilter before the input. I can't
  think of any linux plugins that do anything similar.

==== Mastering ====
  On topic: I'd like to see, for example, a decent saturator, a multiband compressor, and
  a maximizer, possibly combined into one big mastering plugin.
  
==== Stereo image ====
  alexthebassist
    Oh, and one more. The thing we starve for really long is a good stereo image expander. Like the
    one you wrote for Calf project, but better.

==== Dynamic Equalizer ====
  Feature request for creating a Dynamic EQ plugin. If you're not familiar with them,
  it's basically an EQ, but it isn't applied until level passes the user defined threshold
  level. Or the inverse version where it is applied when the level drops below the threshold.
  
  Each parametric band would have it's own threshold / attack / release settings.
  Bonus points if a sidechain can be used for the dynamic triggering. Double bonus points if
  the dynamic triggering can optionally be set up to also (or possibly even exclusively) expand
  or contract the Q level. All the functionaly currently exist in the code base, it should mostly
  just be a matter of re-wiring the components.

  There is no LV2 implementation of this plugin to my knowlege. Outside of LV2, the free
  Nova Dynamic EQ vst plugin is an example of this implemented elsewhere.

==== Parameter entering ====
  In other subject, it would be great to be able to enter numerical values by double clicking
  on the DB value under the knobs.

==== Music stuff ====
  i plan on switching completely to linux for my mixing and mastering needs, i like the calf plugins,
  i appreciate the plugins it already contains, i just feel some cool things I'm looking for aren't there
  these are my feature request,
    - analog style emulated compresses, eqs, etc.
    - auto tune plugin
    - vocal rider type of plugin, that rides the track volume like the one pro tools has

==== Delay ====
  Re-implement Jesse Chappell's per-frequency delay from FreqTweak as a plugin. Bonus points:
  include frequency modulator functionality.

  This is kinda random, but there are not ladspa, lv2 plugins anything like the spectral delay
  functionality found in freqtweak. And it is starting to suffer from some significant bit-rot.
  Would be nice to be able to use it as a plugin.

