1

考虑这个补丁(下面的代码,在pd-extended_0.43.4-1Ubuntu 11.04 上测试):

test_slider_timer.png

我基本上只是拖动滑块,想看看 [hsl] 滑块发出的两个连续值之间的时间差是多少。[trigger] 帮助 ( Triggering_messages_with_trigger) 指出:“从 [trigger] 的出口发送的消息发生在零时间,事件之间没有延迟...... ”。因此,abang首先进入[timer]的右入口,输出“经过的逻辑时间”,然后abang进入[timer]的左入口,重置定时器。我用 [pack] 收集经过的时间和滑块值,然后 [打印] 这些值。如屏幕截图所示,问题是我得到这样的值:

...
print: 10.1587 0.462312
print: 43.5374 0.396985
print: 0 0.341709
print: 0 0.306533
print: 0 0.276382
print: 23.22 0.271357
...

这告诉我滑块在 0 毫秒内从 0.396985 更改为 0.341709,这应该是不可能的:我必须经过一段时间才能移动鼠标(这将触发操作系统和纯数据中所需的处理程序)为了为滑块设置一个新值?!

那么,为什么会发生这种情况?是预期的吗?- 并且是否有一个 Pd 对象(或外部)可以让我在用鼠标拖动期间准确测量 [hsl] 滑块的两个连续输出值之间经过的时间(在所有测量的经过时间应该大于零的意义上是准确的)?


编辑:刚刚找到[realtime],它类似于[timer](并且可以在此补丁中用作替代品),但输出浮点值;所以我不再得到纯零 - 但是,我得到这样的打印:

...
print: 0.029 0.361809 
print: 0.025 0.366834 
print: 47.714 0.376884 
print: 0.022 0.386935 
print: 14.988 0.39196 
print: 36.526 0.396985 
print: 40.294 0.40201 
...

...这仍然有点不切实际:例如滑块在 25 微秒内从 0.361809 变为 0.366834(约 0.005);然后在 47 毫秒内从 0.366834 变为 0.376884(大约为 0.01,是之前的两倍) - 比之前的时间间隔长 1880 倍!所以我不确定这是否准确,要么......


编码:

#N canvas 160 223 312 218 10;
#X obj 47 19 hsl 200 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 10500 0;
#X floatatom 98 48 12 0 0 0 - - -;
#X obj 44 88 timer;
#X floatatom 92 122 12 0 0 0 - - -;
#X obj 44 62 t b b;
#X obj 44 173 print;
#X obj 44 152 pack f f;
#X connect 0 0 1 0;
#X connect 0 0 4 0;
#X connect 0 0 6 1;
#X connect 2 0 3 0;
#X connect 2 0 6 0;
#X connect 4 0 2 0;
#X connect 4 1 2 1;
#X connect 6 0 5 0;
4

1 回答 1

1

you are staring into the depths of Pd's scheduler: messages are worked through in bursts, between DSP-processing. so even if the GUI would send data continuosly (e.g. every 2 ms), Pd (core) will still process either within one tick (very short after each other) or in two sequential ticks (with a larger time span).

apart from that: never ever do a fan-out (connect a single outlet to multiple inlets), like shown at the output of the [hsl]: it's undefined behaviour. always use [trigger]

[hsl]
|
[t   b   b    f]
|        |     |
[realtime]     |
|              |
[pack    0    0]
|
[print]
于 2015-01-23T00:27:35.553 回答