[alsa-devel] Problem with USB Class 2 Audio Driver

Demian Martin demianm_1 at yahoo.com
Mon Aug 23 01:51:55 CEST 2010


Daniel:
I'll try to provide all the info you want. I'll need some prompting for some
details, please be patient with me.

First the system.
I have tested on both an intel D945GSEJT atom based MB and an Alis 3.3 AMD
Geode based mb.
OS: Linux auraliti-player 2.6.32auraliti-2.0 #1 PREEMPT Fri Jul 30 06:48:14
GMT 2010 i686 GNU/Linux
Distro Voyage Linux 0.6.1
It's a dedicated headless 2 channel audio player, sort of a high performance
squeezebox. Details here: www.auraliti.com

When I play a file from a network source (connected through nfs) I have no
problems with either .wav or .flac. 

I don't know how to tell with certainty if the USB devices are connecting
through a common or separate root hubs.

USB stick speed- It took 6.2 seconds to pass a 1 minute 19 second 192/24
file to dev/null so USB speed is not a problem. 

It seems there is a collision when there is a high speed USB storage device
and the USB class 2 audio on the same host port both moving data at the same
time. 

All of the following were done with the Alix board (Geode 500 MHz
processor). The Intel does similar but seems more likely to work.

Under some conditions the system loses connection to the USB audio device:
auraliti-player:~# aplay -v -Dplughw:1
/media/usb0/Trio-Mytek8X192ADDA-192k.WAV
Playing WAVE '/media/usb0/Trio-Mytek8X192ADDA-192k.WAV' : Signed 24 bit
Little Endian in 3bytes, Rate 192000 Hz, Stereo
aplay: set_params:1116: Unable to install hw params:
ACCESS:  RW_INTERLEAVED
FORMAT:  S24_3LE
SUBFORMAT:  STD
SAMPLE_BITS: 24
FRAME_BITS: 48
CHANNELS: 2
RATE: 192000
PERIOD_TIME: 125000
PERIOD_SIZE: 24000
PERIOD_BYTES: 144000
PERIODS: 4
BUFFER_TIME: 500000
BUFFER_SIZE: 96000
BUFFER_BYTES: 576000
TICK_TIME: 0
auraliti-player:~#

Fixed by disconnecting and reconnecting the device.


Here is what I get playing a 44.1 file, after about 15 seconds:

Playing WAVE '/media/usb0/Piano_44_1.wav' : Signed 24 bit Little Endian in
3bytes, Rate 44100 Hz, Stereo
Plug PCM: Linear conversion PCM (S32_LE)
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S24_3LE
  subformat    : STD
  channels     : 2
  rate         : 44100
  exact rate   : 44100 (44100/1)
  msbits       : 24
  buffer_size  : 22050
  period_size  : 5513
  period_time  : 125011
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 5513
  period_event : 0
  start_threshold  : 22050
  stop_threshold   : 22050
  silence_threshold: 0
  silence_size : 0
  boundary     : 1445068800
Slave: Hardware PCM card 1 'WaveLink HS SPDIF' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 2
  rate         : 44100
  exact rate   : 44100 (44100/1)
  msbits       : 32
  buffer_size  : 22050
  period_size  : 5513
  period_time  : 125011
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 5513
  period_event : 0
  start_threshold  : 22050
  stop_threshold   : 22050
  silence_threshold: 0
  silence_size : 0
  boundary     : 1445068800
  appl_ptr     : 0
  hw_ptr       : 0
underrun!!! (at least 0.015 ms long)
Status:
  state       : XRUN
  trigger_time: 903.806908643
  tstamp      : 903.807038997
  delay       : 0
  avail       : 0
  avail_max   : 11028
aplay: xrun:1259: xrun: prepare error: File descriptor in bad state
auraliti-player:~#

And the system stops playing.

And very quickly on a 176.4 file:

Playing WAVE '/media/usb0/01_Rimsky-Korsakov Dance of the Tumblers.wav' :
Signed 24 bit Little Endian in 3bytes, Rate 176400 Hz, Stereo
Plug PCM: Linear conversion PCM (S32_LE)
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S24_3LE
  subformat    : STD
  channels     : 2
  rate         : 176400
  exact rate   : 176400 (176400/1)
  msbits       : 24
  buffer_size  : 88200
  period_size  : 22050
  period_time  : 125000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 22050
  period_event : 0
  start_threshold  : 88200
  stop_threshold   : 88200
  silence_threshold: 0
  silence_size : 0
  boundary     : 1445068800
Slave: Hardware PCM card 1 'WaveLink HS SPDIF' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 2
  rate         : 176400
  exact rate   : 176400 (176400/1)
  msbits       : 32
  buffer_size  : 88200
  period_size  : 22050
  period_time  : 125000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 22050
  period_event : 0
  start_threshold  : 88200
  stop_threshold   : 88200
  silence_threshold: 0
  silence_size : 0
  boundary     : 1445068800
  appl_ptr     : 0
  hw_ptr       : 0
underrun!!! (at least 0.010 ms long)
Status:
  state       : XRUN
  trigger_time: 1050.313984810
  tstamp      : 1050.314067000
  delay       : 0
  avail       : 1413
  avail_max   : 22071
aplay: xrun:1259: xrun: prepare error: File descriptor in bad state
auraliti-player:~#

If in interpose a USB 1 hub on the usb storage I get this:

auraliti-player:~# aplay -v -Dplughw:1 /media/usb0/01_Rimsky-Korsakov\
Dance\ of\ the\ Tumblers.wav
Playing WAVE '/media/usb0/01_Rimsky-Korsakov Dance of the Tumblers.wav' :
Signed 24 bit Little Endian in 3bytes, Rate 176400 Hz, Stereo
Plug PCM: Linear conversion PCM (S32_LE)
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S24_3LE
  subformat    : STD
  channels     : 2
  rate         : 176400
  exact rate   : 176400 (176400/1)
  msbits       : 24
  buffer_size  : 88200
  period_size  : 22050
  period_time  : 125000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 22050
  period_event : 0
  start_threshold  : 88200
  stop_threshold   : 88200
  silence_threshold: 0
  silence_size : 0
  boundary     : 1445068800
Slave: Hardware PCM card 1 'WaveLink HS SPDIF' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 2
  rate         : 176400
  exact rate   : 176400 (176400/1)
  msbits       : 32
  buffer_size  : 88200
  period_size  : 22050
  period_time  : 125000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 22050
  period_event : 0
  start_threshold  : 88200
  stop_threshold   : 88200
  silence_threshold: 0
  silence_size : 0
  boundary     : 1445068800
  appl_ptr     : 0
  hw_ptr       : 0
underrun!!! (at least 1.537 ms long)
Status:
  state       : XRUN
  trigger_time: 1219.804905467
  tstamp      : 1219.820257912
  delay       : 0
  avail       : 88220
  avail_max   : 88220
underrun!!! (at least 13.900 ms long)
Status:
  state       : XRUN
  trigger_time: 1222.763695807
  tstamp      : 1222.902684537
  delay       : 0
  avail       : 66169
  avail_max   : 88219
underrun!!! (at least 1.279 ms long)
Status:
  state       : XRUN
  trigger_time: 1225.972436940
  tstamp      : 1225.985216250
  delay       : 0
  avail       : 88221
  avail_max   : 88221
underrun!!! (at least 14.141 ms long)

etc. until I stop the playback. 

44.1 playback is fine under these conditions (but then why USB audio class
2?)

Further, using MPD for playback I have discovered that the high bit rate
flac files play fine but the same files as wave have the same type of
stall/stop problems.

I tried Windows on the Intel platform with similar problems using windows
media player but no problems with VLC. However with Windows it is not easy
to know what is really going on inside.

Is it possible that the essentially synchronous nature of playing a wave
file from USB source to USB Audio device causes a collision since the data
is going both ways at essentially the same rate and timing?

Let me know what other info you need.

Thanks for looking at this.
            -Demian




-----Original Message-----
From: Daniel Mack [mailto:daniel at caiaq.de] 
Sent: Saturday, August 21, 2010 2:27 AM
To: Demian Martin
Cc: alsa-devel at alsa-project.org
Subject: Re: Problem with USB Class 2 Audio Driver

On Fri, Aug 20, 2010 at 05:40:22PM -0700, Demian Martin wrote:
> I'm testing an early sample of the Wavelength Wavelink, a USB to S/PDIF
> adapter that supports 44.1-192 KHz sample rates and uses async usb to talk
> to ALSA. It works and plays all of the sample rates correctly with the git
> version of Alsa from 7/30/2010 whenthe files are sourced from the network.

What do you mean by "from the network"? How does your test setup look
like?

> However if I try to play from a usb source to the usb dac it doesn't work
> and the whole system gets unstable. 

You could also be more precise here :) What doesn't work, how are you
testing, and in which regard does the system get unstable?

> The platforms I have tested it on seem
> to have a single USB host interface but with USB 2 there should be enough
> bandwidth to pass the data from a USB stick to the cpu and back. If I use
an
> older 96 only usb dac on the same system it works (unless the down
> conversion isn't a direct divide, which overloads the CPU, but that is a
> different issue). The problem seems to be sample rate independent and hits
> the moment I try to access the file. This is using MPD as a player.

Ah, so your data file is stored on a media which is also connected to
USB? Did you connect the two devices to different USB ports or do they
share one uplink with a hub?

> What additional info do you need to troubleshoot this? Is it an intrinsic
> limitation to the interface? What additional tests should I do? It's
> possible it's a hardware issue but how do I divide them so I can go back
to
> the hardware guy if it's his issue? 

I'm not aware of any limitation, but there could be such issues as
exceeded bandwith on the bus and the like. How many audio channels are
we talking about?

You could measure the speed of your USB media by using something like
this:

	$ time dd if=/path/to/192khz.file of=/dev/null

This should take significantly less time than - let's say - half the
real-time audio playback time of the file, so there's enough headroom to
transport the audio data back to the USB DAC.

What kind of system is this, after all? Did you try other OS on the same
hardware for comparsion?


Daniel




More information about the Alsa-devel mailing list