Source code for pyscab.StimulationController

import time
from logging import getLogger
logger = getLogger('pyscab.'+__name__)

[docs]def get_required_time(plans, data): end_times = list() for plan in plans: end_time = data.get_length_by_id(plan[1]) end_time += plan[0] end_times.append(end_time) return max(end_times)
[docs]class StimulationController(object): def __init__(self, AudioHardwareController, marker_send, time_tick = 0.0001): self.ahc = AudioHardwareController self.time_tick = time_tick self.running = False self.marker_send = marker_send logger.debug("time_tick for Stimulation Controller was set to %s", str(self.time_tick))
[docs] def play(self, plans, data, time_termination = 'auto', pause=0.5): # pause : pause after playing all sounds in plans. # initialize del_idxs = list() if time_termination is None: # TODO : prep two functions for main_loop with and w/o termination with time # to avoid verbosed conditional branch in loop time_termination = float('inf') elif time_termination.lower() == 'auto': time_termination = get_required_time(plans, data) logger.debug("session time was set to %s." ,str(time_termination)) self.running = True self.ahc.open() logger.debug("Audio Hardware Controller Opening.") # requires time to be opened. with out this line, time_info won't be get # TO DO : get the state of instance from pyaudio and wait until it's opened instead of waiting with sleep time.sleep(1) start = self.ahc.get_time_info()['current_time'] while self.running is True: now = self.ahc.get_time_info()['current_time'] - start for idx, plan in enumerate(plans): if now > plan[0]: self.ahc.play(data.get_data_by_id(plan[1]),plan[2]) self.marker_send(val=plan[3]) del_idxs.append(int(idx)) logger.debug("Playing, id:%s, ch:%s, marker:%s, path:%s",str(plan[1]),str(plan[2]),str(plan[3]),data.get_path_by_id(plan[1])) for del_idx in del_idxs: del plans[del_idx] del_idxs=list() time.sleep(self.time_tick) if now > time_termination: self.running = False time.sleep(pause) self.ahc.close() logger.debug("Audio Hardware Controller Closing.")