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