Hi all, my name is David, I'm new to the list. It was suggested that I try here by
someone on the LAU list as they think I may have found a bug in the emu10k1 driver for
Creative Audigy sound cards.
Sound works in Windows XP and worked in Ubuntu 8.04. It stopped after a
clean installation of Ubuntu Studio 9.04. It is not known if recording
worked or if it is now broken. Hopefully sorting out playback will
lead to a quick solution for recording, if one is needed.
Summary of Test Results
--------------------------------
Testing followed this understanding of the way sound playback is handled
in Linux. Sound;
- is generated by apps or test utilities such as Hydrogen or aplay
- may pass through a sound server such as PulseAudio or Jack
- goes to ALSA, which translates it for communication to sound cards
- is converted from digital to analogue, amplified and fed to speakers
by the sound card.
The system has a Creative Labs Audigy2 sound card.
It shares an IRQ with a video card and an onboard USB controller.
Video and USB work properly in Linux. Video, USB and sound work in
Windows.
However, while BIOS reports these items on IRQ10, Linux (using cat
/proc/interrupts) thinks they are on IRQ18. Is there any significance in
this? It seems unlikely as video and USB work properly.
ALSA appears to talk to the card – it is possible to set mixer controls
using one mixer interface and read their state using an unrelated
interface. Apps and test utilities appear able to send data to the
card. To back this up, the kernel modules required to form the driver
all appear to be loaded. When ALSA is forced to reload them, a pop
and brief low level white noise comes from the speaker.
This is similar to what can be heard during system boot.
Possibly ALSA is passing control data to the card but not PCM audio
data. I don't know if this is so or how to check.
Re-installing ALSA had no effect. A full uninstall – reinstall was not
done as many other packages would have been affected because of
dependencies.
Detailed information about the driver was reviewed, but it is beyond
my technical competence to understand if or how it applies to my card
and then to act on it (“Matrix:Module-emu10k1” at
http://www.alsa-project.org/main/index.php/Matrix:Module-emu10k1).
Now for the test results in detail.
Thanks to Dave Phillips for his excellent series "Troubleshooting Linux
Audio" at
http://www.linuxjournal.com and to many other sources.
Application & Test Utility Output
--------------------------------
the Hyrdogen drum machine can be seen producing output on its VU meters.
From the command line: aplay -vv ak4744.wav shows an apparently
successful result;
Playing WAVE 'ak4744.wav' : Signed 16 bit Little Endian, Rate 44100 Hz,
Stereo Plug PCM: Hardware PCM card 0 'Audigy 2 Value [SB0400]' device 0
subdevice 0
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 44100
exact rate : 44100 (44100/1)
msbits : 16
buffer_size : 16384
period_size : 4096
period_time : 92879
tstamp_mode : NONE
period_step : 1
avail_min : 4096
period_event : 0
start_threshold : 16384
stop_threshold : 16384
silence_threshold: 0
silence_size : 0
Test tone from Sound → Preferences → Test output appears to be
successful to most sound pipelines;
- Audigy 2 Multichannel Playback (ALSA) OK
- Audigy 2 Multichannel Capture / PT Playback (ALSA) Fails with
error message “gconfaudiosink: cound not open audio device for playback”
(also describes the audio sources as a 512 Hz tone and the pipeline as
“audioconvert ! Audioresample ! Gconfaudiosink”).
- Audigy 2 ADC Capture / Standard PCM Playback (ALSA) OK
- Audigy 2 ADC Capture / Standard PCM Playback (OSS) 2 are OK, the
third apparently identical one fails
- ALSA OK
- OSS OK
Sound Server
--------------------------------
PulseAudio and JACK were both on the sytesm. To simplify the problem;
JACK was not started;
PulseAudio was completely uninstalled, the system was restarted and it
was
verified that no persistent processes still existed for PulseAudio
(ps -e | grep “pulse”)
Drivers (ALSA)
--------------------------------
All volume controls were set to 100% and all mute controls were set to
un-mute in Alsamixer. These settings were verified by having another
mixer read and display them (Alsamixergui).
As can be seen from the preceding output of aplay, sound was routed
directly from its source to ALSA and ALSA recognised the Audigy 2 card
on this computer.
Output from the Sound → Preferences test also suggests that ALSA is
interrogating the card and recognising what it can and cannot do.
However, there is a strange indication from ALSCTL;
alsactl init
which shows;
Unknown hardware: "Audigy2" "SigmaTel STAC9750,51"
"AC97a:83847650" "" ""
What is this saying?
The ALSA soundcard matrix says an Audigy2 card should be using emu10k1
modules..
http://www.alsa-project.org/main/index.php/Matrix:Vendor-Creative_Labs
though I can't find an exact match there for my Audigy 2 SB0400 card.
I tried forcing ALSA to reload its kernel modules using;
sudo alsa reload
The speaker emitted a soft pop and about half a second of very low level
white
noise, similar to what can be heard during system boot.
Commmand output was;
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system
/home/dmorrell/.gvfs
Output information may be incomplete.
/sbin/alsa: Warning: Processes using sound devices: 3215(timidity).
Unloading ALSA sound driver modules: snd-emu10k1-synth snd-emux-synth
snd-seq-virmidi snd-seq-midi-emul snd-emu10k1 snd-ac97-codec snd-pcm-oss
snd-mixer-oss snd-pcm snd-page-alloc snd-util-mem snd-hwdep snd-seq-dummy
snd-seq-oss snd-seq-midi snd-rawmidi snd-seq-midi-event snd-seq snd-timer
snd-seq-device (failed: modules still loaded: snd-seq snd-timer
snd-seq-device).
Loading ALSA sound driver modules: snd-emu10k1-synth snd-emux-synth
snd-seq-virmidi snd-seq-midi-emul snd-emu10k1 snd-ac97-codec snd-pcm-oss
snd-mixer-oss snd-pcm snd-page-alloc snd-util-mem snd-hwdep
snd-seq-dummy
snd-seq-oss snd-seq-midi snd-rawmidi snd-seq-midi-event snd-seq
snd-timer
snd-seq-device.
Kernel module(s) the card is using were checked using
cat /proc/asound/modules
which shows;
0 snd_emu10k1
i.e. there is only card 0 and it is using module snd_emu10k1.
This was further confirmed using command lspci -v | grep “Audigy”, which
showed;
05:09.0 Multimedia audio controller: Creative Labs SB0400
Audigy2 Value Kernel driver in use: EMU10K1_Audigy
A test was done to confirm that the modules are actually loaded into
the kernel;
lsmod | grep "emu"
which showed a host of modules that seem as if they should be there,
though of course could not show any modules that aren't there and
should be;
snd_emu10k1_synth 14336 0
snd_emux_synth 40832 1 snd_emu10k1_synth
snd_seq_virmidi 13440 1 snd_emux_synth
snd_seq_midi_emul 14592 1 snd_emux_synth
snd_emu10k1 144288 1 snd_emu10k1_synth
snd_ac97_codec 112292 1 snd_emu10k1
snd_pcm 83076 3 snd_emu10k1,snd_ac97_codec,snd_pcm_oss
snd_page_alloc 16904 2 snd_emu10k1,snd_pcm
snd_util_mem 12288 2 snd_emux_synth,snd_emu10k1
snd_hwdep 15108 2 snd_emux_synth,snd_emu10k1
snd_rawmidi 29696 3 snd_seq_virmidi,snd_emu10k1,
snd_seq_midi
snd_seq 56880 10
snd_emux_synth,snd_seq_virmidi,snd_seq_midi_emul,snd_seq_dummy,
snd_seq_oss,snd_seq_midi,snd_seq_midi_event
snd_timer 29704 3 snd_emu10k1,snd_pcm,snd_seq
snd_seq_device 14988 8
snd_emu10k1_synth,snd_emux_synth,snd_emu10k1,snd_seq_dummy,snd_seq_oss,
snd_seq_midi,snd_rawmidi,snd_seq
snd 62756 14
snd_emux_synth,snd_seq_virmidi,snd_emu10k1,snd_ac97_codec,snd_pcm_oss,
snd_mixer_oss,snd_pcm,snd_hwdep,snd_seq_oss,snd_rawmidi,snd_seq,snd_
timer,snd_seq_device
Just for the hell of it, I had a look at information about the emu10k1
module using;
modinfo snd-emu10k1
which showed;
filename:
/lib/modules/2.6.28-15-generic/kernel/sound/pci/emu10k1/snd-emu10k1.ko
license: GPL
description: EMU10K1
author: Jaroslav Kysela <perex(a)perex.cz>
firmware: emu/emu1010_notebook.fw
firmware: emu/emu0404.fw
firmware: emu/micro_dock.fw
firmware: emu/emu1010b.fw
firmware: emu/audio_dock.fw
firmware: emu/hana.fw
srcversion: F52CF37385CBD708CAB4A2C
alias: pci:v00001102d00000008sv*sd*bc*sc*i*
alias: pci:v00001102d00000004sv*sd*bc*sc*i*
alias: pci:v00001102d00000002sv*sd*bc*sc*i*
depends:
snd-pcm,snd-util-mem,snd-page-alloc,snd,snd-rawmidi,snd-timer,
snd-hwdep,snd-ac97-codec,snd-seq-device
vermagic: 2.6.28-15-generic SMP mod_unload modversions 586
parm: index:Index value for the EMU10K1 soundcard.
(array of int)
parm: id:ID string for the EMU10K1 soundcard. (array of charp)
parm: enable:Enable the EMU10K1 soundcard. (array of bool)
parm: extin:Available external inputs for FX8010.
Zero=default. (array
of int)
parm: extout:Available external outputs for FX8010.
Zero=default.
(array of int)
parm: seq_ports:Allocated sequencer ports for internal
synthesizer.
(array of int)
parm: max_synth_voices:Maximum number of voices for
WaveTable. (array
of int)
parm: max_buffer_size:Maximum sample buffer size in MB.
(array of int)
parm: enable_ir:Enable IR. (array of bool)
parm: subsystem:Force card subsystem model. (array of uint)
Noticing the parameter 'enable' (ton enable a sound card) and feeling
desparate, I tried reloading the module with that parameter specified;
sudo modprobe -i snd_emu10k1 enable=true
Unsurprisingly, it made no difference as the card already appears to
be talking to its driver anyway.
The ALSA soundcard matrix mentions that some cards may need the
alsa-firmware package. That package is not on my system or in the
Ubuntu repositories. However, its headers are installed. I don't
know if this is significant.
Next, I tried reinstalling ALSA. The following packages were affected;
libsox-fmt-alsa
alsa-base
libasound2
libasound2-plugins
mcp-plugins
libesd-alsa0
This had no effect, so I considered completely uninstalling &
reinstalling. However, many other packages that depend on ALSA would
also have been removed. This looked like a short cut to a long
reconstruction.
Sound Card
--------------------------------
The card works under Windows XP and had worked under Ubuntu 8.04.
I have a Creative Labs Audigy 2 PCI card as card 0 on IRQ18 according
to cat /proc/asound/cards
0 [Audigy2 ]: Audigy2 - Audigy 2 Value [SB0400]
Audigy 2 Value [SB0400] (rev.0, serial:0x10011102) at 0x1040, irq 18
More information is given by
cat /proc/interrupts
which shows
18: 185146 IO-APIC-fasteoi uhci_hcd:usb4, EMU10K1,
radeon@pci:0000:01:00.0
There is a USB controller, the soundcard (EMU10K1) and the video card
(radeon) all using the same interrupt. The sound card does not appear
on any other interrupts.
BIOS reports all of these devices on IRQ10, not IRQ18. And yes, I have
checked carefully to be sure I am not confusing 8 with 0.
How could this discrepancy happen?
A hint may lie in the online book “The Linux Kernel” at
http://tldp.org/LDP/tlk/dd/pci.html.
“For Intel based systems the system BIOS, which ran at boot time, has
already fully configured the PCI system. This leaves Linux with little
to do other than map that configuration. For non-Intel based systems
further configuration needs to happen to:
- Allocate PCI I/O and PCI Memory space to each device,
- Configure the PCI I/O and PCI Memory address windows for each PCI-PCI
bridge in the system,
- Generate Interrupt Line values for the devices; these control
interrupt handling for the device. “
Possibly Linux has read the information set up by the BIOS, then the
PCI Fixup routine has remapped the Interrupt Line values even though.it
may not have needed to do so?
For a boots and all look at the PCI information about the sound card,
lspci -vvxxx
shows
05:09.0 Multimedia audio controller: Creative Labs SB0400 Audigy2 Value
Subsystem: Creative Labs Device 1001
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping-
SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort
- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64 (500ns min, 5000ns max)
Interrupt: pin A routed to IRQ 18
Region 0: I/O ports at 1040 [size=64]
Capabilities: [dc] Power Management version 2
Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,
D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Kernel driver in use: EMU10K1_Audigy
Kernel modules: snd-emu10k1
The card has the following devices shown by;
aplay -L
This shows abridged);
front:CARD=Audigy2,DEV=0
Audigy 2 Value [SB0400], ADC Capture/Standard PCM Playback
Front speakers
rear:CARD=Audigy2,DEV=0
Audigy 2 Value [SB0400], ADC Capture/Standard PCM Playback
Rear speakers
…
Audigy 2 Value [SB0400], ADC Capture/Standard PCM Playback
IEC958 (S/PDIF) Digital Audio Output
null
Discard all samples (playback) or generate zero samples (capture)
To see all input devices;
arecord -l
which shows;
arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Audigy2 [Audigy 2 Value [SB0400]], device 0: emu10k1 [ADC
Capture/Standard PCM Playback]
Subdevices: 1/1
card 0: Audigy2 [Audigy 2 Value [SB0400]], device 1: emu10k1
mic [Mic Capture]
card 0: Audigy2 [Audigy 2 Value [SB0400]], device 2: emu10k1
efx [Multichannel
Capture/PT Playback]
Subdevices: 1/1
-- David Morrell Web site:
www.davidmorrell.ozeweb.net (when I get it on
air again :) <http://www.davidmorrell.ozeweb.net> Email:
dsmorrell56(a)dodo.com.au <mailto:dsmorrell56@dodo.com.au> Ph: 0408 842
955 / 03 6343 5131 _______________________________________________
Linux-audio-user mailing list Linux-audio-user(a)lists.linuxaudio.org
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user