Devices > Sound Cards, DAC's, Receivers, Speakers, and Headphones

Guide to Speaker/Room Correction Using Freeware and JRiver

(1/35) > >>

mwillems:
This is a step by step guide on how to do some basic speaker and room correction using JRiver and free software.  This guide was inspired by MitchCo's guide to using Acourate for speaker and room correction http://www.computeraudiophile.com/content/529-acourate-digital-room-and-loudspeaker-correction-software-walkthrough/.  My goal with the guide was to produce, using only free software and JRiver, a process that is “semi-automated,” but still produces good results.  

I'll be using a home-made 2-way pair of bookshelf speakers as my example throughout.  I built them ten years ago with speaker elements I bought at radio shack, and they were the first pair of speakers I ever built.  So needless to say, knowing what I know now, they could benefit from some optimization.

This guide should work fine for any bookshelf or full-range speaker with a built-in passive crossover (I plan to address subwoofers and active crossovers for bi-amping in a later guide).  Different rooms and different speakers have different needs, so this is by no means the only way to do it, or even necessarily the best way to do it for your system.  But it's intended to be a good place to start that will probably yield some improvements in an untuned system.  My plan is to try and keep the guide relatively non-technical, but to provide enough background so folks can understand why I'm suggesting the steps I'm suggesting.  

What you'll need:

1) JRiver Media Center version 18 or above, with the loopback feature configured and working correctly.  If you need help getting loopback up and running, check out the following thread: http://yabb.jriver.com/interact/index.php?topic=70242.msg486195#msg486195.  EDIT: If you have JRiver 20 or above you should be able to use the new WDM driver in place of loopback, just make sure it's set as the system default.
2) A calibrated Microphone (with a calibration file) and a way to connect it to your computer (either a USB or phantom powered mic is fine)
3) Holm Impulse (free measurement software): http://www.holmacoustics.com/holmimpulse.php
4) Room EQ Wizard (free measurement and automated room correction software): http://www.hometheatershack.com/roomeq/
5) RePhase (optional, free convolution filter designer): http://sourceforge.net/projects/rephase/
6) Basic technical information about your speakers, usually found on their specification sheet or operator's manual (e.g. what frequency the drivers' crossover points are, where the port is tuned in a vented speaker, etc.)
7) An afternoon.

Measurement Technique: Separating the Speaker from the Room.

What we're measuring:

Frequency response: If you fed a theoretically ideal loudspeaker a flat sine sweep it would have a frequency response that looked like the solid bar grey line at 0dB in the graph below:



An ideal speaker would reproduce exactly what was fed to it without any non-linearities.

Phase: If you tracked the phase of that same theoretically ideal loudspeaker, it would look the dotted line in the top graph above.

Impulse Response: If you looked at a band-limited impulse response (an impulse shows how the loudspeaker reacts to a sudden loud signal) of that same theoretically ideal loudspeaker, it would look like the trace on the bottom graph

These three measurements are by no means the only ways to measure a speaker's performance, but they're the ones we'll be using in this guide.

All real speakers will exhibit non-linearities in their frequency response and time-domain response (phase and impulse): no speakers are perfect.  In addition, rooms will also introduce significant non-linearities, that will vary depending on the speaker position and the listening position in the room.  

Anytime you attempt to measure a speaker in a room, you're really measuring the interaction of (at least) two systems: the loudspeaker and the room.  It's very important, to the extent possible, to address the two systems separately.  Why is that separation important?  Because many loudspeaker non-linearities can be fruitfully corrected using EQ, but many room effects cannot effectively be corrected in EQ.  I'll provide a quick example illustrating what happens if you don't address them separately:

Here's my uncorrected speaker response at the primary listening position (room and speaker together):



Now I feed that response into an automated room correction suite (REW), and here are the results from the same position:



Looks much better, right?  There are some things it didn't manage to fix (more on these “uncorrectables” in the EQ section below), but it looks much flatter across the band.  Here's a measurement about a foot away from that position (the corrected trace is in green, with the uncorrected measurement at that position in red for comparison):



Some parts are improved by the automatic correction, but other parts are not; the correction is actually worse than the uncorrected trace in some positions.  Attempts to strongly EQ a room's response a) will not always work, and b) even when they “work” will usually produce unintended consequences even a short distance away from the measurement position.  With distances longer than a foot, expect even more unpredictable consequences.

By contrast, EQing the loudspeaker's response (as opposed to the room's response) can be done with much more consistent results, assuming you can first isolate it from the room.

Isolation Techniques:

Professionals  measure speakers in an Anechoic Chamber or simulate an anechoic response by using an elevated platform outside (Altec engineers reportedly used a thirty foot platform for measurement).  Most folks don't have access to an anechoic chamber (I certainly don't), and measurement outside isn't always an easy option (large speakers, apartment living, long cable runs, etc.).  If you can easily and safely measure your speakers outdoors and reasonably high off the ground, it's worth doing, but in the interest of keeping this guide relevant to the largest number of people possible, I'll be focusing on in-room measurement through close-micing.  

Close-micing is just what it sounds like: placing the mic very close to the speaker when measuring.  Because the speaker's response will tend to dominate the room response at short distances, you can get a quasi-isolated speaker response by taking measurements close to the speaker.  There's an art to this, and I'll go into it below.  

mwillems:
Setting up Holm:

I recommend starting loopback in JRiver before starting up Holm.  Holm will try to take take exclusive control of sound outputs, which can cause errors in JRiver, but Holm usually behaves well if loopback is already started before you load it up.  EDIT: JRiver's WDM driver greatly simplifies this issue, and I recommend using it in place of loopback if you have MC 20 or above.

There are quite a few settings in Holm, but I'll be focusing on a few important ones:



Under audio library you have a choice of whether Holm will be communicating with MME, direct sound, or ASIO.  Because we'll be using loopback or the WDM driver to feed Holm's output to JRiver, I'd recommend sticking with direct sound until you're more comfortable with the program.  Your output device should be the JRiver WDM driver or the windows default audio device that you're using for loopback (in my case the motherboard soundcard on my laptop).  Beneath the output you can see which channels Holm will output to; I recommend only measuring one channel at a time to start.  Your input should be your microphone.  

Under measurement signal, I recommend selecting “logarithmic sine sweep” and selecting a start frequency that is at least an octave lower than the lowest frequency you plan to test; by default it's set to 10 Hz, which will give you a more-than-full-range sine sweep.  Most speakers can't reproduce tones that low, but this should be harmless at most normal volume levels with professionally designed speakers. If you're testing homebrew vented speakers that don't have a highpass to protect the woofer, you should start the sweep higher, and ditto if you're measuring unprotected tweeters, etc.  If you have any doubts, make double sure to start measuring at a quiet volume and work up slowly.  

Under mic calibration, you should import your mic's calibration file.  If you're using a non-USB mic, you can also calibrate your DAC-ADC by connecting a cable from the output of your soundcard to the input you're using.  If you're using a USB mic, there's no practical way to do this calibration, but the ADC built into the USB mic should be (to some extent) captured by the mic calibration file.  The DAC-ADC calibration step is optional, in my opinion; the three DACs I've personally measured were all flat enough that there was no meaningful calibration necessary.

Now on to the Measurement Screen:



Here there are options to display frequency response, phase, harmonic distortion products, and impulses for up to three measurements at a time.  Although you can only display three measurements at a time, Holm can hold (in working memory) up to fifty measurements at a time (accessed by hitting the drop down menu next to each measurement).  I recommend giving each measurement you make a descriptive name as you go.  A few more settings:



There are a lot of settings in the menus across the top (as shown above), and most are a matter of taste and convenience, but I strongly recommend making sure that “logarithmic frequency axis” is checked.  I'd also recommend setting the min frequency to 20 Hz and the max frequency to 30,000 Hz

Measurement technique:

1) Mic positioning : Take note of what angle is specified for your mic's calibration file (0 degrees is common, so is 90 degrees).   If there is no angle specified, it's usually safe to assume 0 degrees.  A 0 degree calibration means that the mic should be pointed directly at the thing being measured in order for the calibration to be correct; likewise a 90 degree calibration means that the mic should be at a right angle to the thing being measured, etc.  

2) First measurement- Baseline : Your first measurement should be at your primary listening position.  This will not be a particularly useful measurement by itself, but will be the benchmark you'll be comparing with your final results to determine if you've made an improvement.  

Place the microphone at ear height where you listen, and then set the volume in JRiver pretty low.  Then hit the “measure” button in Holm.  After that measurement completes, you'll want to keep adjusting the volume up in JRiver and running the measurement again until you're getting a reasonably loud sweep (about as loud as you'd normally ever want to listen to music).  Once you get your volume set, do not change it during a measurement session (you want all the measurements to be measured at the same level for comparison purposes).  Occasionally, you will hear a pop or crackle during the sweep, which will mess up your measurement.  If you get one of those, just run the sweep again and make sure that it sounds smooth all the way through.  Once you've gotten a reasonably loud successful measurement, you'll probably see something disturbing like this:



This is the raw response and includes all of the echoes and reflections from the room in the measurement.  Open up the measurement “options” menu, and select “frequency response smoothing.” Then select “Complex smoothing (frequency dependent time window)” and set the “N” to 12, as shown:



Frequency dependent time-windowing filters the response in a way that removes some of the room echoes and approximates how we actually hear sound better than the raw response does (our ears “ignore” certain late echoes).  I recommend configuring all your measurements to use frequency dependent windowing during your first few measurement sessions, so that they're comparable (you may need to set these filter settings for each measurement, as you make it).  You can play around with gating and different smoothing settings later on.  One nice thing about Holm is that it stores the underlying raw measurement data, so you can change how it's displayed after the fact without making new measurements.  After applying the filters, it looks like this:



Second, auto zoom the Impulse response (or manually zoom in so that you're just looking at the first five or six milliseconds) and look at where the peak is.  The largest peak should be a) on top and b) at the time zero as illustrated:


   
If the largest peak is not on top at the time zero, go to the options menu shown above, and go under “time zero” and select “largest peak” and click “autodetect.”  This should center the impulse on the time zero.  If all the impulses  you measure are upside down, you may need to check the “invert” box; if only some measurements are upside down, leave them be.  It's important to get your time-zero lined up or your phase results will be wonky. You should check on this for every measurement (the “auto” usually gets it right, but it's worth confirming).

You should then repeat this first measurement with the other speaker, and then save your measurements (do this often).

mwillems:
Now you'll take a series of measurements, as follows:

I recommend making five measurements for a two-way speaker:  1) on axis with the woofer from three inches away, 2) on axis with the tweeter from three inches away, 3) on axis with the woofer from one foot away, 4) on axis with the tweeter from one foot away, and finally 5) on axis with the tweeter from one meter away.  When I say “on axis” I mean that the tip of the mic should be centered horizontally and vertically on the speaker at the recommended distance.  If you're using a three way or four way speaker, you should make additional measurements at three inches and one foot for each driver.  Here are my two three-inch measurements overlaid (woof in blue, tweet in red):



You'll need to “stitch” the two measurements together to get a composite of the whole speaker's response.  Make sure your “C” measurement slot is empty and then select manipulation-->stitching.  For the frequency parameter, choose the crossover frequency from your speaker's data sheet (it should be relatively obvious from the phase measurements, but in case it's not, the tech specs will tell you), and choose a width that is about an octave wide at that frequency. In my example, the crossover is at 2500 Hz, and my width is about 2000 Hz.  You should uncheck the box to "match phase before stitching." 

If the two measurements don't overlay closely, you should use Holm's Match function (a separate tool under the manipulation menu tree) before stitching.  Match will adjust the level of the A-slot measurement to match the level of the B-slot measurement based on a specified frequency and bandwidth.  As with the stitch, I'd recommend entering your speaker's crossover point as the frequency and entering a bandwidth that's about an octave wide at that frequency (i.e. about 750 Hz wide for a 1KHz crossover, etc.).

The result of the stitch looks like this:



You should do the same “stitching” process to the one foot measurements as well.  You should now have three “final” measurements for your speaker: a composite three-inch measurement, a composite one-foot measurement, and a single one-meter measurement.  Next you'll want to conduct those five measurements for the other speaker.  You should now have three measurements for each speaker, which should look relatively similar.  

Here are the three measurements overlaid for my left speaker: blue is 3 inches, red is 12 inches and green is 1 meter.



The three inch measurement shows the direct output of the driver with very little else (which can be deceptive, because the effect of the edges of the speaker cabinet itself are not always captured with a measurement that close). The one foot measurement shows the output of the driver along with some baffle diffraction (sound reflecting off the sides of the speaker cabinet) and a little bit of the room. The one meter measurement shows more of the room's effect, as you can no doubt see, as well as the interaction between the two drivers at ear height.  The overlay of the measurements allows you to see where the areas most in need of correction are:

Frequency Response EQ

Now that you have your speaker measurements, what do you do with them?  Unless you have an unusually “good” room, you've probably noticed that your three measurements are not identical, which makes the “right” EQ hard to sort out.  I'm going to outline an automated method that should get you 90% of the way there.  Step one is to open up the “export” menu in Holm



You'll want to export the frequency response of each of your three measurements for each speaker (not the impulse).  Make sure you have frequency dependent windowing on and configured correctly for all of the measurements, as the frequency response will be exported as displayed, and you want the exported response to reflect frequency dependent windowing (this is important).  

Once you have exported all the measurements, open up Room EQ Wizard (REW). REW has a measurement suite, but it does not support frequency dependent windowing or certain other features that Holm supports, so we will not be doing any measurements in REW in this guide.  Instead, select “import frequency response” from the file menu and import the three measurements for your first speaker in REW.  Tell it not to do a C-weighting correction, unless your mic is C-weighted (most calibrated mics are not).  Once you have the three measurements for your first speaker imported, click the “All SPL” button along the top.  Make sure all three are displayed, and then click on the “average the responses” button.  



This gives you a hybrid of the three measurements that will produce a relatively “safe” EQ profile.  Now, make sure the averaged response is selected and click the “EQ” button in REW.  



Open up the settings panels as shown below:



Choose “generic equalizer,” set speaker type to “bass-limited,” and set “low rise slope” to zero (if you have truly full range speakers, feel free to set the speaker type to full-range instead).  I recommend setting HF fall slope to 1.4dB and leaving the start frequency at 1KHz. This part is a question of taste, but some kind of HF roll off is generally desirable.  These settings will give you a 6 dB roll between 1KHz and 20KHz; if you prefer things to be flat all the way out, set the HF fall slope to 0.

mwillems:
Next, click “set target level” to bring the target in line with your measurement (for some reason you may need to click it several times to get it to move all the way to the center of the measurement).  Next pick the “cutoff frequency” and “crossover” that makes the cleanest line through the low frequency part of your measurement.  You'll need to try a few settings, but when you're done it should look something like this:



Set both maximum boost settings to 6 dB and the flatness target to 2 dB (feel free to set it to 1dB if your three measurements showed very close agreement). 

For the “match range” I recommend setting the low end to the cutoff frequency from above and setting the top end to 10KHz 20KHz (the latest beta version of REW now allows EQ to 20KHz, see below).  If you set the match range lower and your low end target isn't a good fit, you could wind up trying to apply boost below the speakers terminal rolloff.  If you try to EQ a sealed speaker flat below the terminal roll off without doing some math first you risk damaging your speaker and/or increasing your distortion levels dramatically (using eq to extend low bass response of a sealed speaker is an advanced topic).  If you try to EQ below that point with vented speakers it not only might damage your speaker, it also won't work at all (the driver is unloaded below the port frequency and will just idly flap around).  REW has some built in safety features to avoid this issue, but better safe than sorry: for your first time out set the bottom of the match range to the cutoff.

Once you've set all that up, click the “match response to target” button and watch REW work it's magic.  Once it's done, click on “EQ Filters.”  You'll then see your filters in terms of frequency response, Q, and gain. 



My recommendation is that you write these down, and then copy them into JRiver's parametric EQ module, as shown below (it takes a minute, but has several serious advantages over the other method): 



Alternatively, you can also export them as a WAV file which can be fed into JRiver's convolution engine, but this adds significant latency, which limits the usefulness of the filters (harder to use with applications that aren't audio only, e.g. streaming video or video games). It will also prevent you from using convolution filters for phase correction in the next step.  For those reasons, I don't recommended it, but if you do want to go this route, see the discussion of convolution filters below in the phase correction section of the guide for some instructions on how to use the exported WAV files in JRiver.

A few things about REW to be aware of:

1) EDIT: The latest beta version of REW now allows EQing all the way to 20KHz, so if you have the latest version, feel free to ignore this sub-paragraph REW won't EQ above 10KHz, so if you have irregularities above 10KHz, you'll need to fix those manually by feeding in filters in PEQ and remeasuring.  You may find it useful to run a Real Time Analyzer (RTA) while making the changes to speed things up. Here's a link to a guide mojave wrote about using REW as an RTA with JRiver: http://yabb.jriver.com/interact/index.php?topic=69725.0
2) REW won't EQ at the bottom of the range when the measurement dips below the target and doesn't rise above it again.  This is designed to avoid the issues with speaker protection I mentioned above, but if your speaker has dips immediately preceding that roll off REW may ignore them.  This can be worked around, but generally shouldn't be an issue if your cutoff settings are good.
3) REW will only generate up to 20 filters, but will generate fewer if it doesn't need all 20.  If REW generates 20 filters for your response it probably actually needs more than 20, and you might want to consider generating the filters in two batches (bottom of the range to 600Hz, 601Hz to 10KHz, etc.)

Once you've fed in the EQ filters into JRiver one way or another, go ahead and make any additional adjustments you may need to make.  Lastly, add an adjust volume filter with the gain set to -6dB.  This is to offset any gain added by the other filters you added above, which will prevent clipping.  Depending on how you have JRiver configured, you may not need this filter, but if in doubt include the -6dB adjustment.

Once that's done, measure the corrected speaker again at ear/tweeter height at 1 meter (and save the results).

Here are my results:



As you can see, much improved!   Whereas the uncorrected measurement at 1 meter had peaks and troughs that were +/- 10dB between 100Hz and 20KHz, the corrected response is +/- 5dB around the target across the same band.  Here they are overlaid so you can see the results more clearly (red is corrected, blue is uncorrected).



But you can also see that some elements that REW tried to correct were not fully corrected.  Some things cannot be corrected by EQ; no amount of EQ will resolve them.  They can represent a variety of room or speaker features, for example: standing waves, rear wall bounce cancellation, or in this case, the dip at 2.5Khz, which is the result of a suboptimal passive crossover.  The first two can be potentially addressed through room treatment; the last can only truly be addressed by building a new crossover for the speaker or by bi-amping it (although it can be improved somewhat through phase manipulation, see below).  As far as EQ is concerned, the best thing to do about uncorrectables is to avoid trying to EQ them at all, as you won't improve the response in the affected locations, and will potentially ruin the response everywhere else.

Don't forget to repeat the process with the other speaker.

mwillems:
Now that we've adjusted nonlinearities of the frequency response of the speakers, the next step would be to adjust the phase nonlinearities.  Unfortunately, this is where the "semi-automated" part of the guide kind of runs out of gas: I'm not aware of a good, free, automated phase linearization solution that allows one to effectively adjust phase independently of frequency response.  So for phase, we're stuck with manual tweaking, but I'll try to give you some general guideposts to navigate by. For these reasons, the next section is definitely optional.  Hopefully, you've already made significant gains by this point, phase linearization is just the icing on the cake.  

Speaker Phase Correction:

Now let's have a look at the phase of our measurements.  Bring back up the last measurement you took (the corrected measurement).  Here's the phase along with the frequency response.  



You can see on this measurement (circled in red) where the crossover is, and where the sealed box begins to affect the phase at the low end (circled in green).  A speaker with a passive crossover (unless it's a 1st order) will always have some kind of phase anomaly at the crossover point (usually more extreme looking than this one), and any speaker in an enclosure will exhibit some kind of phase anomalies at the low end (a vented speaker will have much greater phase rotation than a sealed speaker).  You can also see that once the speaker output gets quiet enough the phase just stops or goes berserk (circled in blue). This is just what happens to a measurement when the frequency response falls off drastically; this can't/shouldn't be corrected.

To correct the phase, first export the frequency response of your corrected measurement in Holm the same way you did above, but make sure you have the “export phase” button checked.  Then open up RePhase. Click on the measurements window tab, then click import:



Now we can use RePhase to flatten the phase manually.  Because phase distortion is much less audible than frequency response non-linearities, I'd generally advise taking it easy on phase correction and just work on correction of major phase wrap.  The two main sources of phase wrap that I'd recommend correcting are crossovers and port phase distortion.  

1) Crossover:

Under “filters linearization” RePhase has automatic pre-sets dialed in for linkwitz-riley crossovers.  Your speaker may not have an LR filter, but I'd recommend fiddling around with the different linearization options to see if one of the presets partially or mostly addresses the phase wrap for your specific crossover.  You can also use the paragraphic phase EQ to level it out (all the parameters on the bottom of the sliders are configurable).  Just remember, higher Q means a narrower region of adjustment, lower Q means a wider region of adjustment. You can see how I used the paragraphic phase EQ to flatten out the phase in the crossover region below:



2) Port phase wrap:

Ports in vented speakers introduce phase wrap, distortion, and also ringing around the port frequency.  Removing some of the phase wrap resulting from the port can not only improve the linearity of your phase response it can also reduce port ringing.  Because my test speakers are sealed, I can't illustrate this on these speakers, but here's an illustration of un-wrapping the port phase rotation on a different speaker with a port tuned to 28Hz.

Before:


After:


To achieve this, I just used one of the "box" presets for a vented speaker (in this case a low Q speaker, because the box in question is very large).  The illustrated speaker exhibited significantly improved time-decay response around the port frequency after being “linearized” in this way, and sounded much less "boomy." Time-decay measurements are a slightly more advanced topic, but I wanted to mention this potential advantage of linearizing some of the port phase wrap.

You don't necessarily want to flatten the low-end phase out completely, you just want the phase to look more like the wrap that a sealed box speaker would have.  If your speaker is sealed, I wouldn't recommend linearizing the phase wrap at the bottom of the frequency range at all. Our ear expects phase shift as volume decreases, so if you have decreasing volume on the low end and perfectly flat phase it sounds really weird.

3) Other phase correction:  

Next, I'd suggest looking through the graphs for any other places where there are changes in phase that don't correspond to changes in frequency, that is, any places where the phase appears to rise or fall, but the frequency response does not also rise or fall.  If you identify any of these other phase anomalies (sometimes called “excess phase”), you might try flattening those out as well using the paragraphic phase EQ, but if they're small you might want to leave them alone. Phase is very location dependent in the room so you can wind up chasing phase phantoms all day if you overdo it.  By contrast, if you have large phase non-linearities that do correspond with frequency response non-linearities, those are things that could potentially be addressed through additional regular EQ as described above (normal EQ is “minimum phase” and will adjust both frequency response and phase at the same time).  

Making the filters:

The default settings in RePhase should be fine for the limited amount of phase correction we're talking about doing. If the phase response of your two speakers is similar enough that the same correction would work for either, be sure to select 32-bit LPCM stereo as your output format.  If you want separate correction filters for each side, then make sure the output format is mono.  If you made separate filters for both sides you'll need to write a config file for use in JRiver's convolution engine that routes your channels through the correct filters.  An example config file for a 2-channel 44.1KHz filter would look like this:

   44100 2 2 0
   0 0
   0 0
   C:\[your filepath]\[your left channel filter filename].wav
   0
   0.0
   0.0
   C:\[your filepath]\[your right channel filter filename].wav
   1
   1.0
   1.0

After you've generated the filter(s), make sure that the generated filter actually resembles the target response in RePhase.  



You can see here that my filter deviates from the target response to some extent.  If yours is imperfect, try increasing the number of taps and generating a new filter.  If yours is perfect, you may want to try lowering the number of “taps” and generating another filter.  The taps represent the length of the filter in time: the more taps there are, the more complex the filters can be, but also the more latency introduced by the resulting filter.  If you can accomplish the filtering you need with a very small number of taps, you can reduce the latency introduced by the resulting filter, which will make it more useful to you (i.e. potentially usable with movies, etc.).  If you need a larger number of taps, then you may want to set up zones so the convolution is only engaged when listening to audio (as the latency can make video or loopback applications unworkable).  

Once you've gotten your filters generated the way you want them, you'd want to select your stereo WAV file (or your config file if you did different WAV's for each side) in JRiver's convolution module as shown:



Lastly, take a measurement at ear/tweeter height from 1 meter with all of the filters engaged to make sure that it worked as expected.



Note that the phase in the crossover region is flattened as expected, and that the frequency null at the crossover is improved somewhat by ironing out the phase response there.  Phase manipulation is the only way to even partially fix a goofed up passive crossover, but it can't resolve everything, obviously.

Results of speaker correction:

Now take a measurement at your listening position with the filters on and compare to your initial measurement.  Here's mine:



It's still pretty wacky looking, especially around the crossover, but it's much better.  And these results are almost entirely from correcting the speakers with very limited attempts to correct the room response.   If you want to undertake additional correction targeted at the room's response, it's possible to make some additional gains, but there are a few pitfalls to avoid.

Navigation

[0] Message Index

[#] Next page

Go to full version