Howto set up AC3 sound
This document describes how to set up a Dolby Digital AC3 compatible sound card to produce digital AC3 sound via VDR. Please note that this solution does not include the actual sound processing and amplifying. You still need an external AC3 decoder, an amplifier and 6 loudspeakers :-)
This guide was written by Carsten Koch. If you have any questions or comments, please contact Carsten directly.
Step 1: Get a sound card that has an SPDIF output.
I bought a Leadtek Winfast 4Xsound (http://www.leadtek.com/4xsound.htm) from german dealer Atelco (http://www.atelco.de). It has both electrical and optical (via a second slot cover) SPDIF outputs and inputs. The package also contains a 2m TOSLink optical cable and an adapter from TOSLink to Miniplug. With all this stuff, I consider the price (DM 65) to be quite a bargain. Atelco informed me that they will not carry this model much longer, so you better call them before you take a long trip to one of their shops or before you wait in vain for a mail order.
The card is based on the CMI 8738 chip, see http://www.cmedia.com.tw for details.
Step 2: Install the latest beta ALSA drivers, library and utilities.
Older drivers may generally support the CMI 8738, but they may not support the SPDIF (IEC958) inputs and outputs. If your CMI 8738 sound already works, but your mixer tool does not show the SPDIF inputs and outputs, I suggest you install the latest ALSA drivers.
At the time I wrote this, these were
Note: the ALSA library 0.9beta10 doesn't work well. That's why I recommend using driver 0.9beta10 together with lib/utils 0.9beta9.
You may want to check http://www.alsa-project.org for even newer versions. If you are feeling adventuresome, you may also try to check out their latest CVS versions from http://sourceforge.net/projects/alsa.
As the CVS repository does not contain the (autoconf-generated) configure script, at least on my SuSE 7.2 system, this turned out to be complicated, as autoconf appears not to be set up correctly for this purpose in SuSE 7.2. It turned out that the autoconf M4 macro file aclocal.m4 was not found, so M4 did not substitute a required macro. I could fix that by copying /usr/share/libtool/libltdl/aclocal.m4 to /usr/share/autoconf on my system. Your mileage may vary, please do not ask me if you have trouble with autoconf on your system, I am not an autoconf expert.
Step 3: Activate the driver module.
Do not try to activate the driver module via Yast2. At least the Yast2 in my SuSE 7.2 system could not handle the new 0.9beta driver. Simply put the following into your modules.conf manually:
# ALSA native device support alias char-major-116 snd options snd snd_major=116 snd_cards_limit=1 alias snd-card-0 snd-card-cmipci # OSS/Free setup alias char-major-14 soundcore alias sound-slot-0 snd-card-0 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias sound-service-0-12 snd-pcm-oss
Now you should be able to play sound both through the optical and electrical outputs of your sound card.
Do not proceed to the next step before you have verified that you can play PCM sound. For example, play an mp3 file with mpg123.
Step 4: Connect the SPDIF output of the DVB card to the SPDIF input of the sound card.
Obviously, it would be a hazzle to switch your receiver from an analog to a digital input back and forth all the time. So it would be best to play back not only sound from AC3 recordings via the digital connection, but live sound and sound from non-AC3 recordings as well. At least the old DVB cards have an electrical SPDIF output that can be directly connected to the 4xSound card's electrical SPDIF input. That input is located on the optical module (additional slot cover) that comes with the card. It is labelled "J1-SPDIF IN". See Page 5 of the sound card manual.
Connect the signal pin of J1 with the SPDIF out pin of the DVB card (see http://linuxtv.org/mailinglists/linux-dvb/msg01086.html). If your version of the DVB card does not have an SPDIF output, you can of course also connect the DVB card's line output to the sound card's line input. The following text assumes that you have made the internal connection.
Step 5: Set up the ALSA mixing parameters.
You can use the interactive (ncurses) tool alsamixer or the command line tool amixer to set up the ALSA mixing parameters. See the "alsamixer" and "amixer" man pages. I have muted '3D Control - Switch', 'Synth', 'Line', 'Line-In As Rear', 'CD', 'Mic', 'Mic Boost', 'IEC958 Copyright', 'IEC958 In Valid', 'IEC958 Loop', 'IEC958 Out To DAC', 'Aux', 'Analog Four Channel', 'Exchange DAC' and I have unmuted everything else.
Step 6: Install the specially patched ac3dec tool.
As you may have heard, the Dolby Laboratories are threatening to sue everyone who offers an AC3 decoder without paying licenses to them. In spite of it's name, we are not using the ac3dec tool as an AC3 decoder. We use this tool to transmit the AC3 stream to the IEC958 output of the sound card. The actual decoding takes place in your receiver, which of course must have an SPDIF input and must be able to decode AC3.
You can find ac3dec in the ac3-tools directory in the ALSA CVS repository on sourceforge.
There is one problem in the interaction between vdr, ac3dec and the ALSA system:
vdr starts up the "external AC3 sound tool" supplied via the -a vdr
command line parameter, even if the recording to be
played back does not contain any AC3 sound. ac3dec, as it currently exists in the sourceforge CVS repository, mutes everything else (in particular, our normal DVB sound), as soon as it starts up. Consequently, when you run vdr with the -a "ac3dec -C" parameter, you will not hear any sound when playing back non-AC3 recordings.
There are three solution alternatives:
Step 7: Run vdr with the "-a 'ac3dec -C'" parameter.
As an example, you can use
./runvdr -c . -v /video -a "'ac3dec -C'"
to run vdr.
Note that vdr currently does not feed the AC3 data into ac3dec during live viewing. vdr only records AC3 data onto its recording files and feeds them into ac3dec during playback. In order to record AC3 data successfully, you have to meet the following conditions:
Disclaimer: The above steps worked for me. Your mileage may vary. In particular, I would assume that the above works with few or maybe even no other sound cards than the one I tried. Do it all at your own risk. I wrote this howto in the hope that it will be useful, but no guarantees of any kind are implied. Please do not swamp me with e-mail. I know little more about the matter than I wrote above. Other knowledgable people on the linux-dvb mailing list may be able to help you better than I could, so please ask the list for help if you get stuck.