I built an HTPC based on Nvidia Ion2 (AT5IONT-I) board running Ubuntu Linux 10.10 with Xbmc.
I noticed that there is no sound output from the HDMI port. However, there is sound output from the dvi port. When booting off the Xbmc Live CD, all sound outputs worked.
I performed several tests to identify and solve the problem.
The output of aplay -L is as follows:
default
pulse
Playback/recording through the PulseAudio sound server
front:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Front speakers
surround40:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
4.0 Surround output to Front and Rear speakers
surround41:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Intel,DEV=0
HDA Intel, ALC887 Digital
IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Direct sample mixing device
dmix:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Direct sample mixing device
dsnoop:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Direct sample snooping device
dsnoop:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Direct sample snooping device
hw:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Direct hardware device without any conversions
hw:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Direct hardware device without any conversions
plughw:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Hardware device with all software conversions
plughw:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Hardware device with all software conversions
hdmi:CARD=NVidia,DEV=0
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
hdmi:CARD=NVidia,DEV=2
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
hdmi:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
dmix:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dmix:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dmix:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dmix:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dsnoop:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
hw:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
plughw:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
It appears that there are four hdma NVidia sound devices.
I performed the following tests using the speaker-test utility and mplayer:
speaker-test -twav # default device, sound goes to DVI
speaker-test -Dhw:Intel -twav # intel device, sound goes to optical
speaker-test -Diec958:Intel -c2 -twav # intel device, sound goes to optical
speaker-test -Dhw:NVidia -c2 -twav # tries to access /dev/snd/pcmC1D3p, which is busy; here is the problem
speaker-test -Dhw:NVidia,DEV=7 -c2 -twav # NVidia device, sound goes to HDMI
speaker-test -Dhdmi:NVidia,DEV=0 -c2 -twav # Device busy
speaker-test -Dhdmi:NVidia,DEV=1 -c2 -twav # HDMI sound works
Now, we want to send sound to all outputs simultaneously. Take the ~/.asoundrc file from the Xbmc Live CD, which looks as follows:
pcm.both {
type route
slave {
pcm multi
channels 6
}
ttable.0.0 1.0
ttable.1.1 1.0
ttable.0.2 1.0
ttable.1.3 1.0
ttable.0.4 1.0
ttable.1.5 1.0
}
pcm.multi {
type multi
slaves.a {
pcm "hdmi_hw"
channels 2
}
slaves.b {
pcm "digital_hw"
channels 2
}
slaves.c {
pcm "analog_hw"
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
bindings.4.slave c
bindings.4.channel 0
bindings.5.slave c
bindings.5.channel 1
}
pcm.hdmi_hw {
type hw
card 1
device 3
channels 2
}
pcm.hdmi_formatted {
type plug
slave {
pcm hdmi_hw
rate 48000
channels 2
}
}
pcm.hdmi_complete {
type softvol
slave.pcm hdmi_formatted
control.name hdmi_volume
control.card 1
}
pcm.digital_hw {
type hw
card 0
device 1
channels 2
}
pcm.analog_hw {
type hw
card 0
device 0
channels 2
}
Replace there the broken HDMI device 3 by working device 7 as follows:
pcm.hdmi_hw {
type hw
card 1
device 7
channels 2
}
And now the sound works properly
I noticed that there is no sound output from the HDMI port. However, there is sound output from the dvi port. When booting off the Xbmc Live CD, all sound outputs worked.
I performed several tests to identify and solve the problem.
The output of aplay -L is as follows:
default
pulse
Playback/recording through the PulseAudio sound server
front:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Front speakers
surround40:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
4.0 Surround output to Front and Rear speakers
surround41:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Intel,DEV=0
HDA Intel, ALC887 Digital
IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Direct sample mixing device
dmix:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Direct sample mixing device
dsnoop:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Direct sample snooping device
dsnoop:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Direct sample snooping device
hw:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Direct hardware device without any conversions
hw:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Direct hardware device without any conversions
plughw:CARD=Intel,DEV=0
HDA Intel, ALC887 Analog
Hardware device with all software conversions
plughw:CARD=Intel,DEV=1
HDA Intel, ALC887 Digital
Hardware device with all software conversions
hdmi:CARD=NVidia,DEV=0
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
hdmi:CARD=NVidia,DEV=2
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
hdmi:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
HDMI Audio Output
dmix:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dmix:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dmix:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dmix:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Direct sample mixing device
dsnoop:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
dsnoop:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Direct sample snooping device
hw:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
hw:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Direct hardware device without any conversions
plughw:CARD=NVidia,DEV=3
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=7
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=8
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
plughw:CARD=NVidia,DEV=9
HDA NVidia, NVIDIA HDMI
Hardware device with all software conversions
It appears that there are four hdma NVidia sound devices.
I performed the following tests using the speaker-test utility and mplayer:
speaker-test -twav # default device, sound goes to DVI
speaker-test -Dhw:Intel -twav # intel device, sound goes to optical
speaker-test -Diec958:Intel -c2 -twav # intel device, sound goes to optical
speaker-test -Dhw:NVidia -c2 -twav # tries to access /dev/snd/pcmC1D3p, which is busy; here is the problem
speaker-test -Dhw:NVidia,DEV=7 -c2 -twav # NVidia device, sound goes to HDMI
speaker-test -Dhdmi:NVidia,DEV=0 -c2 -twav # Device busy
speaker-test -Dhdmi:NVidia,DEV=1 -c2 -twav # HDMI sound works
Now, we want to send sound to all outputs simultaneously. Take the ~/.asoundrc file from the Xbmc Live CD, which looks as follows:
pcm.both {
type route
slave {
pcm multi
channels 6
}
ttable.0.0 1.0
ttable.1.1 1.0
ttable.0.2 1.0
ttable.1.3 1.0
ttable.0.4 1.0
ttable.1.5 1.0
}
pcm.multi {
type multi
slaves.a {
pcm "hdmi_hw"
channels 2
}
slaves.b {
pcm "digital_hw"
channels 2
}
slaves.c {
pcm "analog_hw"
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
bindings.4.slave c
bindings.4.channel 0
bindings.5.slave c
bindings.5.channel 1
}
pcm.hdmi_hw {
type hw
card 1
device 3
channels 2
}
pcm.hdmi_formatted {
type plug
slave {
pcm hdmi_hw
rate 48000
channels 2
}
}
pcm.hdmi_complete {
type softvol
slave.pcm hdmi_formatted
control.name hdmi_volume
control.card 1
}
pcm.digital_hw {
type hw
card 0
device 1
channels 2
}
pcm.analog_hw {
type hw
card 0
device 0
channels 2
}
Replace there the broken HDMI device 3 by working device 7 as follows:
pcm.hdmi_hw {
type hw
card 1
device 7
channels 2
}
And now the sound works properly