Enabling Multi-Channel for Other Audio Formats

 

Enabling Multi-Channel Audio for Other Audio Formats

If you’re fortunate enough to have a PC with multi-channel LPCM output
enabling full fidelity audio output is easy (and there’s not much point
in reading the rest of this) but for those using a SPDIF or stereo only
HDMI connection getting multi-channel audio working can be
challenging.  This guide intends to explain two different options and
how to configure each to attain this goal.

TERMS

  • (L)PCM – Uncompressed audio
  • Bitstream – Transmit compressed digital audio over a digital connection to another device (usually an AVR) for decoding
  • Multi-channel – Streams containing more than two (stereo) channels of data (5.1, 7.1, etc)
  • SPDIF – Optical (toslink) or coaxial cable with enough bandwidth for stereo PCM or compressed multi-channel audio
  • HDMI
    – Digital connection used for audio and video; has enough bandwidth for
    7.1 channels of uncompressed audio.  In some implementations audio is
    restricted (why?) to function like SPDIF

While there
are many multi-channel audio codecs around (AC-3, DTS, AAC, WMAPro, and
FLAC to name a few) most* AVR will only decode bitstreamed AC-3 and DTS
variants, so even though technically possible to send other compressed
multi-channel formats to the AVR it won’t know what to do with them. 
If all your content is one of those formats, like all DVDs and Blue-ray
discs which contain either an AC-3 or DTS (and sometimes both) audio
track you’re all set, just setup AC3Filter in SPDIF mode and you’re
done.  If on the hand, you have a more diverse collection of
multi-channel formats in your collection and you want to enjoy more
than stereo sound it is necessary to configure the PC to decode those
audio formats to PCM then compress it to a format that can be
bitstreamed to the AVR for decoding.

Turning this.

Stereo

Into this.

Dolby Digital

I’m
aware of two methods to get this working (ignoring using multi-channel
analog connections) over SPDIF; both are DirectShow based so media
players using a different framework will need an alternate solution. 
Please read both solutions before choosing one.  For simplicity they
will presented [for the most part] as if each one was the only one
provided.

ReClock

ReClock
is a DirectShow audio rendering filter that can be configured on a per
application basis to replace the default DirectSound renderer used by
most DirectShow based players. While there are many features that make
ReClock a really slick addition to any HTPC, we’re only going to focus
on "Use AC3 encoder for PCM sound" feature here. 

When using
ReClock it’s important to understand that there are some potential
tradeoffs.  Because its original purpose is to synchronize A/V streams
for PAL
content by correcting the adjusting audio samples, all the audio you
feed it should be PCM for it to be processed correctly by the
renderer.  Which of course means that all audio formats, even ones that
could be bitstreamed, should be decoded on the PC.  For most (including
me) this shouldn’t be an issue, but it may be for bitstreaming
purists.  If you fall into that camp, it will let you configure the
renderer to accept SPDIF formats (AC-3, DTS) and they will pass through
as-is but it’s not recommended.  In some limited testing (a 720p 60fps
ATSC and a 1080 24p clip on my TV running at 60Hz) using SPDIF formats
seemed to work OK for both AC-3 and DTS.  I couldn’t hear any
difference between bitstreamed AC-3/DTS, AC-3/DTS that was decoded and
rencoded to AC-3, and AC-3/DTS that was decoded and output as
multi-channel PCM so ultimately it’s up to you.

After installing
ReClock open up the "Configure ReClock" application and select "Use AC3
encoder for PCM sound", depending on your preferences select "only with
multi channel sources" which will leave stereo PCM untouched.  Note
that there are options for forcing ReClock into applications and think
about how you would like it to behave.  If you’re using SageTV, or
another application that allows the renderer to be selected, you can
opt to uncheck the box if you want.  I let it replace the default
renderer then blacklist applications where I don’t want it used.

 Reclock

If
you want to try out leaving SPDIF alone, check "Accept SPDIF formats
(not recommended)" and they will pass through.  If the option to
replace the default renderers is left checked the next time playback is
initiated a dialog will appear for the application allowing ReClock to
white/black list or defer.

 Reclock

The
last step is to configure the difference audio decoder filters that
will be used.  It’s not practical to walk through every decoder
available, so I’m just going to point out how to configure AntiPack.

The
MPC-HC Audio Decoder will handle every multi-channel format I’m aware
of, including LPCM, except WMAPro which uses an OOTB decoder (note the
player must configure the decoder to output high resolution audio for
it to work; I know SageTV does this) so we should be covered.  If
you’re using AC3Filter for AC-3 and DTS leave "Decode AC-3 and DTS"
unchecked, and configure the audio decoder exactly as noted below;
otherwise check the box and you’re done.

Antipack

Go ahead and fire up the AC3Filter page configure the "Main" tab for PCM output (note that "Use SPDIF" is unchecked).

Antipack

And check that PCM is not selected on the "System" tab. 

Antipack

For those who would like to use the bitstreaming option click through to the AntiPack page and follow the instructions for configuring AC3Filter to bitstream. 

Enjoy.

AC3Filter

AC3Filter
is a DirectShow audio decoder filter that decodes AC-3, DTS, and MPEG
Audio (claims LPCM support, but that appears to be broken).  It also
accepts PCM types and can be configured to encode the uncompressed
audio to AC-3 for SPDIF bitstreaming.  The main benefit to using
AC3Filter over ReClock is that it will not strongly suggest that
formats that can be bitstreamed get decoded on the PC first.  The main
drawback is that because AC3Filter is a transform filter and not a
renderer, it needs to have a very high merit
to automattically join graphs and requires the underlying player to use
Intelligent Connect at very specific points when building the graph so
it can be difficult to make it work consistently in every player.

Setup
is pretty easy.  Open the AC3Filter configuration utility as an
administrator (we will be changing the merit) or using the AntiPack
configuration utility select PreferrerdPlus2 then launch the
configuration page. 

Check "Use SPDIF" on the Main tab.

 Ac3 and SPDIF

And passthrough AC3, DTS on the SPDIF tab.

SPDIF

Before
moving to the System tab check that "Use AC3 encoder" is checked in the
SPDIF options.  Depending on your preference for stereo PCM encoding
check "Do not encode stereo PCM".

 AC3 Audio

Then
on the System tab, ensure that PCM is selected in the "Use AC3Filter
for" section and "Prefer AC3Filter" in the "Filter merit" section
before clicking OK.

 AC3 Audio

That’s
the easy part.  Now you need to figure out how to make your media
player of choice always load AC3Filter.  Based on observation it seems
most likely to join graphs when the audio decoder is unknown or if the
file is simply "Rendered
If the graph is built explicitly or semi-explictly with prefered
filters in place before rendering the output pins, I have not been able
to figure out how to make it join.

 

* If you have a
Pioneer AVR chances are it supports WMAPro bitstreaming; if you
configure Vista to bitstream WMAPro it works just like AC3 & DTS. 
MC and WMP will respect this setting without needing to do anything
else, but if you use SageTV the client properties file will need to be
edited to use the "WMAPro over S/PDIF DMO" for WMAPro audio streams