Я хочу создать сценарий, который измеряет, как быстро участник должен нажимать клавишу ввода или пробел, только когда они слышат звуки 2/30 из звуковых файлов. Поэтому несколько раз пользователю не нужно ничего нажимать, и сценарий все равно переходит к следующему звуковому файлу. Как мне это сделать? То, что я сейчас это: (вместо звуковых файлов, у меня есть текст атм.):Сценарий Python не работает ?: Воспроизведение звука, измерение времени реакции
# 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()' и передайте его в качестве второго параметра функции. Точно так же не создавайте текстовый стимул каждый раз, когда вы запускаете функцию инструкции (это дорогостоящая операция). Создайте его один раз и передайте текстовый стимул функции вместе с новым содержимым текста. Это гораздо более серьезная проблема в вашей пробной функции, где текстовый стимул повторно создается на каждом кадре. Это очень неэффективно и может вызвать проблемы с синхронизацией. –