Hi everybody.

I am trying to use python and pygame to run a simple psychological experiment.
So from a gamer's perspective: a very boring game with only one level ;)

The main problem is the exact timing since I want to communicate with other
devices (here: a MAC recording EEG) and need a reliably time stamp to track back
events for later analysis.

I was trying a bit around with the display modes and worked out that FULLSCREEN|
DOUBLEBUF| HWSURFACE should do what I want (negelcting for the moment that I
cannot use the mouse with this mode). I checked and verified that these features
are supported by the system. 
I want pygame to synchronize the presentation of a certain stimulus with the
vertical refresh of the monitor, which is what flip() should do in this mode,
right? Right after the flip() command I ask for the current time of the program
using pygame.time.get_ticks().

The code looks something like this:

def waituntil(start_time, time2wait):
    t_desired = start_time + time2wait
    while True:
        t = pygame.time.get_ticks()
        if t >= t_desired:
            break
        else:
            t = pygame.time.get_ticks()
    return t-start_time

t2wait = 18 
timesTICKS=[]
for i in range(100):
   targimage = pygame.image.load(o1)
   screen.blit(targimage,[ width/2, height/2])
   trialtime = pygame.time.get_ticks()
   waituntil(trialtime, t2wait)
   pygame.display.flip()
   timesTICKS.append(int(pygame.time.get_ticks()))

The 18 ms are a bit longer than 16.66 ms which is time of one frame (the refresh
rate of my monitor is 60Hz). So if I get it right pygame.flip() should wait for
the next refresh and the present the stimulus. Since I ask for the time right
afterwards, the temporal distance from one call to the next should be something
like 33, 33, 33, etc. 
But what I get is somthing like this:
51, 47, 32, 51, 20, 23, 54, 28, 40, 18, 41, 18, 18, 72, 32, 37,...

I understand the longer times, since the pictures are taken from the HD, but the
"18"s, "20"s, etc. I do not understand. How is this possible?

What I really want is the time WHEN pygame REALLY presented something on screen
which can then be used for later analyses.

Does anybody have an idea how to do this?

Andre


Reply via email to