【发布时间】:2016-12-06 01:34:57
【问题描述】:
我想制作一个脚本,仅当参与者从声音文件中听到 2/30 的声音时,才能测量参与者按 Enter 键或空格键的速度。 所以有时用户不需要按任何东西,脚本仍然会转到下一个声音文件。我该怎么做呢?我现在拥有的是:(而不是声音文件,我有文本 atm。):
# Grounding of Words Experiment #
#Import libraries
import re
import glob
from psychopy import sound, visual, event, data, core, gui # imports a module for visual presentation and one for controlling events like key presses
# ID, age, gender box display
myDlg = gui.Dlg(title="Experiment") #, pos=(400,400)
myDlg.addField('ID:')
myDlg.addField('Age:')
myDlg.addField('Gender:', choices = ['Female', 'Male'])
myDlg.show()#you have to call show() for a Dlg
if myDlg.OK:
ID = myDlg.data[0]
Age = myDlg.data[1]
Gender = myDlg.data[2]
else:
core.quit()
trial=0
#Creates the outfile, that will be the file containing our data, the name of the file, as saved on the computer is the filename
out_file="Grounding_experiment_results.csv"
#Creates the header for the data
header="trial,ID,Gender,Age,Word,rt,SpaceKlik\n"
#opens the outfile in writemode
with open(out_file,"w") as f:
f.write(header)#writes the header in the outfile
# define window
win = visual.Window(fullscr=True) # defines a window using default values (= gray screen, fullscr=False, etc)
# Instruction box display
def instruct(txt):
instructions = visual.TextStim(win, text=txt, height = 0.05) # create an instruction text
instructions.draw() # draw the text stimulus in a "hidden screen" so that it is ready to be presented
win.flip() # flip the screen to reveal the stimulus
event.waitKeys() # wait for any key press
instruct('''
Welcome to the experiment!
You will be hearing different words.
Whenever you hear the word "Klik" and "Kast" please press the left mouse button.
Whenever you hear any other word - do nothing.
Try to be as fast and accurate as possible.
Please put on the headphones.
The experiment will take 5 minutes.
Press any key to start the experiment''')
# Play sound
# Function that makes up a trial
trial(word):
global trial
trial += 1
if word in ["Klik", "Press", "Throw"]:
condition = "press"
else :
condition = "no_press"
event.clearEvents()
for frame in range(90):
text = visual.TextStim(win, text=word, height = 0.05)
text.draw() # draw the text stimulus in a "hidden screen" so that it is ready to be presented
time_start=win.flip()
try:
key, time_key=event.getKeys(keyList=['space', 'escape'], timeStamped = True)[0] # wait for any key press
except IndexError:
key = "0"
rt = "NA"
else:
if key=='escape':
core.quit()
rt = time_key - time_start
if key == "space" and condition=="press":
accuracy = 1
elif key == "0" and condition=="no_press":
accuracy = 1
else:
accuracy = 0
with open(out_file,"a") as f:
f.write("{},{},{},{},{},{},{},{}\n".format(trial,ID,Gender,Age,word,accuracy,rt,SpaceKlik))
# s = sound.Sound('sound.wav')
# s.play()
# Register space bar press or mouse click
# Measure reaction time
# Check to see if answer is correct to sound - certain sound files are "klik". Others "kast", "løb", "sko" and so on
# Write csv logfile with coloumns: "ID", "Gender", "Word", "Correct/incorrect", "Reaction time", "Space/click"
我最终都会在 PsychoPy 中运行。预先感谢您的友好帮助。
【问题讨论】:
-
作为一般提示,请避免将
trial作为全局变量。只需在trial()函数之外递增它并将其作为第二个参数传递给函数。同样,不要在每次运行指令函数时创建文本刺激(这是一个耗时的操作)。创建一次,并将文本刺激与新的文本内容一起传递给函数。这是您的试验功能中的一个更大的问题,其中文本刺激在每一帧上都重新实例化。这是非常省时的,可能会导致时间问题。
标签: python loops audio measure psychopy