Just re-reading my earlier posts and answering them as I have learned much since then. This has been posted elsewhere but here's how ALSA needs to be configured. What I didn't see posted elsewhere however was that you HAVE to ALSO use this on your mplayer line
-ao alsa:device=default -srate 48000
As if you don't and you try and play any files with an audio sample rate of say 16khz ALSA will work but throw out errors that causes mplayer to play audio and video all jerky at about 3 fps!
Anyway you need to create the asound.conf file below and use alsa:default as the playback device like this:-
Code:
/usr/bin/mplayer -monitoraspect 1.3333 -ao alsa:device=default -ac hwac3, -srate 48000 -vo xv -cache 16384 -fs "/myth/video/pc/test/test video.avi"
/etc/asound.conf
Code:
# Override the default output used by ALSA.
# If you do not override the default, your default
# device is identical to the (unmixed) analog device
# shown below. If you prefer mixed and/or digital
# output, uncomment the appropriate four lines below
# (only one slave.pcm line).
pcm.!default {
type plug
## Uncomment the following to use mixed analog by default
# slave.pcm "dmix-analog"
## Uncomment the following to use unmixed digital by default
# slave.pcm "digital-hw"
## Uncomment the following to use mixed digital by default
# slave.pcm "dmix-digital"
## Uncomment the following to use analog & digital at same time by default
slave.pcm "anadig-hw"
# slave.pcm "anadig-hw8"
}
# this device dups audio to both digital and analog outs (ac3 will give noise on analog outs)
# I use script so mplayer & xine only send ac3 if myth ac3 flag is on
pcm.anadig {
type plug
slave.pcm "anadig-hw"
}
# Control device (mixer, etc.) for the nForce2 card
ctl.anadig {
type hw
card 0
}
# Alias for analog output on the nForce2/4 (hw:0,0)
# - This is identical to the device named "default"--which
# always exists and refers to hw:0,0 (unless overridden)
# - Therefore, we can specify "hw:0,0", "default", or "analog"
# to access analog output on the nForce2/4
pcm.analog {
type plug
slave.pcm "analog-hw"
}
# Control device (mixer, etc.) for the nForce2 card
ctl.analog {
type hw
card 0
}
# Alias for (rate-converted) mixed analog output on the
# nForce2 (hw:0,0)
# - This will accept audio input--regardless of rate--and
# convert to the rate required for the dmix plugin
# (in this case 48000Hz)
pcm.mixed-analog {
type plug
slave.pcm "dmix-analog"
}
# Control device (mixer, etc.) for the nForce2 card
ctl.mixed-analog {
type hw
card 0
}
# Alias for (rate-converted) digital (S/PDIF) output on the
# nForce2 (hw:0,2)
# - This will accept audio input--regardless of rate--and
# convert to the rate required for the S/PDIF hardware
# (in this case 48000Hz)
pcm.digital {
type plug
slave.pcm "digital-hw"
}
# Control device (mixer, etc.) for the nForce2 card
ctl.digital {
type hw
card 0
}
# Alias for mixed (rate-converted) digital (S/PDIF) output on the
# nForce2/4 (hw:0,2)
# - This will accept audio input--regardless of rate--and
# convert to the rate required for the S/PDIF hardware
# (in this case 48000Hz)
pcm.mixed-digital {
type plug
slave.pcm "dmix-digital"
}
# Control device (mixer, etc.) for the nForce2 card
ctl.mixed-digital {
type hw
card 0
}
# The following devices are not useful by themselves. They
# require specific rates, channels, and formats. Therefore,
# you probably do not want to use them directly. Instead use
# of of the devices defined above.
# Alias for analog output on the nForce2 (hw:0,0)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.analog-hw {
type hw
card 0
# The default value for device is 0, so no need to specify
}
# Control device (mixer, etc.) for the nForce2/4 card
ctl.analog-hw {
type hw
card 0
}
# Alias for digital (S/PDIF) output on the nForce2/4 (hw:0,2)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.digital-hw {
type hw
card 0
device 2
}
# Control device (mixer, etc.) for the nForce2/4 card
ctl.digital-hw {
type hw
card 0
}
# Direct software mixing plugin for analog output on
# the nForce2/4 (hw:0,0)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.dmix-analog {
type dmix
ipc_key 1234
slave {
pcm "analog-hw"
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
}
# Control device (mixer, etc.) for the nForce2/4 card
ctl.dmix-analog {
type hw
card 0
}
# Direct software mixing plugin for digital (S/PDIF) output
# on the nForce2/4 (hw:0,2)
# Do not use this directly--it requires specific rate,
# channels, and format
pcm.dmix-digital {
type dmix
ipc_key 1235
slave {
pcm "digital-hw"
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
}
# Control device (mixer, etc.) for the nForce2/4 card
ctl.dmix-digital {
type hw
card 0
}
###################################################
# this one creates a four-channel output PCM device
pcm.multi-anadig {
type multi;
slaves.a.pcm "analog-hw"; # this is the default output
slaves.a.channels 2;
slaves.b.pcm "digital-hw"; # this is the SPDIF output
slaves.b.channels 2;
bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave b;
bindings.2.channel 0;
bindings.3.slave b;
bindings.3.channel 1;
}
ctl.multi-anadig {
type hw;
card 0;
}
# this duplicates input from 2 channels to 4 channels and
# sends the output to multi, above.
pcm.anadig-hw {
type route;
slave.pcm "multi-anadig";
slave.channels 4;
ttable.0.0 1;
ttable.1.1 1;
ttable.0.2 1;
ttable.1.3 1;
}
ctl.anadig-hw {
type hw;
card 0;
}
You also need to run alsamixer and set that up eg
# For 6 channels out set:-
# PCM = 100 (volume chans 1&2)
# Surround = 100 (volume chans 3&4)
# Surround Jack Mode = shared (not independ)
# Center = 100 (volume chan 5)
# LFE = 100 (volume chan 6)
# Channel Mode = 6ch
# Duplicate Front = on (will copy analog 1&2 to 3&4 but not 5&6)
#store settings
then run
/usr/sbin/alsactl store
to store your settings permanantly
If you're really keen! here is another device I set up in asound.conf to play the audio to digital out and as 3 stereo pairs to the 3 analog stereo outs simultaneusly. Also devices to play to each analog pair seperately.
Code:
# this one creates a 8-channel output PCM device
pcm.multi-anadig8 {
type multi;
slaves.a.pcm "hw:0,0"; # this is the main analog output
slaves.a.channels 6;
slaves.b.pcm "hw:0,2"; # this is the second analog output
slaves.b.channels 2;
bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave a;
bindings.2.channel 2;
bindings.3.slave a;
bindings.3.channel 3;
bindings.4.slave a;
bindings.4.channel 4;
bindings.5.slave a;
bindings.5.channel 5;
bindings.6.slave b;
bindings.6.channel 0;
bindings.7.slave b;
bindings.7.channel 1;
}
ctl.multi-anadig8 {
type hw;
card 0;
}
# this duplicates input from 2 channels to 8 channels and
# sends the output to all 3 stereo analog outs AND spdif
pcm.anadig-hw8 {
type route;
slave.pcm "multi-anadig8";
slave.channels 8;
ttable.0.0 1;
ttable.1.1 1;
ttable.0.2 1;
ttable.1.3 1;
ttable.0.4 1;
ttable.1.5 1;
ttable.0.6 1;
ttable.1.7 1;
}
ctl.anadig-hw8 {
type hw;
card 0;
}
# this sends audio to analog out 2
pcm.analog2 {
type plug
slave {
pcm "multi-anadig8"
channels 8
}
ttable.0.2 1
ttable.1.3 1
}
ctl.analog2 {
type hw;
card 0;
}
# this sends audio to analog out 3
pcm.analog3 {
type plug
slave {
pcm "multi-anadig8"
channels 8
}
ttable.0.4 1
ttable.1.5 1
}
ctl.analog3 {
type hw;
card 0;
}
I had hoped to persuade ALSA to do ac3 pass-thru via the spdif out and simultaneously decode/downmix to stereo to send out of the analog out. But after 2 days of thinking Jack or something else might work and struggling with the lack of detailed understandable documentation on it all I gave up. I'm used to windows coding were stuff is fairly well documented.