| Reference | Downloads | Github

Include stimuli unique to individual participants

OS (e.g. Win10): Big Sur
PsychoPy version (e.g. 1.84.x): 2021.2.2

What are you trying to achieve?:
Dear all,
I have set up an experiment in which I play a bunch of sounds to participants (10 sounds per trial x 5 blocks) and they make a binary choice concerning what they heard. This works just fine, I’ve got nested loops around my trial routine (outer loop with a conditions file that includes the keys for condition files for the inner loop).

My problem is that I would also like to include two additional sounds in each trial that are unique to each participant (should be able to use participantID from expinfo, right?) but I don’t know how to do this.

I am new to psychopy and would greatly appreciate some input!

Please let me know if I need to provide more info.
Many thanks!

If it’s one sound per participant, you could use a Code :code: component to define a dict with all the sound files in like so:

soundsDict = {
1: "path/to/sound1.wav",
2: "path/to/sound2.wav",

and then set the Sound :sound: component to Update Every Repeat and be soundsDict[expInfo['participantID']]

The only condition would be that the participant ID in the experiment info dialog would have to be one of the keys from soundsDict

Thank you so much for your reply!
It is two additional and unique sounds per participant, per block - but I suppose I could use a list in the dictionary?
There are 5 blocks, let’s call them A B C D and E. In each block, 10 sounds (1A, 2A, 3A…10A) + another 2 sounds unique to each participant that I would like to include. I think your suggestion would work if I included the paths to (1A, 2A, 3A…10A) and the unique sounds in each list?

Would one have to create a dictionary for each block? The conditions file in the outermost loop only includes the names of the conditions file for the inner loop (trials within block).

Would I add the code component in the Begin Experiment tab?
Thank you again :slight_smile:

I think you could also add a code component at the beginning of one of your first routines in which you create the sound names relative to each participant like

my_sound_A =  _thisDir + os.sep + 'subject' + expInfo['participant'] + '_A' + .wav
my_sound_B =  _thisDir + os.sep + 'subject' + expInfo['participant'] + '_B' + .wav

This means you do have to have wav files named subject1_A.wav, subject1_B.wav, subject2_A.wav, and so on.

Then for each block you can read your spreadsheet, add your customized sounds, and rewrite it

my_file = open(my_spreadsheet_blockA)
my_stim_list = my_file.readlines()

filename_to_write = _thisDir + os.sep + 'blockA_customized.csv'
with open(filename_to_write,'w') as out:

And in the loop of each block you enter block?_customized.csv as your condition file.
Might not be the most elegant way but I would try something like that.