Compressor Measurement Toolbox Manual
CMT is a pack of several VST-plugins designed to measure and view compressor parameters such as Attack, Release, Threshold, Ratio and also others like Knee, Gain Compensation.
Plugins can work in fully-automatic mode and support manual adjustments. You can view measured values and save SVG-snapshots for viewing high-resolution graphs in your browser (using full-screen and zooming). Go into "live-mode" so that you can view snapshot changes in your browser "on-the-fly".
You can also save references to compare different compressor settings and match one compressor to another. To expand your capabilities there's a function to save CSV "raw-data" for in-depth analysis or your compressor behaviour.
CMT now includes CMT Test Tone (tone generator), CMT Attack Release and CMT Threshold Ratio (measuring tools).
* Mac version is experimental and not fully tested.
Unzip archive into your VST folder keeping the files/folder's structure.
* Note, that VST3 plugins on Windows are usually located at:
"C:\Program Files\Common Files\VST3".
Attack and Release
How to measure Attack and Release
How Attack and Release times are calculated
How "CMT Attack Release" plugin works
Saving SVG snapshots
Saving and using RAW-data
Keeping snapshots for future use
Plugin controls overview
How to measure Attack and Release
Set chain: CMT Test Tone -> Your Compressor -> CMT Attack Release
* You can use mono or stereo/multichannel tracks. If required, you can add more plugins before of after compressor (for example to adjust pre/post gain).
Turn on CMT Test Tone and switch it to "Att / Rel" mode.
You can then right click on other knobs to set them to default values (if they are not yet) and adjust from there. Shift+drag gives more precision. Double-click to enter numeric values.
Choose test tone frequency (for example 1500 Hz).
For best results you can set frequency in samples (turn the freq set knob far clockwise).
Wavelengths or 20, 16,12, 8, 4 samples give the best precision (see the resulting frequency on Test Tone LCD and see resulting Resolution in CMT Attack-Release settings page).
* If you want to set frequency that is not in "presets" click on frequency value under freq set knob to go to Test Tone "free frequency" mode.
Set Test Tone High Level Time to Off (temporarily) and set Low Level to about -25 dB.
Set your compressor threshold to say -18dB. Check your compressor meters to make sure that it is not yet compressing (when signal is low). If your compressor doesn't have threshold knob, you can adjust compressor input gain or adjust Low Level (it goes down to -36dB or even lower by double-clicking and entering numeric values) to make sure your compressor is not compressing on that level.
Now set High Level Time to say 0.5 s and High Level to -5dB. Your compressor should start to react and show reasonable gain reduction (5-15dB). Adjust threshold / ratio to get about -10 dB of GR.
Open CMT Attack Release (if not yet) and see what's going on.
The graph shows level changes (inaccurately), so that if your attack is fast enough, you can even not see the peak. But the white line helps you identify achieved maximum and minimum values.
The red and green lines show the level where attack and release times are measured. You can adjust those changing "attack measure" percents (the values under the measured attack and release times). Read more below.
Low Level Time and High Level Time should be set long enough so that attack and release phase fully end (the white line helps you identify that – it goes vertically on that points). If you have long attack (say 50ms), set High Level Time to 500+ ms. If you have short attack, you can shorten High Level Time. The same for Release.
How Attack and Release times are calculated
As you can find out, there's (sadly) no common rule for measuring attack and release time, so every manufacturer does it in it's own way. Some say you measure attack time when compressor reaches almost full Gain Reduction (say 1 or 2 dB close to full GR), others say it's when your attack reaches 10 dB or GR (I don't fully understand it yet).
The best answer that matches the real experience I've found in Gregory Scott (UBK) article on compression myths: https://www.attackmagazine.com/features/columns/gregory-scott-demolishing-the-myths-of-compression/
It says: "Attack is the length of time it takes a compressor to apply roughly two-thirds of the targeted amount of gain reduction".
It about 60-70% of GR, and my experiments in most cases approved that too. I used respected and trusty Oxford Compressor as a reference, and checked other compressors to see if they give similar results.
So if our compressor applies 10 db of GR, attack time is when it applies first 6-7 dB. The same with release – when it starts to release and first 6-7 dB are "given back", it's the release time.
Oxford Compressor seems to use ~63% value, which also somehow reminds me of electronics (RC time constant, the time when capacitor charges ~63%) which I decided to set as default in the CMT Attack Release plugin, but you can adjust those values from 0 to 100% and set your own rules 🙂 (or better match or own beloved compressor).
How "CMT Attack Release" plugin works
The CMT Attack Release plugin detects the sudden changes in level as beginning of attack or release phase, then detects max/min level values, then waits until signal is static enough (so we can say that GR is reached), measures GR (from max/min value to static value) and on next iteration it's ready to measure attack and release time knowing what GR we have. As GR measured on attack and release phases can be a little different (mostly because attack peak can be already "eaten" by compressor), the plugin can use maximum detected GR for better results (it's the default behaviour, but you can change that in setting).
If you decide to use only "attack GR" (gain reduction measured during attack phase) with fast compressor, you can temporarily disable compression and "lock" maximum level, so that even if your compressor is eating maximum level, the attack GR is measured from that "locked" maximum level.
Saving SVG snapshots
As Plug-n-Script graphics was a bit limited in showing real compressor curves (especially on fast attacks) I was looking for a way to save hi-resolution pictures and SVG seemed to be a good idea.
At the left bottom corner of plugin window there's a "save snapshot" icon. Click on that to save snapshot
(mute output and save snapshot buttons)
Go to plugin folder and find "Snapshot_AR" folder. Inside there is "attack_release_data" folder with SVG files. A file called "attack_release_data/attack_release.svg" is a full SVG snapshot which you can view/share/edit (it can be opened in text editor, try that).
* Other SVG files in folder are parts/layers used to be viewed in HTML-viewer (see further).
Try to view snapshot in HTML-viewer, for that open "Snapshot_AR/attack_release.html".
While in HTML viewer, you can turn on/off snapshot layers (level curve, info, controls etc).
You can set snapshot name (for convenience). The name will stay there even if you reload page (but not if you close the browser).
You can click on zoom icon near snapshot name and adjust zoom slider. There are two types of zoom – proportional (xy) and horizontal (x) only.
Best part – "live-mode". Click on time under snapshot name to enable it.
In live mode you always see the latest saved snapshot (the images are auto-refreshed). Also you'll see "progress bar" when snapshot is saving.
In the plugin you can also enable live mode (open Settings – Save snapshot: live mode). So next time you click on "Save snapshot" icon you'll get snapshots saved automatically on and on.
Basic SVG snapshot resolution is 1ms which is good enough in most cases. But it you have a really fast attack (or release), you may wish to go "deeper".
For that you can enable saving a few first milliseconds of attack or release. (Enable option "hi-res att | rel").
It requires more CPU so if you don't need it, just keep it "off". But now set it to say 15 ms and save a snapshot. You'll see more SVG layers in your folder and in HTML-viewer (maybe you'll have to refresh it – enable "live-mode", or hit "F5" to reload the page). Now you can examine attack/release curves with high precision.
* You'll get the best results using high samplerates (for example 96000) and frequencies with length of 20, 16, 12, 8 or 4 samples (turn Freq Set fully clockwise in Test Tone). Watch how "Resolution" changes in CMT Attack Release, when you change the frequency.
There are two ways to compare different compressors or compressor settings.
Save a snapshot, open it in HTML-viewer (don't enable live-mode), give it a name. Save another snapshot, open it again in another tab, give it a name. Now you can switch between tabs in your browser and compare different snapshots.
Another way is to save snapshot as 'reference", so that you can view both curves on one page. Click "ref: save" to save reference (or "del" to remove it later). Reference is displayed in red. If hi-res is enabled, reference is saved in hi-res too.
Saving and using RAW-data
If you're developing your own compressor, you may be interested in saving data as "numbers" for further analysis. For convenience, all snapshots can also be saved in CSV format. For that select "Save snapshot: with csv".
After saving snapshot, you'll find saved data in folder "Snapshot_AR\attack_release_data"
look for file "raw_data.csv". The data in CSV-file matches the basic SVG-snapshot with 1ms resolution.
* You can open csv-files in LibreOffice Calc, Microsoft Excel or similar software. The values are separated with semicolon.
If "hi-res att (rel)" is enabled, also look for "hires_attack_data.csv" and "hires_release_data.csv". These files contain data with max resolution.
You can use regression tools (http://www.xuru.org/rt/toc.asp) with these data for further analysis. For example: get formula showing how gain reduction depends on time in your hardware compressor and implement that in digital domain.
Publishing and sharing snapshots
If you want to make a few snapshots and send them to your friend, share online or save them for later you can do it in couple ways:
Copy the whole folder (better for archiving)
This way all layers, raw data, hi-res data is saved.
Save a snapshot
Copy a folder "Snapshot_AR" (don't remove it, just copy) to a new location. Rename it to say "Snapshot_AR_1176_4_to_1" or to just "Waves 1176 ratio 4 to 1".
Open the file "attack_release.html".
You'll see now that snapshot name uses your folder name.
* If you want to set custom snapshot name (for example to use special characters, not allowed in folder name), you can edit the "attack_release.html" file. Find the line (near the top)
snapshot_name = "";
set your permanent snapshot name there.
Use a single SVG-file (better for sharing online)
Save a snapshot
Copy or move a single file "Snapshot_AR/attack_release_data/attack_release.svg".
rename it to whatever you want.
You can open it in text editor and change snapshot name.
For that find and edit the line:
<text class='title' … >Compressor snapshot</text>
You can also remove any parts of SVG image if you don't need them. Save.
Plugin controls overview
In the top section you'll find the measured values of attack and release time. Below them there are controls to change the point where attack and release times are measured (from 0 to 100% of Gain Reduction). Read more on that in "How Attack and Release times are calculated" chapter. Calculated levels are shown as red and green lines on graph.
In the Settings and details section you'll find extra controls and values. Editable controls are white.
Attack measure level, release measure level – levels, calculated from "attack/release measure" percent values on top of the plugin. Plugin first measures GR, then calculated these levels.
GR [max|attack|release] – view/select which GR to use for calculation (see above). Read more on that in "How "CMT Attack Release" plugin works" chapter.
Attack end, release end – time and level where attack / release phase is considered to be finished. For that the level must be static enough for a period of time. The white line on graph shows start and end of each period. Make sure "High level time" and "Low level time" set in Test Tone plugin are long enough for attack and release to end.
Current level – current level, shown by main curve.
Max level [auto|locked] – maximum reached level recalculated on each attack. Maximum level is used for calculating attack GR (max_level – attack_end_level). So if your compressor is eating attack peak really fast, you may want to "lock" your max level (do it, when compression is disabled). This way attack GR will be calculated more accurately. But as GR is also calculated on release phase, "locking" attack GR is not obligatory.
Min level – level, recalculated on each release. Used to calculate release GR (gain restoration).
Frequency – detected test tone frequency.
Resolution – maximum resolution in ms. Depends on frequency and samplerate. In this plugin high and low frequencies are detected differently. Frequencies with wavelength greater than 28 samples (< 1575Hz @ 44100 ) are detected with peak detector (so resolution depends on frequency/wavelength), level of signals with higher frequencies are averaged with 28 samples "window". So the resolution is limited by that 28 samples "window". But for the frequencies with wavelength of 24, 20, 16, 12, 8 and 4 samples (they "look good" in digital form) also peak detector is used. This way resolution can be really good using such frequencies and high samplerates. (Just concern that frequencies will be high too – maybe your compressor is usually not working in that frequency range). When resolution is high ("the good frequency" is used) the resolution is shown with 3 digits and in light green.
Input channel – select Left|Right|Stereo input for plugin.
Save snapshot – select between three modes of saving snapshot:
"normal" – save single SVG snapshot after end of next cycle.
"with csv" – same as normal but with raw data in csv format.
"live mode" – save snapshots continuously.
Hi-res att | rel – affects snapshot saving. Enables saving first few milliseconds of hi-res attack/release curve as separate svg-files / layers. Requires more CPU. This option also affects saving hi-res CSV RAW-data.
Ref save | del – save or remove "reference curve" for current snapshot.
In the bottom section you'll find a few icons-buttons. An info line is placed between them, sometimes showing hints and messages.
Mute output – if you don't want to hear the test tone and forward it to next plugin. Turns blue when enabled.
Save snapshot – start/stop saving SVG snapshot / raw data (depends on settings). Turns blue when saving single snapshot or reference, green when saving in live mode, red when deleting reference.
Show/hide settings and details – show additional controls and values. Turns blue when active.
Pause – pause graph and value changes on display. Turns blue when paused.
Threshold and Ratio
Setting up the chain in your DAW
For measuring Threshold and Ratio both compressed and original test tone signals are required (via Sidechain or extra channels).
There are several ways to set a plugin chain for that:
A) Use a single track (may not work for some compressors)
1) add a quadro (four channel) track
2) insert CMT Test Tone and switch it to Thr/Ratio mode
3) insert your compressor (it should affect only channels 1-2)
4) insert CMT Threshold Ratio
If your compressor is affecting (altering) not only channels 1-2, but all channels on quadro-track, you may try a different way of setting all up:
B) Use separate tracks
1) Add two stereo tracks and one quadro (four channel) track.
2) Insert CMT Test Tone on track 1, your compressor on track 2 and CMT Threshold Ratio on track 3 (on the four channel track).
3) Route test tone signal from track 1 to track 2 (inputs 1-2), output from track 2 to track 3 (inputs 1-2)
4) Route original test tone signal from track 1 to track 3 (inputs 3-4).
* If you're using VST3 version of a plugin, you can send test tone to the SideChain input of CMT Threshold Ratio.
Open CMT Threshold Ratio and click on Settings & Details.
If everything is OK, you should see the white line, showing the original test tone signal and the blue line, showing the compressed signal.
If it doesn't look like that, check input channels. You can set plugin to receive compressed signal through Left (1st), Right (2nd) or Stereo (1-2) channels. And you can set it to receive original (test tone) signal through channel 3 or though Sidechain Left or through Right (2nd) channel (if you're using mono compressor that alters only Left (1st) channel).
Auto and manual modes
Threshold and Ratio are calculated automatically, but you can switch them to Manual mode clicking button.
Note that in AUTO mode plugin can usually determine threshold and ratio even in difficult cases (when the curve is far from linear). Depending on the curve values it calculates the range of thresholds and selects most probable. The same with ratio – it calculates the range of ratios and selects most probable (shown in the top line).
In "Details and settings" you can see the range or Ratios that are calculated from current curve (and also see the latest calculated value) and also the approximate Knee size (in case your compressor has a soft knee).
In Threshold Manual mode you can adjust threshold using left fader. The ratio depends on threshold, so changing threshold you'll see ratio changing. Use shift for high precision, double click fader to enter value.
In Ratio Manual mode you can set the point for measuring ratio using right fader. Note, that the fader relates to the white line (original test tone signal).
Compensating make-up gain
Many compressors add makeup gain after compression. That should be compensated for proper threshold/ratio calculations.
CMT Threshold Ratio tries to compensate that gain offset automatically (comparing compressed and original signals). But if this offset is not calculated correctly, you can switch it to manual mode and set manually.
You can view true compressed signal as light blue graph (very transparent), and gain compensated signal as heavy blue graph (almost opaque). If your compressor ands no make-up gain, you'll see them as one blue graph.
Gain compensated signal is used for calculations. The original signal (true level, not gain compensated) is shown just for you to know that your compressor is adding gain (and to see how much gain it adds).
LCD curve modes
Set the LCD curve to "settled" mode, if you want to see the smooth line (more like in traditional "threshold/ratio" compressor graphs). This way only "settled" levels are shown on the graph (the levels, that are achieved at the end of each step, when compressor hopefully reaches full gain reduction).
Set LCD curve to "realtime" mode to see what's really going on. This way you see the 1db steps in test tone signal and probably the little "attack" periods when signal is over threshold.
Adjusting test tone settings and range
If your compressor attack is long, set Step Duration (in CMT Test Tone) to large enough value (0.250 s and more), so that full GR can be achieved on each step. If your attack is short, you can set Step Duration to a shorter value (say 0.100 s), so that the whole cycle will take less time.
Set Pause (in CMT Test Tone) to a long enough value, so that your compressor can fully release before new cycle starts.
Set Min Level and Max Level (in CMT Test Tone) so that you're covering the range of levels that you need. Default values are from -60 dB (Min Level) to 0 db (Max Level).
If you know, that your compressor's threshold is about -18db, and you want to save time, set Min Level to say -30 db. This way each cycle will end faster.
If the default range of 60dB is not enough, you can switch Range to "100 dB" and reload CMT Threshold Ratio plugin (remove and insert the plugin again). You'll see the grid changed to 100db resolution.
Don't forget to adjust Min Level (in CMT Test Tone), so that it starts at -100db (or where you wish).
You can use any Test Tone frequency, but as described in Attack Release chapter, for higher frequencies (>1500 Hz) consider using frequencies with period length of 24, 20, 16, 12, 8 or 4 samples, as they give a slightly better precision.
You can save SVG snapshots (just as in "CMT Attack Release"). Snapshots are saved in "Snapshot_TR" folder in your plugin folder.
Read more on saving and managing snapshots in "Attack Release" chapter.
Two curves are saved: the true level signal curve and gain compensated curve (with makeup gain compensated), they are shown in different color. If your compressor adds no makeup gain, both curves will be equal.
The simple (single image) SVG snapshot can be found here:
You can edit it in text editor, share online, etc.
In HTML-viewer ( Snapshot_TR/threshold_ratio.html ) you can show/hide layers and enter snapshot name for convenience. You can refresh the page, but snapshot name stays there till you change it or close the browser.
Enable "live-mode" clicking on time under snapshot name to auto-refresh the snapshot. Enable "live mode" in plugin ("Save snapshot: live mode") to auto-save snapshots after each cycle.
Reference can be saved for comparing different compressors or compressor settings. Reference curve is shown in red and it can be saved for either gain compensated ("save") or true signal curve ("save true").
You can also save snapshot "with raw data", which means that CSV file will be saved: "Snapshot_TR/threshold_ratio_data/raw_data.csv".
How to use raw data to make formulas
For example you want to get the Gain Reduction formula for your DIY compressor project from measuring some other compressor. Save a snapshot of that compressor and…
1. Open raw_data.csv in Excel or LibreOffice Calc (or anything similar, capable of opening CSV data separated with ";")
2. Watch column G to find where THRESHOLD starts (let's suppose it's -29.97dB). Copy data from columns C & D (C: Level over threshold and D: Gain Difference). You can copy only data from -29 dB to 0dB
For example you copy these values to clipboard:
Over threshold (dB) Gain diff (dB)
3. Now go to http://www.xuru.org/rt/PR.asp
paste your data and get formula out of it.
For example in this example we get formula:
y = -3.949973466·10^16*x^2 + 0.75*x + 0.0025
which can be basically rounded to
y = 0.75*x
The generic formula for gain reduction is:
gr = (1 – 1/ratio) * db_over_threshold
So in case ratio is 4 (4:1) we get
gr = (1 – 1/4) * db_over_threshold
This is exactly what we get from regression analysis above.
gr = 0.75*db_over_threshold
Polynomial Regression seems to work well for both linear and non-linear curves (compressors with hard and soft knee). Just don't forget to round it a bit. You can try other regression modes for different curves: http://www.xuru.org/rt/
Good luck with Math 🙂
Test Tone Generator
Test tone generator outputs sinusoidal signal in several modes:
1) Simple – generates sinus of given volume/frequency
2) Attack Release – generates two levels (high and low) of different durations
3) Threshold Ratio – generates growing level (each next step is 1db louder) with given step duration and pause duration after whole cycle.
Built in LCD shows current sample rate, output level (in dB), current mode (click to switch to next mode), frequency and period length in samples and milliseconds (click to view real/calculated values).
As frequency can be set both in Hertz and in samples, LCD can be helpful to see how they relate.
The Enable button turns generator on and off. It always goes off on zero-crossing, so you can safely automate it to generate/record good-looking sinusoidal signals in your DAW.
You can quickly change frequency based on "presets" or set any desired frequency (click on value under "freq set" knob to switch to "any frequency" mode). Hold shift for high precision or double click to enter value.
While in "freq set" mode, you can set frequencies not only in "Hertz" but also in "samples". Frequencies with period of 24, 20, 16, 12, 8 or 4 samples give the best precision for measuring (especially for Attack Release).
In simple mode you can set frequency and level. The default range for level is from -60db to 0 db in 1db steps. If you click on value under "level" knob, you can extend this range to -200db .. +24 db. Hold shift for high precision or double click to enter value. Right click to set default level (-12db).
Attack Release mode
In this mode you can set high and low level values. If you double click the level knobs, you can enter levels from -120 to +24 db. Holding shift gives more precision, right click sets values to default.
You can set High Level time to Off or set it to very short values (using little knob, that appears on next step after "Off"). Short high level times are there to test how compressor reacts to very short peaks.
Low level time can be set really long (up to 30s) for measuring very long releases.
Threshold Ratio mode
You can set Min and Max levels from -100 to 0 db, set Step Duration in (milli)seconds and Pause duration (in Steps). In this mode generator raises the level 1db after each step (from min to max). Pause is the silence after each whole cycle that gives compressor time to release.
CMT on GitHub
If you're a Plug-n-Script owner, you can check out the github repository with source files:
Support and donations
I'll be glad to hear what you think. You can comment on YouTube:
Please, give back if you can.
Support a charity project or donate: paypal.me/letimix
Peace and love to you all!