Subject: Re: emuxki(4): audioplay(1) blocking
To: None <current-users@netbsd.org>
From: =?ISO-8859-1?Q?St=E9phane?= Witzmann <stephane.witzmann@gmail.com>
List: current-users
Date: 09/12/2006 20:49:07
Jukka Salmi wrote:
> Hi,
>
> I'm having problems playing some WAVE audio files on a NetBSD/i386
> system with an emuxki(4):
>
> emuxki0 at pci0 dev 14 function 0: Creative Labs SBLive! EMU 10000 (audio
> multimedia, revision 0x07) emuxki0: ac97: SigmaTel STAC9708 codec; 18 bit
> DAC, 18 bit ADC, SigmaTel 3D emuxki0: ac97: ext id 80<SDAC>
> audio0 at emuxki0: full duplex, mmap, independent
>
> The problem: after having played a stereo file using audioplay(1),
> playing a mono file blocks while writing to /dev/sound. And the same
> is true the other way round: after having played a mono file, playing
> a stereo file blocks.
>
> To reset the system to a state where playing a WAVE file with n channels
> works I play a FLAC file with n channels using pkgsrc/audio/flac123.
> However, I don't know _why_ this works...
>
> Given the following files
>
> http://salmi.ch/~jukka/nbsd/mono.wav
> http://salmi.ch/~jukka/nbsd/mono.flac
> http://salmi.ch/~jukka/nbsd/stereo.wav
> http://salmi.ch/~jukka/nbsd/stereo.flac
>
> $ file mono.* stereo.*
> mono.flac: FLAC audio bitstream data, 16 bit, mono, 44.1 kHz, 34584
> samples
> mono.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit,
> mono 44100 Hz stereo.flac: FLAC audio bitstream data, 16 bit, stereo, 44.1
> kHz, 34584 samples
> stereo.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit,
> stereo 44100 Hz
>
> here's a log describing the reproduction of the problem (kernel with
> EMUXKI_DEBUG set):
>
> $ flac123 stereo.flac
> emuxki0: emuxki_open called
> Setting play voice params : mono, 16 bits, 8000 Hz
> Setting play voice params : stereo, 16 bits, 8000 Hz
> Setting play voice params : stereo, 16 bits, 44100 Hz
> [plays fine]
> emuxki0: emu10K1_close called
>
> $ audioplay stereo.wav
> emuxki0: emuxki_open called
> [plays fine]
> emuxki0: emu10K1_close called
>
> $ audioplay mono.wav
> emuxki0: emuxki_open called
> Setting play voice params : mono, 16 bits, 44100 Hz
> [blocks, see below]
> [^C]
> emuxki0: emu10K1_close called
>
> $ flac123 mono.flac
> emuxki0: emuxki_open called
> Setting play voice params : mono, 16 bits, 8000 Hz
> Setting play voice params : mono, 16 bits, 44100 Hz
> [plays fine]
> emuxki0: emu10K1_close called
>
> $ audioplay mono.wav
> emuxki0: emuxki_open called
> [plays fine]
> emuxki0: emu10K1_close called
>
>
> Ktracing the blocking audioplay(4) shows
> [...]
> 2860 1 audioplay CALL open(0x804a3b9,1,0x804a36f)
> 2860 1 audioplay NAMI "/dev/sound"
> 2860 1 audioplay RET open 4
> [...]
> 2860 1 audioplay RET read 3676/0xe5c
> 2860 1 audioplay CALL write(4,0x804d000,0xe5c)
>
> and top(1) reports `STATE aud_wr'.
>
>
> Any hints what could be the problem? What information should I provide?
>
> TIA, Jukka
>
1) Does the same test work with another sound card on the same system ?
2) I think playing with flac123 works because it opens /dev/audio instead
of /dev/sound. This resets the device.
Can you try playing the wav files using /dev/audio ?
Can you also tell flac123 to use /dev/sound and see if it triggers the bug ?
Stéphane