[PD] PD latency and timing accuracy with HID

Hans-Christoph Steiner hans at eds.org
Fri Jul 21 05:48:01 CEST 2006


Very interesting, I'd love to see more info, like the numbers and the  
patch you used to run these tests.  Its a good start.

.hc

On Jul 19, 2006, at 10:35 AM, rubber glove wrote:

> I managed to run some tests on the HID timing.
>
> The contestants were:
> -regular HID object in OS X
> -regular HID object in OS X with blocksize=64
> -dissected HID object in OS X
>    (i basically tore the read functions out of the hid code, and  
> put them in my own object, which was recording the values. I did a  
> messy, quick job of it, but...)
> -ctlin midi object in os x
> -regular HID object in Linux
>
> the winner, with < 4 ms of timing error was:
>
> linux... I was short on time in the lab (getting the eMac machines  
> booting off the livecd took a bit of time), so I wasn't able to try  
> out different latency settings, or try the midi controller in linux.
>
> the others were all approximately the same, at around or just above  
> a 10 ms spread in timing offsets (I don't have the numbers in front  
> of me.... but One interesting thing is the standard deviation. it  
> seems like mostly the timing error is very close to a mean value,  
> then periodically, there will be a value that is way off, which  
> throws off the average. I haven't made enough measurements to see  
> if there is some sort of periodicity to those 'way off' readings,  
> maybe due to some process switching/memory management by the kernel?)
>
> the smaller blocksize did slightly better than the default setting,  
> the dissected object did slightly better than that...
> so I would hazard the guess that the delays due to control message  
> passing are not a huge contribution.
>
> and for some reason, the midi object did even worse than the hid  
> object. not at all sure why that is, but it could have to do with  
> the midi devices I was using - who knows.
>
> One thing I realize I should have done is try pd in os x as  
> superuser, as this may give the process a higher priority? I ran  
> sudo pd in linux to have access to the hid devices...
>
> I'm not sure how much more experimentation I will be doing on this,  
> as they are pretty satisfied with < 5 ms error and probably won't  
> pay me to just play around with their expensive timing test  
> equipment....
>
>
> -martin
>
> On 7/5/06, Hans-Christoph Steiner <hans at eds.org> wrote:
>
> On Jul 4, 2006, at 10:08 AM, rubber glove wrote:
>
>>
>> The main factor seems to be that pd only processes control  
>> messages in
>> between audio frames. Reducing the audio latency seems to bring the
>> jitter down to about 5ms but no further when I try it on WinXP or  
>> Linux.
>>
>> Aha... that makes sense to me. So it is not so much just the  
>> 'hardware to pd' step, but also the control message passing within  
>> PD that is throwing off the timing here.
>>
>>
>> I would expect USB to add more jitter, as it passes through a more
>> complex path than serial or MIDI data before being handed to pd.
>>
>> I think I am basically stuck with USB no matter how I go, as the  
>> computers involved here are all eMacs. Using midi or serial would  
>> involve a USB interface anyway.
>>
>>
>> If you need better timing, why not record the audio into one channel
>> along with the button on the other channel? There is essentially no
>> jitter with the audio stream because it passes through the sound
>> hardware at a fixed rate. The button could just emit a click when
>> pressed. Then you have no jitter beyond the time it takes to push the
>> button.
>>
>> That's an interesting possibility, but I am only really using the  
>> button clicking as a simple way to test the timing. In actual use,  
>> the input would be a range of values from the rotary encoder of  
>> the knob... converting that into audio and back into numerical  
>> values seems altogether too complicated (frequency modulation?)
>>
>> However, it brings to mind other possibilities:
>>
>> If I modify the HID object to convert it into a signal-based  
>> external, then pass the values as signals, the timing should be  
>> much tighter? This seems to have the advantage that the input  
>> values will always be automatically lined up with the audio, no  
>> matter what the latency is set to.
>>
>> Alternatively, If I incorporate the HID code into my external, and  
>> process the knob events myself, I would avoid any additional  
>> timing errors and be left with only the jitter inherent to the  
>> device, no?
>>
>> Thanks much for the info...
>
> I would also like to see the [hid] code be as low jitter as  
> possible.  I haven't had a chance to measure it yet tho.  Unless  
> things are really taxing the CPU, I don't think that the Pd  
> messaging will cause more than ~1.5ms of jitter (1 block of 64  
> samples divided by 44100 samples).  Perhaps running Pd at 96KHz or  
> 192KHz would reduce that jitter, provided that the block size  
> remains 64.
>
> I think that the first step is to devise some tests to find the  
> true source of the jitter.  I did some quick searches about USB HID  
> jitter and didn't find much, except this:
>
> http://elists.resynthesize.com/max-msp/2005/08/1515529/
>
> It seems that this person thinks that Mac OS X's USB MIDI driver  
> has lower jitter than the USB HID driver.  Ultimately, if we find  
> the source of the problem, I would like to include it in the next  
> version of [hid].
>
> .hc
>
>
> ---------------------------------------------------------------------- 
> --
>
> Using ReBirth is like trying to play an 808 with a long stick.    - 
> David Zicarelli
>
>
>


------------------------------------------------------------------------

If you are not part of the solution, you are part of the  
problem.        - Eldridge Cleaver


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20060720/15f752f9/attachment.htm>


More information about the Pd-list mailing list