def main(): print "#"*31 print "### Welcome to MindMixer ###" print "####### Version 0.1beta #######" print """Have a look at the sourcecode! Change stuff to suit your needs! The program will hopefully be self explaining. Hafe fun!""" print "#"*31 selftests() global N while 1: print "(Hint: while training, you can hit SPACE to abort)" print "Hit '"+KEYLEFT+"' if the",str(N)+". previous image is identical to the one shown" print "Hit '"+KEYRIGHT+"' if the",str(N)+". previous sound is identical to the one heard" while 1: print "Ready to train with N=%i?" %(N), if ask(): break else: print "Do you wish to train with N set to a different value? Choosing 'No' exits the program.", if ask(): n = int(raw_input("Ok, enter the desired value here: ")) while n < 1: print "N must be 1 or higher!" n = int(raw_input("Enter a value higher than 1: ")) N = n else: print "bye" sys.exit(1) display.init() display.set_mode(RESOLUTION, FULLSCREEN) font.init() mixer.init(44100) event.set_grab(True) mouse.set_visible(False) trials = gentrials() for trial in trials: if not trial.runtrial(): break display.quit() vis = 0.0 acu = 0.0 for trial in trials: if trial.result[0]: vis+=1 if trial.result[1]: acu+=1 vp = (vis/(MINTRIALS+N))*100 ap = (acu/(MINTRIALS+N))*100 message = "percentage in visual modality:%i\npercentage in acoustic modality:%i\n" %(int(vp),int(ap)) print message if vp >= UPPERTH and ap >= UPPERTH: N+=1 elif (vp < LOWERTH or ap < LOWERTH) and N > 1: N-=1
def log(audio_elements, log_file_path, audio_file, start_pos=0, resume=False): # Helper functions def advance(to, pos, prev_pos): # Actually do the logging # Get our position in the audio file and the current audio_element (a.k.a. the div in the TEI file) audio_element = audio_elements[to] # Tell us what's going on print "logged at time:", pos, "count:", count print "\t", audio_elements[to + 1]["text"], "(file", audio_elements[to + 1]["file_name"], ")" # TEI XML files can have unicode, don'tchaknow # The values of text_audio_element are being put into the correct order text_audio_element = map( unicode, [audio_element["id"], audio_element["text"], audio_element["file_name"], audio_element["count"]] ) # Convert to tab-separated tabbed_audio_element = string.join(text_audio_element, "\t") # Remove line breaks no_line_breaks = tabbed_audio_element.replace("\n", " ") # And write it to the file log.write(str(prev_pos) + "\t" + str(pos) + "\t" + no_line_breaks + "\n") return # Print a warning message to the log file # This contains four words so that the make_ functions don't throw a wobbly # when trying to parse a logfile with error messages def warn(warning_message=["DANGER,", "WILL", "ROBINSON,", "DANGER!"]): # Pretty much as in advance() # Audacity format requires seconds rather than miliseconds pos = mixer.music.get_pos() / 1000 log.write(str(pos) + "\t" + str(pos) + "\t" + string.join(warning_message, "\t") + "\n") print warning_string, pos return count = 0 log = codecs.open(log_file_path, "w", "utf-8") paused = False prev_pos = 0 pos = 0 # Initialise pygame pygame.init() screen = pygame.display.set_mode((100, 100)) mixer.music.load(audio_file) mixer.music.play(0, start_pos) mixer.init() event.set_grab(True) # Print some startup info print "lumberjack: starting to log" print "Press space to log the end of the section displayed on the screen" print "Press q to quit" print "Press p to pause" print "Press any other key to log a warning to file, along with the current timestamp\n" # Print some info about the first audio_element print "\t", audio_elements[0]["text"], "(", audio_elements[0], ")" # Main logging loop while True: if not key.get_focused(): mixer.music.pause() while not key.get_focused(): time.wait(100) print "Waiting" mixer.music.unpause() else: keydown = [e for e in event.get() if event.type == KEYDOWN] for e in keydown: if e.key == K_SPACE: prev_pos = pos pos = mixer.music.get_pos() advance(count, pos, prev_pos) count = count + 1 elif e.key == K_q: return elif e.key == K_p: if not paused: mixer.music.pause() else: mixer.music.unpause() # paused = !paused paused = not paused else: warn()
def run_modal(self, modal_widget): global last_mouse_event, last_mouse_event_handler global top_widget, clicked_widget global timer_event global next_frame_due is_modal = modal_widget is not None modal_widget = modal_widget or self relative_pause = False relative_warmup = 0 try: old_top_widget = top_widget top_widget = modal_widget was_modal = modal_widget.is_modal modal_widget.is_modal = True modal_widget.modal_result = None if not modal_widget.focus_switch: modal_widget.tab_to_first() mouse_widget = None #if clicked_widget: # clicked_widget = modal_widget num_clicks = 0 last_click_time = 0 self.do_draw = True use_sleep = self._use_sleep while modal_widget.modal_result is None: #print "RootWidget: frame_time =", self.frame_time ### defer_drawing = self.frame_time <> 0.0 and modal_widget.defer_drawing( ) try: if not is_modal: if timer_event: if not use_sleep and defer_drawing: make_scheduled_calls() add_modifiers(timer_event) if last_mouse_event: timer_event.dict['pos'] = last_mouse_event.pos timer_event.dict[ 'local'] = last_mouse_event.local if last_mouse_event_handler: last_mouse_event_handler.setup_cursor( timer_event) self.do_draw = self.timer_event(timer_event) timer_event = None else: if defer_drawing: #print "RootWidget: Clearing do_draw because of defer_drawing" ### self.do_draw = False #print "RootWidget: do_draw =", self.do_draw ### if self.do_draw: if self.is_gl: #self.gl_clear() #self.gl_draw_all(self, (0, 0)) #GL.glFlush() gl_surface = self.gl_surface gl_surface.gl_clear(self.bg_color) self.gl_draw_all(gl_surface) gl_surface.gl_flush() else: self.draw_all(self.surface) self.do_draw = False #tb1 = timestamp() ### pygame.display.flip() #tb2 = timestamp() ### #print "RootWidget: Flip block %5d" % (tb2 - tb1) ### in_relative_mode = bool(modal_widget.relative_mode()) grab = in_relative_mode and not relative_pause if grab <> get_grab(): set_grab(grab) set_mouse_visible(not grab) relative_warmup = 3 # Ignore spurious deltas on entering relative mode #tb1 = timestamp() ### #print "RootWidget: use_sleep =", use_sleep, "defer_drawing =", defer_drawing ### if use_sleep and defer_drawing: #print "RootWidget: Handling timing" ### time_now = timestamp() #print "RootWidget: Time is now", time_now ### if next_frame_due < time_now: #print "RootWidget: Adjusting next frame due time to time now" ### next_frame_due = time_now #print "RootWidget: Waiting for next frame due at", next_frame_due ### while 1: sleep_time = make_due_calls( time_now, next_frame_due) if sleep_time <= 0.0: break #print "RootWidget: Sleeping for", sleep_time ### sleep(sleep_time / 1000.0) time_now = timestamp() next_frame_due += self.frame_time #print "RootWidget: Next frame now due at", next_frame_due ### timer_event = Event(USEREVENT, time=time_now) events = [] else: events = [pygame.event.wait()] #tb2 = timestamp() ### #tb = tb2 - tb1 ### #if tb: ### # print "RootWidget: Event block %5d" % tb ### events.extend(pygame.event.get()) for event in events: t = timestamp() event.dict['time'] = t event.dict['local'] = getattr(event, 'pos', (0, 0)) type = event.type if type == QUIT: self.quit() elif type == MOUSEBUTTONDOWN: #print "RootWidget: MOUSEBUTTONDOWN: setting do_draw" ### self.do_draw = True if t - last_click_time <= double_click_time: num_clicks += 1 else: num_clicks = 1 last_click_time = t event.dict['num_clicks'] = num_clicks add_modifiers(event) last_mouse_event = event if in_relative_mode: event.dict['local'] = (0, 0) if relative_pause: relative_pause = False else: #modal_widget.dispatch_key('mouse_down', event) mouse_widget = modal_widget.get_focus() clicked_widget = mouse_widget last_mouse_event_handler = mouse_widget mouse_widget.handle_event( 'mouse_down', event) else: mouse_widget = self.find_widget(event.pos) if not mouse_widget.is_inside(modal_widget): mouse_widget = modal_widget clicked_widget = mouse_widget last_mouse_event_handler = mouse_widget mouse_widget.notify_attention_loss() mouse_widget.handle_mouse('mouse_down', event) elif type == MOUSEMOTION: add_modifiers(event) last_mouse_event = event if in_relative_mode: event.dict['local'] = (0, 0) if not relative_pause: if relative_warmup: relative_warmup -= 1 else: #modal_widget.dispatch_key('mouse_delta', event) mouse_widget = clicked_widget or modal_widget.get_focus( ) last_mouse_event_handler = mouse_widget mouse_widget.handle_event( 'mouse_delta', event) else: mouse_widget = self.find_widget( event.pos) # Do this in else branch? if clicked_widget: last_mouse_event_handler = mouse_widget # Should this be clicked_widget? clicked_widget.handle_mouse( 'mouse_drag', event) else: if not mouse_widget.is_inside( modal_widget): mouse_widget = modal_widget last_mouse_event_handler = mouse_widget mouse_widget.handle_mouse( 'mouse_move', event) elif type == MOUSEBUTTONUP: add_modifiers(event) last_mouse_event = event self.do_draw = True if in_relative_mode: event.dict['local'] = (0, 0) if not relative_pause: #modal_widget.dispatch_key('mouse_up', event) if clicked_widget: mouse_widget = clicked_widget clicked_widget = None else: mouse_widget = modal_widget.get_focus() last_mouse_event_handler = mouse_widget mouse_widget.handle_event( 'mouse_up', event) else: mouse_widget = self.find_widget( event.pos) # Not necessary? if clicked_widget: last_mouse_event_handler = clicked_widget clicked_widget = None last_mouse_event_handler.handle_mouse( 'mouse_up', event) elif type == KEYDOWN: key = event.key if key == K_ESCAPE and in_relative_mode and \ event.mod & KMOD_CTRL and event.mod & KMOD_SHIFT: relative_pause = True elif relative_pause: relative_pause = False else: set_modifier(key, True) self.do_draw = True self.send_key(modal_widget, 'key_down', event) if last_mouse_event_handler: event.dict['pos'] = last_mouse_event.pos event.dict[ 'local'] = last_mouse_event.local last_mouse_event_handler.setup_cursor( event) elif type == KEYUP: key = event.key set_modifier(key, False) self.do_draw = True self.send_key(modal_widget, 'key_up', event) if last_mouse_event_handler: event.dict['pos'] = last_mouse_event.pos event.dict['local'] = last_mouse_event.local last_mouse_event_handler.setup_cursor(event) elif type == MUSIC_END_EVENT: self.music_end() elif type == USEREVENT: if defer_drawing and not use_sleep: timer_event = event except Cancel: pass finally: modal_widget.is_modal = was_modal top_widget = old_top_widget clicked_widget = None
def run_modal(self, modal_widget: Widget): """ Runs a modal event loop. The widget is run as a modal dialog until its dismiss() method is called. Args: modal_widget: The modal widget """ is_modal = modal_widget is not None modal_widget = modal_widget or self relative_pause = False relative_warmup = 0 was_modal = None try: RootWidget.old_top_widget = RootWidget.top_widget RootWidget.top_widget = modal_widget was_modal = modal_widget.is_modal modal_widget.is_modal = True modal_widget.modal_result = None if not modal_widget.focus_switch: modal_widget.tab_to_first() self.do_draw = True use_sleep = self._use_sleep from albow.core.ui.AlbowEventLoop import AlbowEventLoop from albow.core.ui.EventLoopParams import EventLoopParams eventLoop: AlbowEventLoop = AlbowEventLoop( modalWidget=modal_widget, containingWidget=self) last_click_time = 0 num_clicks = 0 while modal_widget.modal_result is None: defer_drawing = self.frame_time != 0.0 and modal_widget.defer_drawing( ) try: if not is_modal: if RootWidget.ourTimerEvent: if not use_sleep and defer_drawing: Scheduler.make_scheduled_calls() CoreUtilities.add_modifiers( RootWidget.ourTimerEvent) if RootWidget.last_mouse_event: RootWidget.ourTimerEvent.dict[ 'pos'] = RootWidget.last_mouse_event.pos RootWidget.ourTimerEvent.dict[ 'local'] = RootWidget.last_mouse_event.local if RootWidget.last_mouse_event_handler: RootWidget.last_mouse_event_handler.setup_cursor( RootWidget.ourTimerEvent) self.do_draw = self.timer_event( RootWidget.ourTimerEvent) RootWidget.ourTimerEvent = None else: if defer_drawing: self.do_draw = False # RootWidget.classLogger.info(f"self.do_draw: {self.do_draw}") if self.do_draw: if self.is_gl: gl_surface = self.gl_surface gl_surface.gl_clear(self.bg_color) self.gl_draw_all(gl_surface) gl_surface.gl_flush() else: self.draw_all(self.surface) self.do_draw = False # tb1 = timestamp() ### pygame.display.flip() in_relative_mode = bool(modal_widget.relative_mode()) grab = in_relative_mode and not relative_pause if grab != get_grab(): set_grab(grab) set_mouse_visible(not grab) relative_warmup = 3 # Ignore spurious deltas on entering relative mode if use_sleep and defer_drawing: time_now = Scheduler.timestamp() if RootWidget.nextFrameDue < time_now: RootWidget.nextFrameDue = time_now while True: sleep_time = Scheduler.make_due_calls( time_now, RootWidget.nextFrameDue) if sleep_time <= 0.0: break sleep(sleep_time / 1000.0) time_now = Scheduler.timestamp() RootWidget.nextFrameDue += self.frame_time RootWidget.ourTimerEvent = Event( USEREVENT, {'time': time_now}) events = [] else: events = [pygame.event.wait()] events.extend(pygame.event.get()) loopParams: EventLoopParams = EventLoopParams( use_sleep=use_sleep, relative_pause=relative_pause, do_draw=self.do_draw, relative_warmup=relative_warmup, last_click_time=last_click_time, num_clicks=num_clicks) newParams: EventLoopParams = eventLoop.processEvents( eventList=events, relativeMode=in_relative_mode, deferDrawing=defer_drawing, eventLoopParams=loopParams) use_sleep = newParams.use_sleep relative_pause = newParams.relative_pause self.do_draw = newParams.do_draw relative_warmup = newParams.relative_warmup last_click_time = newParams.last_click_time num_clicks = newParams.num_clicks except CancelException: pass except ApplicationException as e: self.report_error(e) finally: modal_widget.is_modal = was_modal RootWidget.top_widget = RootWidget.old_top_widget RootWidget.clicked_widget = None
def onButtonDown(self, event): if not get_grab(): set_grab(True) self.cursor.buttonDown(event.button)
def onButtonUp(self, event): if get_grab(): set_grab(False) self._synch() self.cursor.buttonUp(event.button)
def run_modal(self, modal_widget): global last_mouse_event, last_mouse_event_handler global top_widget, clicked_widget global timer_event global next_frame_due is_modal = modal_widget is not None modal_widget = modal_widget or self relative_pause = False relative_warmup = 0 try: old_top_widget = top_widget top_widget = modal_widget was_modal = modal_widget.is_modal modal_widget.is_modal = True modal_widget.modal_result = None if not modal_widget.focus_switch: modal_widget.tab_to_first() mouse_widget = None #if clicked_widget: # clicked_widget = modal_widget num_clicks = 0 last_click_time = 0 self.do_draw = True use_sleep = self._use_sleep while modal_widget.modal_result is None: #print "RootWidget: frame_time =", self.frame_time ### defer_drawing = self.frame_time <> 0.0 and modal_widget.defer_drawing() try: if not is_modal: if timer_event: if not use_sleep and defer_drawing: make_scheduled_calls() add_modifiers(timer_event) if last_mouse_event: timer_event.dict['pos'] = last_mouse_event.pos timer_event.dict['local'] = last_mouse_event.local if last_mouse_event_handler: last_mouse_event_handler.setup_cursor(timer_event) self.do_draw = self.timer_event(timer_event) timer_event = None else: if defer_drawing: #print "RootWidget: Clearing do_draw because of defer_drawing" ### self.do_draw = False #print "RootWidget: do_draw =", self.do_draw ### if self.do_draw: if self.is_gl: #self.gl_clear() #self.gl_draw_all(self, (0, 0)) #GL.glFlush() gl_surface = self.gl_surface gl_surface.gl_clear(self.bg_color) self.gl_draw_all(gl_surface) gl_surface.gl_flush() else: self.draw_all(self.surface) self.do_draw = False #tb1 = timestamp() ### pygame.display.flip() #tb2 = timestamp() ### #print "RootWidget: Flip block %5d" % (tb2 - tb1) ### in_relative_mode = bool(modal_widget.relative_mode()) grab = in_relative_mode and not relative_pause if grab <> get_grab(): set_grab(grab) set_mouse_visible(not grab) relative_warmup = 3 # Ignore spurious deltas on entering relative mode #tb1 = timestamp() ### #print "RootWidget: use_sleep =", use_sleep, "defer_drawing =", defer_drawing ### if use_sleep and defer_drawing: #print "RootWidget: Handling timing" ### time_now = timestamp() #print "RootWidget: Time is now", time_now ### if next_frame_due < time_now: #print "RootWidget: Adjusting next frame due time to time now" ### next_frame_due = time_now #print "RootWidget: Waiting for next frame due at", next_frame_due ### while 1: sleep_time = make_due_calls(time_now, next_frame_due) if sleep_time <= 0.0: break #print "RootWidget: Sleeping for", sleep_time ### sleep(sleep_time / 1000.0) time_now = timestamp() next_frame_due += self.frame_time #print "RootWidget: Next frame now due at", next_frame_due ### timer_event = Event(USEREVENT, time = time_now) events = [] else: events = [pygame.event.wait()] #tb2 = timestamp() ### #tb = tb2 - tb1 ### #if tb: ### # print "RootWidget: Event block %5d" % tb ### events.extend(pygame.event.get()) for event in events: t = timestamp() event.dict['time'] = t event.dict['local'] = getattr(event, 'pos', (0, 0)) type = event.type if type == QUIT: self.quit() elif type == MOUSEBUTTONDOWN: #print "RootWidget: MOUSEBUTTONDOWN: setting do_draw" ### self.do_draw = True if t - last_click_time <= double_click_time: num_clicks += 1 else: num_clicks = 1 last_click_time = t event.dict['num_clicks'] = num_clicks add_modifiers(event) last_mouse_event = event if in_relative_mode: event.dict['local'] = (0, 0) if relative_pause: relative_pause = False else: #modal_widget.dispatch_key('mouse_down', event) mouse_widget = modal_widget.get_focus() clicked_widget = mouse_widget last_mouse_event_handler = mouse_widget mouse_widget.handle_event('mouse_down', event) else: mouse_widget = self.find_widget(event.pos) if not mouse_widget.is_inside(modal_widget): mouse_widget = modal_widget clicked_widget = mouse_widget last_mouse_event_handler = mouse_widget mouse_widget.notify_attention_loss() mouse_widget.handle_mouse('mouse_down', event) elif type == MOUSEMOTION: add_modifiers(event) last_mouse_event = event if in_relative_mode: event.dict['local'] = (0, 0) if not relative_pause: if relative_warmup: relative_warmup -= 1 else: #modal_widget.dispatch_key('mouse_delta', event) mouse_widget = clicked_widget or modal_widget.get_focus() last_mouse_event_handler = mouse_widget mouse_widget.handle_event('mouse_delta', event) else: mouse_widget = self.find_widget(event.pos) # Do this in else branch? if clicked_widget: last_mouse_event_handler = mouse_widget # Should this be clicked_widget? clicked_widget.handle_mouse('mouse_drag', event) else: if not mouse_widget.is_inside(modal_widget): mouse_widget = modal_widget last_mouse_event_handler = mouse_widget mouse_widget.handle_mouse('mouse_move', event) elif type == MOUSEBUTTONUP: add_modifiers(event) last_mouse_event = event self.do_draw = True if in_relative_mode: event.dict['local'] = (0, 0) if not relative_pause: #modal_widget.dispatch_key('mouse_up', event) if clicked_widget: mouse_widget = clicked_widget clicked_widget = None else: mouse_widget = modal_widget.get_focus() last_mouse_event_handler = mouse_widget mouse_widget.handle_event('mouse_up', event) else: mouse_widget = self.find_widget(event.pos) # Not necessary? if clicked_widget: last_mouse_event_handler = clicked_widget clicked_widget = None last_mouse_event_handler.handle_mouse('mouse_up', event) elif type == KEYDOWN: key = event.key if key == K_ESCAPE and in_relative_mode and \ event.mod & KMOD_CTRL and event.mod & KMOD_SHIFT: relative_pause = True elif relative_pause: relative_pause = False else: set_modifier(key, True) self.do_draw = True self.send_key(modal_widget, 'key_down', event) if last_mouse_event_handler: event.dict['pos'] = last_mouse_event.pos event.dict['local'] = last_mouse_event.local last_mouse_event_handler.setup_cursor(event) elif type == KEYUP: key = event.key set_modifier(key, False) self.do_draw = True self.send_key(modal_widget, 'key_up', event) if last_mouse_event_handler: event.dict['pos'] = last_mouse_event.pos event.dict['local'] = last_mouse_event.local last_mouse_event_handler.setup_cursor(event) elif type == MUSIC_END_EVENT: self.music_end() elif type == USEREVENT: if defer_drawing and not use_sleep: timer_event = event except Cancel: pass finally: modal_widget.is_modal = was_modal top_widget = old_top_widget clicked_widget = None