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