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/