Multi-Sub Optimizer Revision History
Version 1.1.10: Released 2022-08-06
Import of measurement text files has been sped up by a factor of 20.
Detection of unintended binary data in imported measurement files has been made more robust.
The help system has been reworked.
All non-trivial dialog boxes and property pages now have a help button. When it's pressed, or when F1 is pressed when the dialog is up, the help topic specific to that dialog or property page in the CHM help file is now launched.
Configuration Templates are now documented.
The Application Options property sheet has 21 property pages, of which only 1 was previously documented. All 21 property pages of this property sheet are now documented (here and here).
The Help submenu of the MSO main menu now has commands that take you to the FAQ, Measurements, and Tips and Tricks sections of the CHM help file directly.
The command on the Help submenu for navigation to the Contents help page has been removed, as that page is meant for web-based navigation. When browsing the CHM file, the Contents tree view should be used instead, as it has links to every HTML heading on every instructional page of the site.
The Contents help page has been reorganized to make web-based navigation to specific help topics easier.
Version 220.127.116.11: Released 2022-06-25
Set the maximum allowable number of threads back to 32. For some currently unknown reason, this results in more efficient CPU uasge with processors supporting 36 threads than allowing the full 36.
Swapped the order of controls on the Optimization Options, Constraints page to match the order on the Optimization Options, PEQ Parameter Limits page (maximum cut before maximum boost).
Version 1.1.9: Released 2022-06-23
Added the Select Graphs to Show dialog for picking which graphs to show or hide as a group.
Added the ability to export biquad text for all channels of a configuration at once.
For normal export mode, the shared MSO sub filters (if any) are exported to a separate biquad text file for use in the miniDSP input filters.
For BEQ export mode, the shared MSO sub filters (if any) are replicated in each output channel to free up the input biquads for BEQ usage.
Reduced the minimum allowable PEQ center frequency to 4.0 Hz to accommodate users with modal peaks at very low frequencies.
Such low-frequency PEQs should be used only in the MSO shared sub channel.
If you don't want to use miniDSP input filters for this, export the biquads in BEQ mode to move them into the individual sub channels.
Optimization now supports up to 50 concurrent threads (but only if your CPU supports it).
The default optimization duration calculation is now based in part on the number of concurrent threads supported by your CPU.
Fixed a crash when accidentally importing binary data as measurement data or a target curve.
Fixed a crash when launching the Optimization Options dialog for a project with no imported measurements.
When exporting biquad text for main speaker channels, shared main channel filters are replicated in each individual main channel.
Version 1.1.8: Released 2022-06-10
Added the JRiver Export Wizard for exporting MSO configurations in a JSON text format for use with JRiver Media Center.
Version 1.1.7: Released 2022-05-31
Added Compensate Denon/Marantz distance/delay errors option to the Hardware property page of the Application Options property sheet.
See the documentaion of The Denon/Marantz Distance/Delay Error Fiasco for a description of the option.
Version 1.1.6: Released 2022-05-05
Optimization now supports up to 32 concurrent threads if your CPU supports it.
The Configuration Wizard now uses a combination of shared and individual gain blocks when creating a new configuration.
A shared gain block with a gain range of 0±24 dB is used. This allows a wide range of reference levels to be chosen.
Individual gain blocks with a range of 0±6 dB are used. This prevents large differences in sub gain between channels.
Version 1.1.5: Released 2022-04-18
Got rid of cryptic default trace names for manually-added graph traces and made them human-readable.
Default trace names contain the relevant config, channel, and measurement or measurement group names from which they derive.
When a config, channel, measurement or measurement group is renamed in the Config View or Data View, all matching traces are renamed when possible.
Version 18.104.22.168: Released 2022-04-06
Bug fix: Graph Axes property page was checking validity of manual axis division increments even when the increments were set to auto.
Bug fix: Regression in 1.1.4 made it impossible to adjust column width of list views on Graph property pages.
Version 22.214.171.124: Released 2022-03-13
Bug fix: When editing text labels in the Config View and Data View, the keyboard shortcuts Ctrl+C, Ctrl+X, Ctrl+V and Ctrl+A now work as they should.
Version 1.1.4: Released 2022-03-11
For graphs, added the ability to manually specify the axis interval value for all axes.
For filter reports, added an "abbreviated mode" display, showing only a minimal set of parameters for each filter.
The minimum system requirement for the Windows version is now Vista.
Version 1.1.3: Released 2021-12-07
The core optimization code has been rewritten from scratch to produce lower errors in less time for the vast majority of projects.
The legacy optimizer can still be used if desired via an option on the Methods page of the Optimization Options dialog.
Added the Allow different SPLs at different listening positions option to the Methods page of the Optimization Options dialog to optionally disallow the responses at the different listening positions from being shifted in level from one another.
Various additions to the Configuration Performance Metrics dialog, including:
Added the ability to compute the overall metrics for the different states of the Allow different SPLs at different listening positions option.
The Metrics for Each Position list control can now be sorted in increasing or decreasing order by any column.
Results from the dialog can be saved to a text file.
If the configuration contains plot-only measurement groups, there are now three options you can use for the computations:
Calculate using only optimized positions
Calculate using both optimized and non-optimized positions
Calculate using only non-optimized positions
If present, plot-only measurement groups are highlighted in a light gray color in the Metrics for Each Position list control.
Version 126.96.36.199: Released 2021-10-17
Fixed a bug that caused a minor optimization slowdown when global optimization constraints were used.
Version 1.1.2: Released 2021-08-26
In the Configuration Wizard, when selecting measurements to associate with a combination of listening position and sub/speaker, selecting a measurement now removes it from the list of available measurements for all other combinations of listening position and sub/speaker. This makes using the Configuration Wizard easier for projects with a large number of measurements.
In filter reports for sub-only configurations, it's no longer necessary to enable the System uses AVR or pre-pro with sub out option in Tools, Application Options, Hardware to see the final sub delay and gain values.
In filter reports for subs+mains configurations, if you fail to select System uses AVR or pre-pro with sub out option in Tools, Application Options, Hardware, you'll get a warning that you need to enable it to see the final sub delay and gain values.
The filter reports now contain a summary of polarity inversions at the end of the report.
Version 1.1.1: Released 2021-08-14
Target curves for any configuration can now be plotted even if no target curve has been imported for that configuration. In this case, the target curve is a flat line.
You can choose to plot a target curve either with its value at the highest optimization frequency normalized to 0 dB, or with this value automatically shifted to the reference level. This choice is selected on the All Traces property page of the Graph Properties property sheet.
The default setting for projects created with versions prior to 1.1.1 is to normalize the target curve to 0 dB, while for 1.1.1 and later the default is to shift the target curve to the reference level. This avoids breaking existing projects.
When a target curve is shifted to the reference level, and Compute reference level automatically is specified in the optimization options, that target curve trace will be animated when running an optimization so that it tracks the reference level changes that occur.
An MLP or main trace must now always be specified in the optimization options regardless of the optimization mode.
The MLP combo box has been removed from the Configuration Performance Metrics dialog, as it always uses the MLP specified in the optimization options.
The documentation has been updated to track the above changes.
Version 188.8.131.52: Released 2021-08-05
Bug fix: When a custom frequency range was chosen in the Configuration Performance Metrics dialog and an imported target curve was used, the computed flatness errors were incorrect if the custom stop frequency was not equal to its default value.
Version 184.108.40.206: Released 2021-08-05
Bug fix: Text above edit controls on the PEQ Parameter Limits property page of the Optimization Options property sheet was being truncated on some displays.
Version 1.1.0: Released 2021-08-01
Added the Measurement Import Wizard and the Configuration Wizard to provide a faster and easier way to create projects and the configurations within them.
Added the PEQ Parameter Limits property page to the Optimization Options property sheet to allow for setting all PEQ parameter limits of a configuration in bulk.
The Optimization Options property sheet for a single configuration can now be launched by right-clicking on that configuration in the Config View and choosing Optimization Options.
Added a Reset All Filter Parameter Values command to reset all filters of a configuration to their default states. This is used when you want to start a new optimization from a fresh state.
Changed acceleration of spin button controls for tuning filter parameter values in the Properties window to make them more responsive.
A progress dialog is now shown during measurement importation.
Added some commands to the Help submenu of the main menu to jump to various subtopics directly.
Default file type for import is now .txt instead of .frd.
The Optimization Options property sheet for a single configuration has been changed from a tabbed type to one with a list on the left for choosing the property page.
Individual PEQs can now have up to 30 dB of center frequency attenuation if needed.
The Configuration Performance Metrics dialog has been updated to add custom frequency ranges for the error computations.
Filter reports now contain a summary of raw gain and delay block parameter values.
The default sampling frequency and maximum biquad count in the Application Options dialog have been changed to 96 kHz and 10 respectively (to match the miniDSP 2x4 HD).
Swapped hotkeys for Copy all Filters of this Channel and Copy Selected Filters. The former is now invoked with Ctrl+C and the latter with Ctrl+Shift+C.
Double-clicking on a .msop file in Windows File Explorer was launching MSO but not loading the project.
Fixed command enabling for the Save BEQ miniDSP Biquad Text for this Channel context menu so it no longer requires that Use crossover biquads if output biquad limit exceeded in the Application Options dialog be enabled.
Spin button controls for filter parameter values in the Properties window weren't always able to hit their limits when being held down.
Graph updates when tuning filter parameters in the Properties window were slow and choppy due to erroneous updates of the Data View and Config View.
The tutorial has been completely rewritten from scratch to describe the usage of the Measurement Import Wizard and the Configuration Wizard, and to emphasize practice over theory. The original tutorial can still be accessed using Tech Topics, Old Topics from the home page.
The reference manual has undergone a major rewrite and reorganization to incorporate the Measurement Import Wizard, the Configuration Wizard and other new features.
Version 220.127.116.11: Released 2021-05-18
The following bugs were present in earlier versions:
- MSO was registering its project file type under the cryptic name "multi-sub_opt.Document".
- MSO's uninstaller failed to unregister this file type.
The following fixes were implemented:
- MSO now registers its project file type as "MSO Project".
MSO's uninstaller now properly unregisters this file type and any other types created by previous versions of the program.
Version 18.104.22.168: Released 2021-04-04
Bugfix: When a command to save filters in text format was invoked from the Config entry of the main menu, the wrong window ended up with the focus after saving.
- Fixed a formatting bug in the filter reports.
- Minor optimization speedup.
Version 22.214.171.124: Released 2021-02-21
Bugfix: When a filter channel was deleted from a config, all filter channel traces matching that channel name were removed from all graphs, regardless of the config name associated with that filter channel trace. Fixed to require a match on both the trace's config name and channel name.
Version 126.96.36.199: Released 2021-02-06
Bugfix: Under certain conditions, spin controls for parameter values in Properties window could stick at their minimum or maximum values.
Version 1.0.47: Released 2021-02-03
Program changes include:
New commands to export to Equalizer APO format. This is for two-channel multi-sub setups. The commands take two forms:
- A command to export the entire configuration's filters (the preferred method)
- A command to export a single channel's filters.
A new command to export miniDSP biquad information for BEQ applications. This is specifically for MSO users who are using shared sub filters and BEQ. The shared sub filters are replicated identically in each miniDSP output channel while removing them from the input sub channel, giving an equivalent circuit. This requires that the option in Tools, Application Options, Hardware to allow the crossover biquads to be used be enabled. For the miniDSP 2x4 HD, this means that the total number of shared plus individual biquads per channal can be as large as 18 (10 in the output channel and 8 in the crossover). This can be any combination of shared- and individual-channel filters as long as the maximum is not exceeded. All input biquads are freed up, allowing BEQ to use them all if needed. It also avoids mixing of input biquads between MSO and BEQ, eliminating the need for biquad merging.
Improved ballistics of spin controls in the Properties window used for tuning filter parameter values.
Improved legibility of parameter name text in the Properties window.
In the filter reports, filters are now grouped by channel.
Low-shelf filters now show the "S" parameter value in the filter reports for use with JRiver Media Center if needed.
Documentation changes include:
Version 1.0.46: Released 2021-01-01
Program changes include:
A new option, Neglect the MLP target curve, has been added to the Optimization Options dialog. When optimizing in this mode, MSO only considers the seat-to-seat variaion of the responses, without regard to the shape of the response curves. This is for two specific purposes.
This option came out of some recent experiments showing that when one attempts to do response curve shaping using only DSP elements whose magnitude response is independent of frequency, the seat-to-seat response variation is inevitably compromised by this attempt. Choosing this option requires that only DSP elements whose magnitude response is frequency-independent (delays, gain blocks, all-pass filters and inversion blocks) be used.
Users who wish to maximize the output of their system by having identical subs and amplifiers, gain-matching the subs, and using only delays in the sub signal paths of their DSP hardware can get the smallest possible seat-to-seat response variation that using only delays allows. Then global EQ can be used in a separate step to shape the response curve.
Users experimenting with Dirac Live Bass Control-like setups using only delays, all-pass filters and attenuation for the subs can explore the efficacy of this technique.
The functionality and appearance of the Configuration Performance Metrics dialog have been changed to better correspond to the latest error calculation methods.
Documentation changes include:
Version 1.0.45: Released 2020-08-04
- Changed the maximum allowable center frequency of all-pass filters to 1.5 kHz.
- Changed the default value for optimization duration to 30 minutes.
- The following documentation changes were made:
Version 1.0.44: Released 2020-07-31
- When the optimization mode was set to "as flat as possible" and the reference level was set to "fixed", only the MLP was using a fixed reference level. This has been changed so that under these conditions, all positions now use a fixed reference level. This change also removed a confusing requirement to specify the frequency range for computing the reference, even though a fixed reference level was specified.
- The optimization mode called "Best match of MLP with other listening positions" has been renamed to "Minimize seat-to-seat variations" and its error computation rewritten. See the error calculation section of the reference manual for details of the computation.
- Response weighting is now only permitted for "as flat as possible" mode, and is no longer used for "minimize seat-to-seat variations" mode.
- In the Configuration Performance Metrics dialog, the results from weighted computation in "minimize seat-to-seat variations" mode have been removed.
Version 1.0.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.0.42: Released 2020-05-26
- Fixed a regression in 1.41 that caused global filter constraints to be disabled.
Version 1.0.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.0.40: Released 2020-01-28
- Deleting a target curve could not be cancelled.
Version 1.0.39: Released 2020-01-21
- Rendering graphs having traces referring to deleted target curves was causing MSO to crash.
Version 1.0.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.0.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.0.36: Released 2019-06-07
- Improved convergence when global constraints are used with a large number of PEQs.
Version 1.0.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.0.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.0.33: Released 2019-04-19
- Bug fix: Global constraints for maximum PEQ boost/cut weren't catching RBJ PEQs.
Version 1.0.32: Released 2019-04-07
- Optimization was failing when maximum PEQ boost and cut were specified simultaneously.
Version 1.0.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.0.30: Released 2019-03-27
- Added support for 192 kHz sample rate in biquad coefficient calculation.
Version 1.0.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.0.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.0.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.0.26: Released 2018-08-05
- Bug fix: Optimizer was occasionally running in a less efficient mode.
Version 1.0.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.0.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.0.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.0.22: Released 2017-07-01
- Bug fix: Help file was always hiding the application.
Version 1.0.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.0.20: Released 2017-02-20
- Added the ability to plot measurement groups in graphs relative to the main listening position.
Version 1.0.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.0.19: Released 2016-11-08
- Allow target curves for sub-only configurations
Version 1.0.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.0.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.0.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.0.15: Released 2016-08-04
- Bug fix: Added missing main menu option to add a sub-only configuration.
Version 1.0.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.0.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.0.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.0.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.0.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.0.9: Released 2016-06-04
- Added performance metrics calculation, displayed on the new Performance Metrics property sheet.
Version 1.0.8: 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.0.7: 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.0.6: 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