rePhase, a loudspeaker phase linearization, EQ and filtering tool

Changelog:

1.4.3 2019-01-16
  Bug corrections:
    - after loading a preset, correctly show "rotate" option when set in
      Filters Linearization tab
    - resolved the zoom out (right click) bug where too much zoom states
      were added
  Adjustments:
    - measurement interpolation is now logarithmic in both magnitude and
      frequency axes, so that an interpolation between two points will
      always show as a straight line

1.4.2 2018-12-27
  Bug corrections:
    - corrected graphical EQ manipulation behavior when gain offset is used
      on a measurement
    - corrected active EQ focus bug after loading a measurement

1.4.1 2018-12-23
  Adjustments:
    - improved compatibility of frd format:
        * enforce decimal form instead of scientific notation
        * use semicolon instead of tabulation as column separator
        * add commented info (software, url, columns description)
    - improved information in EQ bank drop-down menu, including EQ type and
      number of bypassed EQs
    - dynamically adjusted choices in FFT drop-down menu, removing unusable
      options
    - removed unused EQ type drop-down menus in paragraphic phase EQ tab
    - reworked links and contact info

1.4.0 2018-12-19
  New features:
    - graphical zoom functionality, similar to HOLMImpulse:
        * clicking and dragging the mouse over the response graph draws a
          zoom box that defines the new graph area when button is released
        * right clicking cancels last zoom operation
        * zoom only affects frequency and magnitude scales, not phase one
    - real-time graphical edition of gain EQ points:
      clicking an EQ fader or entries will turn them yellow to reflect the
      fact that this particular EQ point now has a special focus:
        * mouse wheel changes its Q value while on the response graph
        * middle click or ctrl-click on the response graph updates its
          freq and dB values in real-time while the button is held pressed
        * dB position is relative to the existing target magnitude curve,
          including optional measurement, and is limited to ±96dB per EQ
          (note: it is recommanded to use "constant shape" EQ type for
          high amplitude corrections)
        * modifications can be cancelled as long as focus is not lost
    - "frequency response (.frd)" format to export the generated correction
      (ie the red curves) as a three columns frequency/magnitude/phase file
    - Added "linearize"/"rotate" option in Filters Linearization tab.
      "linearize" is the default and compensates for phase rotation of a
      given filter (inverse all-pass), whereas "rotate" emulates the phase
      rotation of the chosen filter without affecting magnitude (all-pass).
    - New "throughout banks" EQ tools to bypass or order EQ points
      throughout all banks at once. Confirmation is requested as this can
      be an irreversible operation. Ordering EQ points between different
      banks requires EQ types to be identical in all banks.
    - try to let the user save current settings before exiting in case of a
      crash
  Adjustments:
    - frequency marker on the magnitude target curve is replaced with a
      vertical yellow line that reflects both magnitude and phase
      corrections
    - up/down key binding on drop-down menus to iterate values (same idea
      as existing incrementation/decrementation of entries with numerical
      values)
    - link to rephase.org in Help menu
    - stay in same tab after settings load/reset
    - more compact setting file
    - view preferences are saved on the fly instead of when quitting
    - force entry focus loss when switching tab
    - added Nyquist frequencies of a few common sampling rates in frequency
      upper limit choices in the Range tab
    - removed bypassed EQs from EQ points count in "Bank" drop-down menu
    - avoid saving measurement summary in the setting file, and generate it
      on the fly

1.3.0 2018-02-15
  New features:
    - "Load Recent Settings" entry in File menu, keeping track of the last
      15 opened or saved setting files
    - ctrl-click on a fader will reset its value to zero, similar to what a
      middle click does (useful for persons using a mouse pad)
    - improved measurement parsing heuristics to handle more formats;
      recommended measurement format is still the one described in the info
      box when failing to load a measurement
    - added CSV output format: 64 bit floating-point values in text format,
      separated with commas
    - allowed measurement importing from clipboard, both from File menu
      and Measurement tab
    - added "hide magnitude" button in Measurement tab
  Adjustments:
    - added a "Donate" entry in Help menu linking to a paypal donation page
    - made "Load Settings From Clipboard" functionality tolerant to leading
      and trailing spaces and newlines in clipboard
    - reworked output format names
    - renamed "invert" button to "invert response" for clarity in
      Measurement tab
    - rename "impulse offset" to "impulse delay" for clarity in impulse
      status report
    - add max impulse level in impulse status report, complementing max
      response level
    - reworked impulse and measurement status report areas to make them
      more visible
    - enabled DPI adaptation if forced to by the operating system (not
      recommended, looks nice but crashes might occur), and added scale
      ratio and DPI indication in View menu
    - added a no warranty disclaimer in "About" info box

1.2.0 2016-12-08
  New features:
    - REW automated EQ settings generated using the 'rePhase' equaliser
      type (as implemented in REW V5.17 beta 14 and up) can now be imported
      directly into a paragraphic EQ bank
    - EQ points in paragraphic EQ tabs can now be individually bypassed
    - added a "tools" menu in paragraphic EQ tabs, effective on current
      bank:
      * load/save current bank into a '.eq' file as a JSON object
        (gain paragraphic EQ tab only)
      * load/save current bank into the clipboard as a JSON object to
        easily copy it to other banks or rePhase instances, or share it
        through forum posts
        (gain paragraphic EQ tab only)
      * import REW EQ settings generated with 'rePhase' equaliser type
        (gain paragraphic EQ tab only)
      * convert back and forth between constant and proportional Q types
        (gain paragraphic EQ tab only)
      * invert corrections
      * bypass or activate all EQ points
      * order by frequency, active or reversed order
    - "Help" menu entry (albeit probably not very helpful :( )
  Bug corrections:
    - The long lasting encoding issues with paths when loading, saving, and
      generating files should now at last be solved. It was already
      supposed to be the case in version 0.9.7, then 1.1.0, and should now
      *at last* be effective. Please report any problem with files or paths
      containing special characters (accents, etc.).
    - Corrected a bug introduced in version 1.1.1: fader position could
      sometimes change based on the position of the mouse cursor after
      loading or saving a file
    - Stop confining mouse cursor within faders, as it could stay stuck
      under some rare circumstances
  Adjustments:
    - set default optimization setting to none, as optimization process can
      increase preringing and should only really be used when the number of
      available taps is too limited to obtain the desired magnitude curve
    - increased default number of taps to 16384 to reflect an increase in
      CPU and DSP power in the last few years (wishful thinking? :) )
    - boost FFT length calculation ratio to improve precision
    - changed default windowing algorithm from rectangular to hann for a
      more generic default behavior
    - EPS vector files screenshots including result curves are now
      significantly lighter and result in smoother curves compared to
      versions 1.1.0 and 1.1.1
    - suppressed flickering when switching between Views buttons
    - default to "Large" view mode

1.1.1 2016-10-29
  New features:
    - added a 64 bit IEEE-754 output format to accommodate BruteFIR:
      http://tinyurl.com/htqvln8
  Bug corrections:
    - fader focus bug solved: http://tinyurl.com/ztbp7cl
    - beefed-up clipboard handling to avoid bugs when loading measurements
      by dragging them over the interface: http://tinyurl.com/jygt7jx
    - removed the final optimization step that was recently added in
      version 1.1.0 as it had some ill side effects in specific scenarios
  Adjustments:
    - renamed measurement "compensate" function to "invert" to avoid
      confusions: http://tinyurl.com/j76wm5w
    - reworked focus and entries editing in paragraphic EQ tabs:
        * using the tab key now goes from one entry to the other as
          expected, making it faster to edit multiple EQ points in a row
        * clicking on an entry does select the entire content for ease of
          editing
        * middle click or double left click on the dB/° entry used to reset
          the value to 0. This is now gone, but the same result can still
          be achieved with a middle click on the fader
    - internal DPI scaling adjustments

1.1.0 2016-10-27
  New features:
    - screenshot functionalities added to the file menu:
        * "Save Graph Screenshot As..." saves current graph view with a
          logo added to the bottom right corner
        * "Save Window Screenshot As..." saves current window view with the
          directory entry hidden for anonymity concerns
        * supported bitmap file formats are PNG, GIF and JPEG
        * graph screenshot also supports EPS vector file format
    - 64 bits output formats handling (mono/stereo IEEE wav, txt)
    - All-Pass filters added to the Minimum-Phase Filters tab
    - measurement compensate mode to manually replicate a given measurement
      (eg replicating a mic calibration file and getting its missing
      minimum-phase response, replicating a target curve, etc.)
    - added a "Clear Result" entry in the File menu, clearing result curves
      and status
    - reworked "what's new" changelog window to make it easier to read
  Removed features:
    - removed "complex" windowing algorithm which was deprecated since
      version 0.9.0
      An alert box will popup when loading settings using it
  Bug corrections:
    - bug correction for 2nd order minimum-phase filters with Q<0.5
      An alert box will popup when loading settings containing that bug
        * bug report: http://tinyurl.com/z59qw4t
    - filename encoding bugfix: accents and other special characters
      handling in setting, impulse, and measurement filenames and paths
      (was supposed to be resolved since 0.9.7, but was not...)
    - last updated graph setting sometimes remained unchanged after
      resetting or loading new settings
    - fixed a few instabilities:
        * Horbach-Keele filters with R=1
        * clipboard corner case errors
        * NaN detection bugs
    - fixed various graphical bugs:
        * generation status remaining after reset
        * misbehaved result phase curve when hide=-Inf
        * view slots flickering in large view mode
  Adjustments:
    - faster constant Q, proportional Q and constant shape EQs calculation:
      should be around three times as fast now, and should be notable when
      manipulating EQ faders as well as during the first generation step
      when a lot of EQ points are used
    - added "Pano Phase Shuffler" presets in the Paragraphic Phase EQ tab
        * source: http://tinyurl.com/pano-shuffler
        * settings: http://tinyurl.com/pano-shuffler-preset
    - status text under the generation button 
    - added a final optimization step in moderate/extensive/maximal modes
      with a correction factor set to 1
    - added ± 15dB and ± 18dB ranges for convenience in paragraphic EQ tab
    - increased EQ dB precision from 0.1dB to 0.01dB for manual editing
    - set default optimization floor to -100dB
    - faster startup time
    - made clear the fact the subsonic filters linarization options were
      based on optimized approximations (cf http://tinyurl.com/hslsb8m ) by
      by naming them as such and adding "textbook" versions for the most
      reckless users :) 

1.0.0 2015-06-25
  New features:
    - Albrecht cosine windows implementation
      Ref: A Family of Cosine-Sum Windows for High-Resolution Measurements
    - multiple memory slots in range settings to be able to quickly go from
      one view to the other and focus on different aspects of the response
      curves
      These slots are preset with (hopefully) useful values but can be
      manually modified and copied.
    - "Load Settings From Clipboard" and "Save Settings To Clipboard" menu
      entries in order to be able to easily share corrections on web forums
    - frequency marker for the last correction point (5 sec persistence)
    - fader values can now be manually edited to arbitrary values
  Bug corrections:
    - bug correction in Minimum-Phase Filters tab: the polarity of low-pass
      Linkwitz-Riley filters of order 2(2n+1) was reversed
      (eg 12dB/oct, 36dB/oct, 60dB/oct, 84dB/oct, etc.)
      A warning will be emitted when loading correction files from prior
      versions using an odd number of such filters, as the polarity will
      now be correct and reversed compared to the prior bogus correction.
    - bug correction with higher than normal noise floor with even order
      taps (introduced in version 0.9.9 while solving a similar problem
      for odd taps numbers!)
    - bug correction with txt output file with 0.000(...)0 values
      (especially pregnant when using Hann window)
    - correction of the bogus flat top window implementation
    - corner case instabilities corrections (undue octal conversions on
      some value entries)
  Adjustments:
    - set "32 float txt" as the default output format instead of "32bit
      LPCM wav" in order to avoid  rising the result noise floor because of
      the fixed point format
    - added de-empahasis and pre-emphasis presets in the Paragraphic EQ tab
    - added Linkwitz-Riley linearization orders 11th to 16th (why not?) 
    - reduce default phase EQ range to ± 45° (was ± 90°) and removed
      unpractical ranges
    - increase default EQ range to ± 12dB (was ± 6dB)
    - added 384 and 352.8kHz sampling rates as drop menu options for ease
      of use (any other value can still be manually entered)
    - got rid of the "Curves" tab for the time being, waiting for the
      capture functionality to be implemented in some future version...

0.9.9 2014-12-10
    - shelving EQs with variable Q in Paragraphic EQ tab, with associated
      monotonic high and low shelv presets
    - centering can now be manually set to values in samples, percentage,
      time (us/ms/s) and distance (mm/cm/m).
      It is also possible to add or subtract several values, for example
      "middle+270us"
    - new centering adjustment layout:
        * 'float' is now 'use closest perfect impulse' and is explicitly
          recommended
        * 'int' is now 'round to closest sample'
        * 'use exact centering value' has been added for exact delays
    - 32 bits IEEE-754 float WAV output format added
    - output format noise floor is now shown in result curve
    - improved impulse and windowing symmetry, especially when an odd taps
      value is used
    - import/clear measurement file menu entries
    - fix partial installation catch

0.9.8c 2014-09-29
    - correction of a bug introduced in version 0.9.8 for closed-box phase
      linearization

0.9.8 2014-09-28
    - minimum-phase filters tab with common IIR filter types:
        * 1st order
        * 2nd order with arbitrary Q
        * Butterworth with slopes ranging from 6dB/oct to 996dB/oct in 6dB
          increments
        * Linkwitz-Riley with slopes ranging from 12dB/oct to 996dB/oct in
          12dB increments
    - 'compensate' mode for generalized arbitrary order Linkwitz
      Transform-like manipulations in minimum-phase filters tab
    - new centering options expressed as a percentage to easily obtain
      matched delays
    - default to "middle" centering instead of "energy" to avoid delay
      mismatch problems for the unaware user (principle of least surprise)
    - praxis measurement format handling, scientific notation in frequency
      column
    - smaller executable, new installation method
    - bug correction: crash on impulse generation with some specific filter
      settings
    - directory handling bug correction
    - measurements can now be loaded from the command line or drop on exe,
      similarly to settings
    - revamped file extension handling (settings)
    - revamped icon
    - smoothed out taps/fft size calculation

0.9.7 2013-09-03
    - Brickwall filters implementation.
      /!\ result slope relies solely on windowing /!\
      Iterative optimization and energy centering algorithms are
      automatically defeated when a brickwall filter is set, to make it
      possible to build complementary crossovers. It is up to the user to
      make sure he uses the exact same number of taps and same windowing
      algorithm on both sides of the crossover to ensure complementarity
    - sampling rate drop down menu can now also be directly edited to input
      arbitrary values, so menu options have been reduced to the most
      common values for clarity and ease of use
    - frequency, amplitude and phase ranges can now also be set to
      arbitrary values
    - optimization floor can now be set (was -40dB fixed)
    - B-weighting in optimization calculation was removed (for now)
    - new amplitude paragraphic presets with fixed frequencies (1kHz) for
      various Q values (0.5, 1, 2, 4, 8, 16)
    - got rid of scientific notation in txt output format to broaden
      compatibility
    - dark graph theme
    - various graphical bugs resolution
    - C float array output formats
    - filename encoding bugfix: accents and other special characters
      handling in setting and measurement filenames
    - "reject" filter slopes bugfix
    - "Save Settings" menu option 
    - "Save modifications" dialog box before loading/resetting/exiting
    - window title now shows the settings name instead of the impulse name
    - updated 'tips' in Linearization and filtering tabs

0.9.6 2013-04-16
    - show frequency, amplitude and phase from current cursor position in
      graph
    - improved measurement handling:
        * drag and drop loading
        * loading speed up (twofold increase)
        * gain and time offset settings
        * polarity inversion and phase hiding functionality
        * bypass option
        * description: name, number of points, frequency and dB ranges
        * ARTA format handling (trailing spaces in frequency column)
    - Save measurement inside *.rephase settings files together with
      corrections and other parameters
    - new 'constant shape' EQ, both for linear-phase and minimum-phase EQ.
      Equivalent to a constant Q EQ at 6dB, it keeps exactly the same shape
      at any dB setting. It should be preferred to constant Q and
      proportional Q at high dB settings as those two are bound to their
      2nd order definition and have to stay within a ±90° phase range,
      thus leading to odd gain shapes at high dB settings...
    - "What's new" menu entry, exposing this changelog, instead of having a
      separate REDAME file
    - bugfix when loading settings from version prior to 0.9.2: filter
      frequencies were lost
    - going back to forced 'middle' in energy centering when only
      linear-phase corrections are used
    - curve capture functionality teasing...

0.9.5 2013-04-06
    - measurement import implementation, following HOLMImpulse import rules
      and interpolation strategy
      (first draft with limited functionality)
    - Nyquist frequency is now explicitly represented in gain result curve
      as a brickwall low-pass
    - result curves are now cleared upon settings reset or loading
    - improved energy centering algorithm
    - stop forcing energy centering to middle when only linear-phase
      corrections are in use
    - middle click on a fader reset its value to 0
    - bugfix for result phase curve unwrapping
    - bugfix on curves when polarity is inverted and a phase range larger
      than ±180° is chosen
    - bugfix for 1st order high-pass filters

0.9.4 2013-03-16
    - crash at start problems (previsously requiring temp/ dir content to
      be deleted) should now be solved
    - up to 16 banks can now be used in paragraphic gain and phase EQ
    - removed bank EQ tabs (settings saved with banks EQ will be
      automatically reported to paragraphic EQ banks)
    - improved graph range options: frequency and phase range can now be
      set and saved in settings
    - new phase wrapping implementation, automatically adapted to current
      phase range
    - view mode (compact/normal/large) is now automatically saved and
      restored from one run to the next
    - double-click on a fader value entry reset the fader to 0
    - improved raised cosine EQ. Interactions between EQs should now behave
      exacly like the "Ideal Graphic Equalization" exposed here in this
      application note: http://www.nordicsales.dk/imgdb/docs/lakewh_981.pdf
    - better precision for frequency entries (fractional up to 5 chars
      total to fit the entry) and appropriate up/down key binding (0.1hz
      steps under 10hz)
    - real 2/3 and 1/3 octave frequencies in paragraphic EQ sections
      (mandatory to make the raised cosine graphical EQ "magic" work...)
    - improved biquad precision (constant Q and proportional Q EQs) by
      adapting the sampling rate of each biquad to its fc
    - increased Q range (0.1 to 100)
    - improved phase deg precision in paragraphic EQ
    - added ESS sabre frequencies

0.9.3c (misnamed 0.9.31) 2013-01-29
    - mini bugfix for the taps entry...

0.9.3 2013-01-29
    - new Paragraphic EQ implementation, with multiple EQ types:
        * constant Q minimum-phase (new default)
        * constant Q linear-phase 
        * proportional Q minimum-phase
        * proportional Q linear-phase
        * constant slope linear-phase (former implementation)
        * raised cosine linear-phase (beta version...)
      ( bank EQ section remains constant slope linear-phase )
    - FFT size can now be set by user (minimum size is two times the
      smallest power of two equal or bigger than the requested number
      of taps). Setting a larger FFT size makes generation and optimization
      slower, but can increase the precision of the optimization and also
      makes result curves more precise (just a visual effect for that one
      though: no effect on the actual impulse)
    - bug correction: negative gains can now be entered directly from
      the keybord in the Gain EQ Bank tab.
    - exit on repeated errors to avoid "panic mode" effect

0.9.2 2012-11-04
    - added back '24bit LPCM mono' output format, missing since 0.9.0
    - improved up/down key bindings on frequency entries
    - added up/down key bindings for taps entry, with color warnings for
      extreme values
    - new '1st order' and '2nd order' linear-phase filters, meant to be
      combined with an existing (and already corrected in phase) rolloff
      to obtain a linear-phase acoustical Linkwitz-Riley filter
    - made sure 'middle'+'float' centering ends up within -0.5/+0.5 sample
      from middle (was -1/+0.5)

0.9.1 2012-10-29
    - centering 'int' option was not working, this is now fixed
    - more explicit error message when loading a wrong setting file

0.9.0 2012-10-28
    - new file format '.rephase', saving/loading all settings, including
      correction settings, impulse settings, and graph settings
      (old '.jason' files can still be loaded, but impulse and graph
      settings get reset)
    - impulse file is now a three-part thing: directory, filename, and
      format extension. The directory is the only thing that is not saved
      in the '.rephase' file
    - '.rephase' files can be loaded upon start (as a parameter or by drag
      and drop on rephase.exe) or by drag and drop on the user interface
    - new offset option "float" for fractional sample centering, avoiding
      HF ripples in the impulse when the phase target is not a multiple
      of 180° at the Nyquist frequency
    - make "rectangular" the default window function: this should be the
      best choice for phase-only corrections, and "complex" windowing is
      not needed anymore with the "float" offset
      Note: "rectangular" window is still likely to be the worst choice
      for filter generation, when gain target goes far below 0dB...
    - new "ovelapping" filters, to be used for example in the midbass
      region, under Schroeder's frequency...
    - stereo wav formats are now available
    - bug correction in offset calculation in time=inv mode

0.8.4 2012-10-14
    - new time inversion option in general tab, to reverse the generated
      impulse, thus opposing phase corrections. This can be used to better
      visually track a phase target (inverse during correction, and return
      to normal before generating the impulse), or to evaluate the
      audibility of a given correction with headphones for example (in this
      case the convolution of the impulse will simulate the speaker before
      correction)
    - confirmation box when exiting whithout saving modified correction
      settings, and avoid asking for confirmation on reset when correction
      where saved or loaded without modification
    - Improves advice section in the linear filter tab, and add one in the
      linearization tab

0.8.3 2012-10-12
    - range choices in paragraphic EQs (up to ± 48dB and 720°)
    - improve arrow keys binding after click in faders
    - stop constraining frequencies to 16Hz-25khz in paragraphic EQs
      (now 1hz-99khz like in EQ banks)
    - ask for confirmation before resetting correction settings
    - bug correction when resetting settings ("wrong format")
    - stop using '.rephase' as default extension when saving an impulse

0.8.2 2012-10-07
    - try to play nice with multiple screens
    - new "large" layout, and "View" menu for layout choice
    - change Q interpretation for phase EQ to be more in line with gain EQ
      (to maintain an ascending compatibility, phase corrections saved from
      versions 0.8.0 and 0.8.1 get their Q divided by 1.8 upon loading)

0.8.1 2012-10-03
    - fix small bug with slope/ratio display when loading a FIR filter

0.8.0 2012-10-02
    - real-time amplitude/phase curves for both target and result
    - save/load correction settings (/!\ beware /!\, still experimental)
    - Horbach-Keele 'last' ratio (special tweeter) is now a different
      filter type for ease of use and clarity reasons
    - added some more window functions

0.7.6 2012-09-20
    - resolved (hopefuly) some issues with windows XP with the program
      refusing to actually start

0.7.5 2012-09-18
    - bug fix (crash during otpimisation step)

0.7.4 2012-09-16
    - bug corrections
    - optimization iterations are now faster
    - new optimization options ("moderate" and "extensive")
    - Horbach-Keele filters
      (ratio above 4.5 is the special "tweeter" ratio)
    - "Reject low" and "Reject high" filters for higher low or high rolloff

0.6.0 2012-08-26
    - first version on SourceForge