I searched, so apologies if I missed this discussion elsewhere… I have a need to compare a series of tones / samples and create an EQ profile to equalize them. I’m content to drag sliders manually, since this is a one-time need, but I’m looking for the best way to achieve this.
Background… I’m uploading MP3s to an IVR (phone menu tree) service, and the resulting audio (e.g., web playback) is nowhere near the quality of the file provided. I’m familiar enough with IP telephony to realize the codecs and compression that can come into play, but this is happening before we even get to the phone network. (The good news is that their playback over the phone network sounds exactly like their web playback.) My suspicion is that they are resampling or EQ’ing the file (regardless of how low I set the bitrate, etc.) - even a low-quality upload is being degraded.
When I provide a higher-quality file, it seems like the damage on their side may be fixable by compensating via EQ when generating the MP3.
What I’d like to do is record a sequence of tones that align with the EQ sliders, upload it, capture the degraded playback from them, compare the files, and create an EQ profile that zeros out the effect they are applying.
I’ve read here about inverting a track to subtract it from another. Is there a way to translate the result into an EQ profile?
If it’s an MP3 file,you can usually get in a good clip, but if you submit high quality WAV, it’s usually 10 seconds mono and 5 seconds stereo.
Most first-time recordists get killed then they encounter loudness wars and sound compression. No, that rock band didn’t sound anything like that when they recorded their studio performance. There was a lot of post-production work to get that effect.
So making a perforance dense and loud is good as well as clustering work around frequencies your ear “likes.” Let’s see how they did it.
Generate a sliding tone (a “chirp” Audacity Manual) of a reasonable length (would 100 seconds be too long for the service? Anything over about 10 seconds should do, but a longer track will allow you to examine the results more closely).
Set the start and end levels to 0.5 (which is -6 dB), start frequency 1 Hz, end frequency 20000 Hz, Interpolation “linear”.
After the on-line processing, you will no doubt find that test signal becomes “flat-line” at some point. That point corresponds to a frequency.
“Plot Spectrum” of the processed track will show you the frequency response.
I’ve tried the chirp method for the moment, and indeed it does cutoff at the upper frequencies - far higher than probably needed for telephony purposes. I re-ran the process from 1-5000Hz over 30 seconds, captured the playback, and did a frequency analysis of the returned signal:
Now, in fairness, this is not a good recording of the playback, but it serves for discussion. (More on the capture method below.)
So, taking the graph above, is there a way to invert it and translate it to EQ values to create a flat-top like the input file? Or is it a matter of doing it visually with the EQ sliders (which is OK too).
And before I do that…is there a way for Audacity to record from the laptop’s speaker channel? The above was done using the built-in microphone, which of course has its own response curve and won’t be accurate, as do the speakers. (Ideally, I’ll find a way to rip the playback file directly in digital format. In this case the playback is happening via a flash-based player, so some under-the-hood nerding will be required. I’m on MacOS 10.9.5 with Audacity 2.0.6)
OK, a little lightweight hacking… exported an EQ curve as an example XML file, plus the data on the Freq Analysis, and crafted my own curve in an Excel table. I used the peak amplitude as the baseline and adjusted all the frequencies so they’d end up at that value. However, I have some work to do on the math, because you can see I didn’t get to flat - just flatter.
I’m not sure if the issue is the logarithmic scale (which I didn’t make any adjustments for in the math), or the way the EQ values work. Since close values got pretty flat and very divergent values only got closer, I’m thinking some logarithmic math is needed in creating the curve.
E.g., if the baseline amplitude was -40dB, and a frequency value was analyzed at -63dB, I set the curve to +23dB for that frequency. How should the math be done there?
Yes, certainly the sample I recorded is useless for any practical purposes - here it’s just fodder for trying the EQ technique. I need to capture pure audio output for the real deal (possibly via a network trace file).
So, curiously, here is the EQ curve, and below it is a subset of the imported XML file. The interesting point is that the EQ curve does not look like the imported XML values - most of the first several frequencies are supposed to adjust upward by 27dB, but are only 21dB on the curve, and the net effect appears to be only 10dB. Any insight there?
Aside from not completely flattening out the mid-tones, it seems like the EQ has an upper limit of perhaps +20dB. But that still doesn’t explain why +20dB on the curve only has a ~+10dB effect on the actual recording.
The Equalization effect has two “modes”. In the “Graphic EQ” mode (the view with sliders), the gain range is +/- 20 dB. In the “Draw Curves” mode, you can go far beyond that range (not sure “how far” without checking, but certainly “far”). The “bug” is that if you select the EQ curve while in “Graphic EQ” mode, the values that you calculated will be limited to +/- 20 dB, and those limited values will remain even when you switch to “Draw Curves”.
The workaround is to open the Equalization effect, ensure that it is “Draw Curves” mode first, and then select your custom curve.
Ah. That has made a significant difference. Still some interesting things to explore, but much closer. This is the same EQ Profile, reloaded per your instructions and applied against the same file as above. Much sharper profile, and much closer to the plateau I was expecting. Still some gaps to investigate.