[wdmaudiodev] Re: Capture latency with USB card

  • From: "Pierre Brisson" <pbrisson@xxxxxxxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Thu, 26 Jun 2003 10:05:17 -0400

Hi everybody,

It would be useful to publish the timing specifications of the APIs.
Although the applications are indeed wildcards, the driver stack has
built-in restrictions.

There is also another problem with the USB capture. Although the audio is
handled in separate high priority threads, the capture is sensitive to the
message loop of the application. It you move the application window while
capturing, the delays increase tremendously, up to hundreds of ms. 
This behavior is specific to USB audio cards and is not observed with PCI
cards.

Pierre




-----Original Message-----
From: RonKuper@xxxxxxxxxxxx [mailto:RonKuper@xxxxxxxxxxxx]
Sent: June 25, 2003 3:27 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Capture latency with USB card


Hi DJ,

Please change this behavior in the future.  Professional audio applications
routinely need to stream at well below 10 msec latency, in order to monitor
input on output (through effects), as well as render soft-synths with
adequate musical feel.  It's great that we can talk IOCTLs to the driver to
get below 30 msec, but it's a drag that for a broad (and increasing popular)
class of audio devices, there is yet another bottleneck.

----------
Ron Kuper
VP of Engineering
Cakewalk
http://www.cakewalk.com


-----Original Message-----
From: DJ Sisolak [mailto:dsisolak@xxxxxxxxxxxxxxxxxxxxxx] 
Sent: Wednesday, June 25, 2003 2:22 PM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Capture latency with USB card


Hello Michael,

As you point out, the devices and the applications themselves are wildcards
in determining the latency. For example, submitting data buffers greater
than 10 ms will increase the latency due to the need to wait for a second 10
ms request to complete. Submitting buffers less than 10 ms may have similar
affects if that value is not evenly divisible into 10 though to a lesser
degree. (For example, if you submit a 7 ms sized data buffer it will be
filled by the first URB submitted by the driver, but the second would have
to wait for the second to complete at 20 ms). It should be stable across a
single record pass given these constraints. The latency through the driver
itself is not published. I will try to make these calculations and report
them to you.

Thanks,
DJ Sisolak
Microsoft Corp.

This posting is provided "AS IS" with no warranties, and confers no rights.

-----Original Message-----
From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Michael Webster
Sent: Wednesday, June 25, 2003 11:16 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Capture latency with USB card

Hi DJ,

You mention that we can expect AT LEAST 10mS of latency with the USB audio
driver. Obviously the devices and applications that are using the driver
will have varied latency, but is there a variability in the latency of the
driver itself?  If so, can we at least count on it being stable for a single
record pass?  Is the latency through the driver published anywhere, or can
it be calculated?

Thanks,

Michael
-----Original Message-----
From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx]On Behalf Of DJ Sisolak
Sent: Wednesday, June 25, 2003 10:47 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Capture latency with USB card


Hello Pierre et al,

In the USB Audio driver as it exists in XP you can expect at least a latency
of 10 ms by design plus whatever time it takes to do the data copy to the
submitted buffers. There are several factors which cause this. 10
milliseconds of data are gathered by the USB Audio driver in a single URB
request. When capturing from USB there is no guarantee that the device will
completely fill the submitted data buffer for the packet. The URB indicates
the amount of data filled in. Thus it is necessary to copy that data from
the request to the data buffer submitted by the application instead of
filling that buffer directly. It was not an option not to compact the data
this way since applications like sndrec32 depended on the data being
supplied this way.

Granted the choice of 10 milliseconds per request was based on making the
math for the driver easier and decreasing IRP overhead. It could likely be
trimmed down in future versions, but that is how it works now.

DJ Sisolak
Microsoft Corp.

This posting is provided "AS IS" with no warranties, and confers no rights.

-----Original Message-----
From: wdmaudiodev-bounce@xxxxxxxxxxxxx
[mailto:wdmaudiodev-bounce@xxxxxxxxxxxxx] On Behalf Of Andrew Sherbrooke
Sent: Wednesday, June 25, 2003 10:23 AM
To: wdmaudiodev@xxxxxxxxxxxxx
Subject: [wdmaudiodev] Re: Capture latency with USB card

Hi Pierre,

>With a USB audio device though, the minimum stable delay I can get is 
>around 20-25 ms. The cause of the problem seems to be the instability 
>of the capture
side.
>I measure the time
>between capture events and I get delays up to 20ms on USB where it
should
>be 5ms.
>
>I am using Microsoft USB audio driver (latest version) and I heard that 
>it can achieve better performance. Did anybody experienced such 
>problems with USB audio?
>
I had similar experiences. The events I was waiting on were being signaled
at such uneven intervals that my latency was fairly unusable - it would tick
along regularly for a while (every few ms, corresponding to my buffer size),
then I'd suddenly get a delay which was greater by at least a factor of 10.
Although this problem seemed to be more significant when I added capture, I
don't recall verifying that it was explicitly because of the capture side,
as opposed to a result of running capture and render together...

Sincerely,

Andrew Sherbrooke
Art & Logic
Lead Engineer, Audio/Media Development
asher@xxxxxxxxxxxx
www.artlogic.com


******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/



******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/
******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

Other related posts: