Multichannel Workflow

shapeimage_2-3

Multichannel Workflow

The following information is written by Matt Khan – very useful information
I’ve been working through a multichannel setup and had some issues with implementing the correct alignment of the channels (as discussed in this thread over on jriver interact). After further discussions with Uli today, I think I have nailed this down now so thought it would be useful to summarise the approach I am using for reference & so that future generations might get up to speed with acourate more quickly than me!

A few errors

- I forgot to mention saving a new stereo wav after fixing the delays in the correction filters (ie load Cor1L into slot 1, Cor1R into slot 2, save stereo wav Cor1S, repeat for each way and sample rate)
– the cfg file obviously contains absolute paths specific to my computer
– the copy statements have Unix path separators not windows, ie / not \

It would be also interesting to see if other people do this in a similar way or use some other approach. Multi sub setup approaches would be interesting too.

My setup is a simple 5.1 system containing a single subwoofer & 5 (passive) main channels crossed over at 120Hz. I use the same setup for music and av. The layout is attached; main channels highlighted in red, mic position in green and sub in cyan. This means C is marginally closer to the LP than L & R and SL/SR are much closer.

My approach is listed below. I’m ignoring any linearisation of individual channels here (as that is well covered elsewhere) as well as any use of prefilters. I think this covers everything, next time I run through this I’ll verify this is everything I do though & post back if I missed anything.

Step 1: Left/Right + SW
1) Create workspace in dir named LR
2) Configure channel rou ting accordingly to allow 4 way filter to route low passes to sub & high passes to to L and R
3) Create time aligned XO between subwoofer and LR using the approach documented by Mitch (http://computeraudiophile.com/content/556-advanced-acourate-digital-xo-time-alignment-driver-linearization-walkthrough/)
4) Check “freeze gain” box in logsweep recorder (to ensure relative levels are maintained for each channel)
5) Generate pulses
6) Run macro 1
7) Create Target curve ensuring level is set to enable the whole system is correctable (i.e. target level is below the pulse throughout the interesting frequency range
8) Run macro 3
9) Compare inverse curves against pulses, run “phase extract” to avoid unnecessary boost at extremities (i.e. where the inverse crosses the pulse)
10) Save phase extracted pulses over the Pulse48Linv/Pulse48Rinv as necessary
11) Iterate over macro 4 & macro 5 until acceptance result found (balancing preringing, major group delay discontinuities, IACC as necessary)

Step 2: Left/Centre + SW
1) Create workspace in dir named LC
2) Configure channel routing accordingly to allow 4 way filter to route low passes to sub & ; high passes to L and C
3) Copy all XO files from LR workspace into LC workspace
4) Copy Target files from LR workspace into LC workspace
5) Use mic alignment tool to determine the delay required to align C to L
6) Rotate XO2R by the no of samples reported by step 4 & save
7) Generate pulses
8) Run macro 1
9) Load target
10) Check target level is beneath R pulse, if not lower the pulse and go back to LR step 8
11) Compare inverse curves against pulses, run “phase extract” to avoid unnecessary boost at extremities (i.e. where the inverse crosses the pulse)
12) Save pha se extracted pulses over the Pulse48Linv/Pulse48Rinv as necessary
13) Run macro4, use same values for L as used in the LR workspace, start with the same values for C as well
14) Fix per channel delays as follows
– Load Cor1L and Cor1R, find peaks, record (Cor1L-Cor1R) (i.e. peak offset)
– Rotate Cor1R by (Cor1L-Cor1R) samples, save over Cor1R
– Rotate Cor2R by (Cor1L-Cor1R) samples, save over Cor2R
15) Iterate over macro 4 & macro 5 until acceptance result found (balancing preringing, major group delay discontinuities, IACC as necessary) without varying the filter parameters used for C too far fr om L

NB: the reason for step 14 is that acourate is primarily a stereo setup & hence it aligns the tweeters and delays the woofers accordingly. Whereas in a 5.1 setup, we need to align the woofer and delay the tweeters accordingly. Acourate does not do this for you as of today.

Step 3: Left/SL + SW
1) Create workspace in dir named LSL
2) Configure channel routing accordingly to allow 4 way filter to route low passes to sub & high passes to L and C
3) Repeat instructions from Step 2 substituting SL for C

Step 4: Left/S R + SW
1) Create workspace in dir named LSR
2) Configure channel routing accordingly to allow 4 way filter to route low passes to sub & high passes to L and SR
3) Repeat instructions from Step 2 substituting SR for C

NB: Uli advises it is more important for the filter params for SL and SR to be v similar than it is for SL to be similar to L and SR to be similar to L. i.e. if SL and SR filter params need to vary further from L then that’s fine as long as they vary together.

Step 5: Create LFE filter
This is a no op for me as I have a 120Hz XO anyway, LFE content is rolled off at 120Hz & I handle the +10dB LFE in JRiver.

Step 6: Create convolution cfg files for 5.1 and 2.0
1) Create a named folder to hold the filters, lets call it final (and assume it has the same parent dir as LR, LC etc)
2) Copy files as follows (assume 96kHz filters here, change sample rate as necessary)

copy LR/Cor1S96.wav final/Cor1S96_LR.wav
copy LR/Cor2S96.wav final/Cor2S96_LR.wav
copy LC/Cor1S96.wav final/Cor1S96_LC.wav
copy LC/Cor2S96.wav final/Cor2S96_LC.wav
copy LSL/Cor1S96.wav final/Cor1S96_LSL.wav
copy LSL/Cor2S96.wav final/Cor2S96_LSL.wav
copy LSR/Cor1S96.wav final/Cor1S96_LSR.wav

copy LSR/Cor2S96.wav final/Cor2S96_LSR.wav

3) Create file named acourate_5.1_96.cfg and enter the following.

96000 6 6 0
0 0 0 0 0 0
0 0 0 0 0 0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_LR.wav
0
0.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_LR.wav
1
1.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_LC.wav
1
2.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_LSR.wav
1
3.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_LSL.wav
1
4.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_LSR.wav
1
5.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor2S96_LR.wav
0
0.0
0.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor2S96_LR.wav
1
1.0
1.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor2S96_LC.wav
1
2.0
2.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor2S96_LSL.wav
1
4.0
4.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor2S96_LSR.wav
1
5.0
5.0

4) Create a file named acourate_2.0_96.cfg and enter the following

96000 6 6 0
0 0 0 0 0 0
0 0 0 0 0 0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_L R.wav
0
0.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor1S96_LR.wav
1
1.0
3.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance 2;Cor2S96_LR.wav
0
0.0
0.0
C:\Users\Matt\Documents\Acourate\Filters\MC_Inductance\Cor2S96_LR.wav
1
1.0
1.0

I’ve attached a pic of the directory at the end of it all.

Step 7: Setup JRiver for AV use
Obviously some of these steps are specific to me (e.g. I set everything to resample to 96kHz)

1) Create a zone for av playback
2) Open the DSP studio and set the following
– Set output format to 5.1 & resample everything to 96kHz & no up/downmixing (NB: not sure if this is right for 7.1 track on 5.1 system, I need to check this)
– turn on room correction, move it to above convolution and set the following
– all main channels have zero delay, zero level change & are set to full range
– sub channel has zero delay and +10dB level
– turn on convolution and point it at acourate_5.1_96.cfg

I’ve attached pics to show what my setup looks like for reference.

Step 8: Verify
I do the following steps

1) level checks
– open REW RTA
– playback jriver test tones
– adjust master volume to show 83dB
– confirm flat response

2) delay checks
– open holm impulse
– send sweep to L channel
– set time lock on
– add PEQ stage to copy L to R
– send sweep
– repeat last 2 steps for C, SL, CR
– check alignment of impulses

Step 9: Watch something!!
Obviously the final step is to listen to see if it is any good :)

dsp_studio_convolution

dsp_studio_output_format

dsp_studio_rc_main

dsp_studio_rc_sub

final_dir

plan_view

A few errors
– I forgot to mention saving a new stereo wav after fixing the delays in the correction filters (ie load Cor1L into slot 1, Cor1R into slot 2, save stereo wav Cor1S, repeat for each way and sample rate)
– the cfg file obviously contains absolute paths specific to my computer
– the copy statements have Unix path separators not windows, ie / not \