How good is your live stream mix? What does it sound like on the audience end?
How do you quantify that? Loudness metrics are helpful. I discovered YouLean meter like a lot of other sound engineers who have been doing more broadcast gigs during the pandemic. I monitor the live stream on a mobile device on ear buds to experience what the target audience might be hearing.
I still found myself wishing I had another form of reference.
For live in-person events I normally leave Smaart running in two channel transfer function mode to keep track of how the sound in the room might be deviating from the mix I’m pushing out of the console. In broadcast, there is no second channel to compare.
Now that I think about it, I suppose there might be a clever way to set up a transfer function that references the console output and measures a streaming output, but would they stay in synch? Is it even coherent anymore? Anyway, I find myself mostly looking at RTA and Spectrograph graphs these days. If an annoying resonance comes up I can find it quickly, but otherwise I’m not sure how to take action on a single channel measurement.
It occured to me to create a target using some reference material. I can measure a quality broadcast that I enjoy or find something recommended by the client. Since having this idea I have had time to test both. Here’s a screen capture from a recent gig.
Create the target
Creating the target is relatively simple. Just play your reference material, measure it, and store it.
But if you’re like me, you enjoy a certain level of complexity. Maybe you’ve noticed.
Here’s how I did it.
- Record a WAV file of the reference material.
- Import it into Tonal Balance Control.
- Convert the JSON file into three separate spectrum measurements.
- Import them into Smaart.
Someone on FB recommended Later with Jools Holland from BBC2. I recorded some long clips of male dialogue with lavalier mics and male hip-hop with hand-held mics. You can imagine the many variations of microphone, mic placement, instrument, and style available.
Tonal Balance Control is a plugin you would typically insert on the master buss of your DAW to take a look at the average frequency spectrum of your mix and compare it to some common genre targets. It will also allow you to import an audio file to generate your own targets. Those targets are stored as JSON files on your computer.
The JSON files cannot be imported directly into Smaart. Smaart wants to see a column of frequency and magnitude values. You’ll need to reorganize the data. There aren’t that many values so you could do it manually, but I’ve been trying learn MATLAB so I decided to use that.
%% JSON to TXT
% Decode file
filename = 'your file path'; % File from Tonal Balance Control.
text = fileread(filename); % Read contents of file as text.
S = jsondecode(text); % Decode JSON-formatted text
% Convert structure to table
f = struct2cell(S.frequencies_hz.Value); % Convert structure to cell array.
f(1,:) = []; f=f.'; f=cell2mat(f); % Clean and convert to matrix.
% Pull out the three traces (high, mid, and low)
high = struct2cell(S.high_normalized_mag_dB.Value);
high(1,:) = []; high=high.'; high=cell2mat(high);
low = struct2cell(S.low_normalized_mag_dB.Value);
low(1,:) = []; low=low.'; low=cell2mat(low);
mid = struct2cell(S.normalized_mag_dB.Value);
mid(1,:) = []; mid=mid.'; mid=cell2mat(mid);
% I ran makima here to make sure the frequency resolution matches that of Smaart, but it's probably optional.
% Create tables
highTbl = table(f,high,'VariableNames',{'frequency','magnitude'});
lowTbl = table(f,low,'VariableNames',{'frequency','magnitude'});
midTbl = table(f,mid,'VariableNames',{'frequency','magnitude'});
% Write table output
writetable(highTbl,'high.txt','Delimiter','tab');
writetable(lowTbl,'low.txt','Delimiter','tab');
writetable(midTbl,'mid.txt','Delimiter','tab');
Results
I like it! It’s nice to have a second opinion. How does my mix compare to some one elses?
I know that none of the targets I’m using were created under the same circumstances, but I have used them on my last ten gigs and I’ve found them helpful. I can find something that’s bothering me or get ideas for improvements.
The most recent example was a colleague asking me if I could make the mix sound more hyped. Hyped does mean something to me, but what does it mean to them? Luckily, they sent me an example.
I measured it. I found that it was different in some specific ways. I made some changes in pursuit of a compromise. It seemed like an objective way to get more of what they wanted.

Ideas
This gave me an idea for a plugin. If we can compare a measurement against a target, the logical next step is a filter suggestion to move the measurement closer to the target. That’s what I’m doing with my eyes anyway. It would just be nice to know the exact filter gain, width, and center frequency to get there.
I was able to come up with a non-realtime function as a proof of concept. It just finds the point of greatest contrast between measurement and target and then the filter to best reduce it. Sophisticated auto-EQ algorithms probably do this is a smarter way, but this seemed to work for now.
%Find a filter
micCompare = micMagnitude - targetMagnitude; % Find the contrast between the measurement and the target.
[pks,loc] = findpeaks(micCompare,'NPeaks',1); % Find the single highest peak.
peakFrequency = w(loc); % What frequency is it at?
startF = round(peakFrequency); % Start looking at the peak.
startGain = round(pks * -1,2); % Start gain at -1dB.
startQ = 1; % Start Q at 1.
x0 = [startF,startGain,startQ]; % All starting values.
fun = @(x) paramEQmagOnly(x(1),x(2),Fs,x(3),w,targetMagnitude,micMagnitude); % Custom function to find a parametric EQ based on magnitude only.
x = fminunc(fun,x0); % Minimize the function.
Here’s an example plot showing a filter inserted at 6.7kHz.

I spent a few days trying to build a plugin prototype in MATLAB, but I didn’t get very far. There are lots of examples out there of how to easily build a plugin to modify the audio passing through it, but not many to just measure the audio.
Have you tried something like this already? What were your results?
Leave a Reply