Multi-Sub Optimizer Revision History
Version 1.43: Released 2020-06-10
- Fixed an infinite loop bug that occurred when all but zero or one solution guesses failed to satisfy global constraints.
Version 1.42: Released 2020-05-26
- Fixed a regression in 1.41 that caused global filter constraints to be disabled.
Version 1.41: Released 2020-05-21
- Modified Normalize Gains, Normalize Delays, Rearrange Gains and Rearrange Delays commands so they add delay or gain blocks when necessary. This means these commands can be enabled in their respective context menus under a much broader set of circumstances than before.
- Normalize Gains and Normalize Delays now internally do a "rearrange" operation when needed, making Rearrange Gains and Rearrange Delays needed much less often than before.
- Added new options in the Application Options dialog to allow disabling some prompts that occur when MSO needs to add gain or delay blocks in a normalize/rearrange operation. See the "Tips and Tricks" section for details.
- Changed the license to one that allows commercial use.
Version 1.40: Released 2020-01-28
- Deleting a target curve could not be cancelled.
Version 1.39: Released 2020-01-21
- Rendering graphs having traces referring to deleted target curves was causing MSO to crash.
Version 1.38: Released 2019-10-17
- Measurement text file import now runs in a separate thread. The previous method of using the UI thread was causing MSO to appear to be locked up when run on a slow machine and importing a large number of files containing data over a wide frequency range.
- In Application Options, Data, you can specify an upper frequency limit for MSO to use when importing measurement data. This can speed up measurement file import when the data exported from the measurement program covers a wide frequency range and a large number of files are imported at once. It also helps in keeping project file size small under these conditions.
- In Application Options, Data, the number of threads used for optimization is now displayed. Its value changes when you alter the state of "polite mode" checkbox.
- A bug was fixed in which tuning a filter parameter when viewing a graph having an active data cursor was failing to update the cursor data displayed in the Graph Cursor Data tab of the Output window.
Version 1.37: Released 2019-09-15
- MSO now requires that no individual PEQ of a configuration have a maximum boost or cut that exceeds the global limits specified in the Constraints property page of the Optimization Options property sheet for that configuration.
- If MSO detects an error in your project that prohibits an optimization from running, the error is now displayed in a read-only tabbed edit view instead of a message box.
Version 1.36: Released 2019-06-07
- Improved convergence when global constraints are used with a large number of PEQs.
Version 1.35: Released 2019-05-29
- The optimization process is now multithreaded, resulting in speed improvements when run on multi-core CPUs.
- Eliminated an inefficiency when the maximum total PEQ boost/cut was specified for optimization of sub + mains configurations. MSO was evaluating the maximum PEQ boost/cut even for channels not containing any PEQ filters (e.g. main filter channels).
Version 1.34: Released 2019-05-07
- Added items to View menu for showing docking windows (Config View, Data View, Output and Properties) that may have been accidentally hidden.
Version 1.33: Released 2019-04-19
- Bug fix: Global constraints for maximum PEQ boost/cut weren't catching RBJ PEQs.
Version 1.32: Released 2019-04-07
- Optimization was failing when maximum PEQ boost and cut were specified simultaneously.
Version 1.31: Released 2019-04-04
- Added overall PEQ boost/cut constraints via the Optimization Options, Constraints property page to eliminate the PEQ "stacking" problem.
Version 1.30: Released 2019-03-27
- Added support for 192 kHz sample rate in biquad coefficient calculation.
Version 1.29: Released 2019-03-24
- Added option to specify the biquad limit for input, output and crossover separately.
- Added option to use crossover biquads if the output channel biquad limit is exceeded.
- Removed padding in saved input and output biquad text files.
Version 1.28: Released 2019-03-08
- Added plot-only measurements to help with verifying MSO's predicted performance against actual measured data.
- Added option to specify the maximum points per octave in the measured data used for optimization.
- Fixed edit controls that weren't being grayed out when set to read-only.
- Set the default minimum center frequency of PEQ filters to 20 Hz.
Version 1.27: Released 2018-12-08
- Phase unwrap wasn't working for traces of type Measurement.
- Clicking certain checkboxes in the Trace Properties dialog wasn't enabling the Apply button.
Version 1.26: Released 2018-08-05
- Bug fix: Optimizer was occasionally running in a less efficient mode.
Version 1.25: Released 2018-07-18
- Changed filter report output for 2nd-order LF shelf filters to account for some quirks in JRiver DSP software for this filter type.
Version 1.24: Released 2018-05-02
- Maintenance release: recompiled using latest Microsoft Visual C++ version that fixes compiler bugs related to code optimization.
- Updated "Tips and Tricks" help section to document Rearrange Gains, Rearrange Delays, Normalize Gains and Normalize Delays commands.
Version 1.23: Released 2017-09-15
- Added parametric EQ filters using the RBJ convention for Q to allow the full range of available Q values to be used in the iNuke DSP amps
- Added first-order (6 dB/oct) low-pass and high-pass filters
- Rearranged filter context menus for better legibility
Version 1.22: Released 2017-07-01
- Bug fix: Help file was always hiding the application.
Version 1.21: Released 2017-07-01
- Bug fix: Renaming a filter channel caused corruption of measurement groups having measurements associated with that channel.
- Numerous documentation changes
Version 1.20: Released 2017-02-20
- Added the ability to plot measurement groups in graphs relative to the main listening position.
Version 1.19a: Released 2017-02-10
- Bug fix: If a measurement position was chosen as the main listening position, then subsequently renamed, the internal name for the main listening position was not updated.
Version 1.19: Released 2016-11-08
- Allow target curves for sub-only configurations
Version 1.18: Released 2016-10-17
- Allow the fixed reference level optimization mode to be used for "sub + mains" configurations.
- Added ability to save graph traces as .frd files.
- Filter reports of HF shelf filters now contain a high-frequency corner to make them Behringer-compatible.
- Filter reports of parametric EQ filters now contain bandwidth in octaves per Bristow-Johnson's PEQ specification.
- Bug fix: Allow high-pass filters in shared sub channels.
- Documentation changes:
Version 1.17: Released 2016-08-30
- Added ability to save scaled PNG files of graphs.
- Disable reference frequency range controls in Optimization Options, Criteria for sub-only configs whose optimization method is Best match of MLP with other listening positions.
- Allow low-pass filters to have a maximum legal cutoff frequency of 300 Hz.
- Delete graphs that have no traces after a config is deleted.
- Collapse individual config and graph nodes by default.
- Updated help files.
Version 1.16: Released 2016-08-20
- Bug fix: Starting in 1.13, corrected individual delays were not being reported at end of filter report for configurations that were not sub-only.
Version 1.15: Released 2016-08-04
- Bug fix: Added missing main menu option to add a sub-only configuration.
Version 1.14: Released 2016-08-01
- Bug fix: Saving filter channel biquad text to a file gave incorrect results if a filter report hadn't been generated first.
- Bug fix: Updating properties of target curves did not update graphs having the corresponding target curve traces.
- Added cubic spline interpolation option for target curves.
Version 1.13: Released 2016-07-25
- Added "sub-only" configurations with the following characteristics:
- Main speaker measurements are not needed for the optimization to run.
- A main listening position (MLP) must be specified, even when the optimization method is "as flat as possible".
- A fixed reference level in dB SPL, which applies only to the MLP, must be specified.
- If the number of subwoofer channels is N, then N subwoofer gain blocks can be specified.
- For N subwoofer channels, only N - 1 subwoofer delays can be specified.
- Shared subwoofer delay blocks cannot be used.
- When cloning a sub-only configuration, there is an option to convert the clone to a conventional "mains plus subs" configuration.
- You cannot add main filter channels to a sub-only configuration.
- A target curve cannot be specified for a sub-only configuration.
- You can now copy a single filter to the clipboard by selecting it and pressing Ctrl+C.
- Clarified filter report information for delay and gain blocks when the option to use an AVR is chosen.
- Changed default delay limits and absolute minimum/maximum delay hard limits for delay blocks.
- Fixed a bug that occurred when choosing an MLP and later making the MLP plot-only.
- Added "Normalize Gains" and "Normalize Delays" commands:
- "Normalize Gains" forces each individual channel gain to be zero or an attenuator without having to perform "Rearrange Gains" twice.
- "Normalize Delays" forces each individual channel delay to be zero or positive without having to perform "Rearrange Delays" twice.
- Added the ability to save a filter channel's response as a target curve. Target curves are saved from 5 Hz - 400 Hz, 200 steps per decade.
- Added new low-frequency shelving filters that allow the center frequency to be specified. This simplifies making target curves with such filters.
Version 1.12: Released 2016-06-22
- Added ability to save filter biquad coefficients as text files, with the same format as used by REW, for input to miniDSP devices.
Version 1.11: Released 2016-06-18
- Fixed incorrect sub data scaling in static graphs of measurement groups when there is more than one main speaker in the group.
Version 1.10: Released 2016-06-14
- Added "tool tip" help to all UI controls of all dialogs.
- Added six new filter types
- Linkwitz Transform low shelf
- Linkwitz-Riley fourth-order low shelf (see mid-bass module article for details)
- First-order high shelf
- Second-order high shelf
- Second-order high shelf, variable Q
- Linkwitz Transform high shelf
- Added default parameter limits property pages to the Application Options property sheet to support the above six new filter types.
- Fixed sluggish manual tuning in Properties window for parameters such as Q, which have more than 2 decimal places of precision
- Allow specifying the maximum biquad count supported by your DSP, for compliant advanced biquad format for more DSP types. Examples:
- miniDSP 2x4 with 2x4 advanced plug-in has a maximum of 5 biquads per channel
- miniDSP 2x4 with 1x4 advanced plug-in has a maximum of 6 biquads per channel
- miniDSP 2x4 HD has a maximum of 10 biquads per channel
- Allow adding low-shelf filters to main speakers (to aid in achieving a target curve)
Version 1.09: Released 2016-06-04
- Added performance metrics calculation, displayed on the new Performance Metrics property sheet.
Version 1.08: Released 2016-05-28
- Added the ability to copy and paste filters in the Config View.
- When cloning a configuration, you can now specify that all graphs of the original configuration be cloned as well
- Bug fix: Low-pass filters are no longer permitted in Mains filter channels.
Version 1.07: Released 2016-05-15
- Added optimization mode that gives the best match of non-MLP frequency responses to the MLP
- Requires specifying which listening position is the MLP
- Specified in the new Method property page of the Optimization Options property sheet
- Use this mode for best performance when a later global EQ step will be applied to the MLP
Version 1.06: Released 2016-04-24
- Properly scale sub data when left and right main speakers are energized and measured individually instead of together
- Needed when using REW acoustic timing reference for two-channel systems or MCH when main speakers are left and right (not center)
- Situation is detected automatically with no user intervention required