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

J. Gordon Rankin waudio at cinti.net
Mon Aug 23 14:41:23 CEST 2010


Demian,

USB Hubs can come in several forms especially USB 2.0 hubs. There are 
load leveling and store and forward hubs that can mask the underlying 
problem.

I would suggest direct connection. BUT!!!!! We have found that some 
front panel USB ports which either travel the length of the PCB or are 
wire attached sometimes do not retain their correct impedance and run 
into problems, especially with hard drives and such which have error 
corrected protocols. Some front panel USB ports will actually force the 
USB device into Full instead of High Speed because of this problem.

Presently the player is underruning data from the USB stick. Also not 
all sticks are the same. I bought a 128GB unit for a show to store music 
on and it's slower than any other unit I have available. You should make 
sure you try many variations of these to assure success.

Thanks
Gordon

Demian Martin wrote:
> 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
>
>
>
>
>   

-- 
J. Gordon Rankin
Owner and Chief Scientist
====== Wavelength Audio, ltd ======
High-End Audio since 1981
SET Tube Amplifiers, DACS & Preamps
http://www.WavelengthAudio.com
===================================
Computer USB DACS
http://www.USBDacs.com
===================================
SET Tube Guitar Amplifiers
NAMM Member since 1998
http://www.Guitar-Engines.com
===================================
3703 Petoskey Avenue
Cincinnati, Ohio 45227 USA
mailto:waudio at cinti.net
mailto:wavelength at fuse.net
(513) 271-4186 phone/voicemail



More information about the Alsa-devel mailing list