My experiment hasn’t been ending properly. Once finished, the green Run button is greyed out until I hit Stop. After configuring all of my libraries properly and installing the 1.84.01 (see here for my previous issues), I am still having problems. I have, however, narrowed it down.
I mostly built my experiment from the builder, but added a few things in the coder. Here is the block that is giving me trouble:
# ------Prepare to start Routine "Q"------- t = 0 QClock.reset() # clock frameN = -1 continueRoutine = True # update component parameters for each repeat current_question.setText(question) go_on_Q = event.BuilderKeyResponse() wavName = wavDirName+'/'+expInfo['participant']+'.'+expInfo['episode']+expInfo['condition']+'_'+str(Qnum)+'.wav' record = microphone.AdvAudioCapture(name='record', filename=wavName, stereo=False) # keep track of which components have finished QComponents = [current_question, go_on_Q, t_text, record] for thisComponent in QComponents: if hasattr(thisComponent, 'status'): thisComponent.status = NOT_STARTED # -------Start Routine "Q"------- while continueRoutine: # get current time t = QClock.getTime() frameN = frameN + 1 # number of completed frames (so 0 is the first frame) # update/draw components on each frame # *current_question* updates if t >= 0.0 and current_question.status == NOT_STARTED: # keep track of start time/frame for later current_question.tStart = t current_question.frameNStart = frameN # exact frame index current_question.setAutoDraw(True) # *go_on_Q* updates if t >= 0.0 and go_on_Q.status == NOT_STARTED: # keep track of start time/frame for later go_on_Q.tStart = t go_on_Q.frameNStart = frameN # exact frame index go_on_Q.status = STARTED # keyboard checking is just starting win.callOnFlip(go_on_Q.clock.reset) # t=0 on next screen flip event.clearEvents(eventType='keyboard') if go_on_Q.status == STARTED: theseKeys = event.getKeys(keyList=['space']) # check for quit: if "escape" in theseKeys: endExpNow = True if len(theseKeys) > 0: # at least one key was pressed go_on_Q.keys = theseKeys[-1] # just the last key pressed go_on_Q.rt = go_on_Q.clock.getTime() # a response ends the routine continueRoutine = False # *t_text* updates if t >= 0.0 and t_text.status == NOT_STARTED: # keep track of start time/frame for later t_text.tStart = t t_text.frameNStart = frameN # exact frame index t_text.setAutoDraw(True) # *record* updates if t >= 0.0 and record.status == NOT_STARTED: # keep track of start time/frame for later record.tStart = t record.frameNStart = frameN # exact frame index record.status = STARTED record.record(sec=100, block=False) # start the recording thread if record.status == STARTED and not record.recorder.running: record.status = FINISHED # check if all components have finished if not continueRoutine: # a component has requested a forced-end of Routine break continueRoutine = False # will revert to True if at least one component still running for thisComponent in QComponents: if hasattr(thisComponent, "status") and thisComponent.status != FINISHED: continueRoutine = True break # at least one component has not yet finished # check for quit (the Esc key) if endExpNow or event.getKeys(keyList=["escape"]): core.quit() # refresh the screen if continueRoutine: # don't flip if this routine is over or we'll get a blank screen win.flip() # -------Ending Routine "Q"------- for thisComponent in QComponents: if hasattr(thisComponent, "setAutoDraw"): thisComponent.setAutoDraw(False) # check responses if go_on_Q.keys in ['', , None]: # No response was made go_on_Q.keys=None questions.addData('go_on_Q.keys',go_on_Q.keys) if go_on_Q.keys != None: # we had a response questions.addData('go_on_Q.rt', go_on_Q.rt) # record stop & responses record.stop() # sometimes helpful Qnum = int(Qnum) + 1 if not record.savedFile: record.savedFile = None # store data for questions (TrialHandler) questions.addData('record.filename', record.savedFile) # the Routine "Q" was not non-slip safe, so reset the non-slip timer routineTimer.reset() # completed 1 repeats of 'questions'
Once the experiment is over, it does not properly close out. I have narrow it down to this line:
record.record(sec=100, block=False) # start the recording thread
The experiment doesn’t end because it appears to be waiting for the duration to finish. For example, if I change
sec=1, the experiment ends very quickly. However, I thought that if you call
record.stop() then it would end the recording early. I am recording verbal response to questions here and the answers vary in durations, thus I choose
sec=100 as a long duration knowing that I could end it early.
Any idea why this isn’t ending properly? I have also attached my full presentation script as well.
TRW_comp.py (33.9 KB)