How to control when recording starts when using "input device = voicerecord"


Author
Message
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 99K
Musashi Jason - Thursday, June 7, 2018

Dave,

For some reason the upload did not work...is there an upload filesize limit? The script package is 2.1 MB...?

Jason

No, 2.1 MB should not be a problem (the archive you uploaded previously to this thread is larger). The problem description, specifically

> The first run through my trial produces the a. photo, b. two text items on screen, and c. audio file. There is a pause after the audio file is played
> but the spoken response is not recorded.

makes me think that some internal noise when initializing the microphone for the 1st time is mistaken as response, but I can't be sure. Perhaps try putting a simple check trial at the very beginning, i.e. before any of the critical trials, with /inputdevice = voicerecord or voicekey that takes any response. If the problem is related to the microphone's 1st time initialization, that should get rid of the problem for the "actual" trials.

As for presenting "mismatched" trials, I don't think there is any fundamental difference in setting those up compared to the "matched" trials, so I'm not sure what the specific question may be. Set up the <trial> and stimulus elements as needed for those trials, and you can use the /not attribute to prevent selection of identical item numbers in the respective stimulus elements if need be.

Generally, as for the audio files (WAVs), make sure they're saved as 16-bit PCM (not 32-bit) for them to work across platforms. If for some reason the file still fails to attach here, you can email it to support<at>millisecond.com instead.

Musashi Jason
Musashi Jason
Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)
Group: Forum Members
Posts: 61, Visits: 158
Dave - Thursday, June 7, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

For some reason the upload did not work...is there an upload filesize limit? The script package is 2.1 MB...?

Jason

No, 2.1 MB should not be a problem (the archive you uploaded previously to this thread is larger). The problem description, specifically

> The first run through my trial produces the a. photo, b. two text items on screen, and c. audio file. There is a pause after the audio file is played
> but the spoken response is not recorded.

makes me think that some internal noise when initializing the microphone for the 1st time is mistaken as response, but I can't be sure. Perhaps try putting a simple check trial at the very beginning, i.e. before any of the critical trials, with /inputdevice = voicerecord or voicekey that takes any response. If the problem is related to the microphone's 1st time initialization, that should get rid of the problem for the "actual" trials.

As for presenting "mismatched" trials, I don't think there is any fundamental difference in setting those up compared to the "matched" trials, so I'm not sure what the specific question may be. Set up the <trial> and stimulus elements as needed for those trials, and you can use the /not attribute to prevent selection of identical item numbers in the respective stimulus elements if need be.

Generally, as for the audio files (WAVs), make sure they're saved as 16-bit PCM (not 32-bit) for them to work across platforms. If for some reason the file still fails to attach here, you can email it to support<at>millisecond.com instead.

Dave,

Thanks, I managed to make a 'fake' trial that I put in my block prior to the 'read' voicerecord trial that serves to initialize the microphone. It seems to work well. I think I have it setup so it will not introduce errors elsewhere. My code is:

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false

with it in the block as follows:

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]

The result is unnoticable from the experiment side but it does seem to get the mic up and running so I don't observe the odd behavior on that first run through the trial. :-)

Before I attempt to get my negative prime part set up, I see that I have the correct answer setting (for the second trial) wrong but I'm not sure how to fix it. I have the following code for the second trial (which involves selecting the word heard using the keyboard).

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true

It works in the sense that the script runs without errors from the subjects' perspective but the value stored in correctresponse is not the value I want so I'm getting a

--> "Response property 'values.target' returned an invalid value 'Tree' etc. for each absolute value. 

I understand that I need to associate the key (a or " in my case) with the correct value but I'm confused about how to get to that point.

Any help you can provide will, as always, be very much appreciated.

Regards

Jason
Musashi Jason
Musashi Jason
Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)
Group: Forum Members
Posts: 61, Visits: 158
Musashi Jason - Thursday, June 7, 2018
Dave - Thursday, June 7, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

For some reason the upload did not work...is there an upload filesize limit? The script package is 2.1 MB...?

Jason

No, 2.1 MB should not be a problem (the archive you uploaded previously to this thread is larger). The problem description, specifically

> The first run through my trial produces the a. photo, b. two text items on screen, and c. audio file. There is a pause after the audio file is played
> but the spoken response is not recorded.

makes me think that some internal noise when initializing the microphone for the 1st time is mistaken as response, but I can't be sure. Perhaps try putting a simple check trial at the very beginning, i.e. before any of the critical trials, with /inputdevice = voicerecord or voicekey that takes any response. If the problem is related to the microphone's 1st time initialization, that should get rid of the problem for the "actual" trials.

As for presenting "mismatched" trials, I don't think there is any fundamental difference in setting those up compared to the "matched" trials, so I'm not sure what the specific question may be. Set up the <trial> and stimulus elements as needed for those trials, and you can use the /not attribute to prevent selection of identical item numbers in the respective stimulus elements if need be.

Generally, as for the audio files (WAVs), make sure they're saved as 16-bit PCM (not 32-bit) for them to work across platforms. If for some reason the file still fails to attach here, you can email it to support<at>millisecond.com instead.

Dave,

Thanks, I managed to make a 'fake' trial that I put in my block prior to the 'read' voicerecord trial that serves to initialize the microphone. It seems to work well. I think I have it setup so it will not introduce errors elsewhere. My code is:

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false

with it in the block as follows:

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]

The result is unnoticable from the experiment side but it does seem to get the mic up and running so I don't observe the odd behavior on that first run through the trial. :-)

Before I attempt to get my negative prime part set up, I see that I have the correct answer setting (for the second trial) wrong but I'm not sure how to fix it. I have the following code for the second trial (which involves selecting the word heard using the keyboard).

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true

It works in the sense that the script runs without errors from the subjects' perspective but the value stored in correctresponse is not the value I want so I'm getting a

--> "Response property 'values.target' returned an invalid value 'Tree' etc. for each absolute value. 

I understand that I need to associate the key (a or " in my case) with the correct value but I'm confused about how to get to that point.

Any help you can provide will, as always, be very much appreciated.

Regards

Jason

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 99K
Musashi Jason - Thursday, June 7, 2018

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>



What you need to do is set values.target to the keyboard scancode corresponding to the either the left or right key, and that will depend on _where_ text.correctoption is _positioned_, not on text.correctoption's current item. In other words, if text.correctoption is on the left in the given trial, values.target needs to be set to 30. If text.correctoption is on the right in the current trial, then values.target out to be set to 40.

I.e.

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = 30 else values.target = 40;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

with

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

...

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

As for the 2nd -- mismatched -- trial type, you need to set up separate stimulus elements. You cannot use the same ones that are already used by the 1st -- matched -- trial type.

Edited 6 Years Ago by Dave
Musashi Jason
Musashi Jason
Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)
Group: Forum Members
Posts: 61, Visits: 158
Dave - Friday, June 8, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>



What you need to do is set values.target to the keyboard scancode corresponding to the either the left or right key, and that will depend on _where_ text.correctoption is _positioned_, not on text.correctoption's current item. In other words, if text.correctoption is on the left in the given trial, values.target needs to be set to 30. If text.correctoption is on the right in the current trial, then values.target out to be set to 40.

I.e.

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = 30 else values.target = 40;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

with

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

...

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

As for the 2nd -- mismatched -- trial type, you need to set up separate stimulus elements. You cannot use the same ones that are already used by the 1st -- matched -- trial type.

Dave,

Thank you very much for the explanation. Just to clarify, the 30% corresponds to the left position, correct? And, so I can make sure I understand the syntax, double equal signs == is for comparison, correct? So I'm checking to see if correcth is 30 and if so I assign that to values.target and if not I assign 40 to values.target. :-)

Thanks again for your help. Hopefully I'll, sometime soon, be able to stand on my own. :-)

Regards

Jason 
Musashi Jason
Musashi Jason
Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)
Group: Forum Members
Posts: 61, Visits: 158
Musashi Jason - Tuesday, June 12, 2018
Dave - Friday, June 8, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>



What you need to do is set values.target to the keyboard scancode corresponding to the either the left or right key, and that will depend on _where_ text.correctoption is _positioned_, not on text.correctoption's current item. In other words, if text.correctoption is on the left in the given trial, values.target needs to be set to 30. If text.correctoption is on the right in the current trial, then values.target out to be set to 40.

I.e.

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = 30 else values.target = 40;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

with

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

...

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

As for the 2nd -- mismatched -- trial type, you need to set up separate stimulus elements. You cannot use the same ones that are already used by the 1st -- matched -- trial type.

Dave,

Thank you very much for the explanation. Just to clarify, the 30% corresponds to the left position, correct? And, so I can make sure I understand the syntax, double equal signs == is for comparison, correct? So I'm checking to see if correcth is 30 and if so I assign that to values.target and if not I assign 40 to values.target. :-)

Thanks again for your help. Hopefully I'll, sometime soon, be able to stand on my own. :-)

Regards

Jason 

Dave,

I guess I should have tested it thoroughly before posting my previous message. :-/ I had to 'initialize' the two new parameters as follows

<values>
/correcth = ""
/distractorh = ''
</values>

I guess it is appropriate to set them to null initially? That got rid of the "Expression contains and unknown element or property name." error message and the experiment now runs but...for some reason my text prompts (words such as "dog", "cat" etc.) now appear primarily off screen. I mean, I can see two letters of one word all the way over on the left side of the screen but that is it... The changes I've made have apparently corrupted the horizontal presentation position of the prompt...but I'm not sure how.

If you have any pointers I will be most appreciative. :-)

Regards

Jason
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 99K
Musashi Jason - Tuesday, June 12, 2018
Dave - Friday, June 8, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>



What you need to do is set values.target to the keyboard scancode corresponding to the either the left or right key, and that will depend on _where_ text.correctoption is _positioned_, not on text.correctoption's current item. In other words, if text.correctoption is on the left in the given trial, values.target needs to be set to 30. If text.correctoption is on the right in the current trial, then values.target out to be set to 40.

I.e.

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = 30 else values.target = 40;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

with

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

...

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

As for the 2nd -- mismatched -- trial type, you need to set up separate stimulus elements. You cannot use the same ones that are already used by the 1st -- matched -- trial type.

Dave,

Thank you very much for the explanation. Just to clarify, the 30% corresponds to the left position, correct? And, so I can make sure I understand the syntax, double equal signs == is for comparison, correct? So I'm checking to see if correcth is 30 and if so I assign that to values.target and if not I assign 40 to values.target. :-)

Thanks again for your help. Hopefully I'll, sometime soon, be able to stand on my own. :-)

Regards

Jason 

Yes, 30 is the keyboard scan code for the "A" key (on a standard English QWERTY keyboard). See Tools -> Keyboard Scancodes in the Inquisit Lab menu and/or the "Keyboard Scancodes" topic in the documentation: https://www.millisecond.com/support/docs/v5/html/language/scancodes.htm

In your script, you have that information in the <parameters> element, too,

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"

/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

so the actually more elegant -- arguably better -- way to program the <trial>s would be

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = parameters.responsekeyleft else values.target = parameters.responsekeyright;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

That way, if you decide to change the keys you want to use in the <parameters> element, no changes to the <trial> are necessary.

As for operators, you are correct:

"==" is a logical comparison operator (equality), i.e. what you use in situations where you want to know if a statement is true or false.

4 == 4 -> true
3 == 5 -> false

"=" on the other hand is the assignment operator, i.e. what you use to assign a value to a variable.

The various operators are covered in the "Operators" topic: https://www.millisecond.com/support/docs/v5/html/language/expressions/operators.htm

Hope this helps!

Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 99K
Dave - Tuesday, June 12, 2018
Musashi Jason - Tuesday, June 12, 2018
Dave - Friday, June 8, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>



What you need to do is set values.target to the keyboard scancode corresponding to the either the left or right key, and that will depend on _where_ text.correctoption is _positioned_, not on text.correctoption's current item. In other words, if text.correctoption is on the left in the given trial, values.target needs to be set to 30. If text.correctoption is on the right in the current trial, then values.target out to be set to 40.

I.e.

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = 30 else values.target = 40;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

with

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

...

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

As for the 2nd -- mismatched -- trial type, you need to set up separate stimulus elements. You cannot use the same ones that are already used by the 1st -- matched -- trial type.

Dave,

Thank you very much for the explanation. Just to clarify, the 30% corresponds to the left position, correct? And, so I can make sure I understand the syntax, double equal signs == is for comparison, correct? So I'm checking to see if correcth is 30 and if so I assign that to values.target and if not I assign 40 to values.target. :-)

Thanks again for your help. Hopefully I'll, sometime soon, be able to stand on my own. :-)

Regards

Jason 

Yes, 30 is the keyboard scan code for the "A" key (on a standard English QWERTY keyboard). See Tools -> Keyboard Scancodes in the Inquisit Lab menu and/or the "Keyboard Scancodes" topic in the documentation: https://www.millisecond.com/support/docs/v5/html/language/scancodes.htm

In your script, you have that information in the <parameters> element, too,

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"

/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

so the actually more elegant -- arguably better -- way to program the <trial>s would be

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = parameters.responsekeyleft else values.target = parameters.responsekeyright;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

That way, if you decide to change the keys you want to use in the <parameters> element, no changes to the <trial> are necessary.

As for operators, you are correct:

"==" is a logical comparison operator (equality), i.e. what you use in situations where you want to know if a statement is true or false.

4 == 4 -> true
3 == 5 -> false

"=" on the other hand is the assignment operator, i.e. what you use to assign a value to a variable.

The various operators are covered in the "Operators" topic: https://www.millisecond.com/support/docs/v5/html/language/expressions/operators.htm

Hope this helps!

<values>
/correcth = ""
/distractorh = ''
</values>

You can initialize them like so, or you can do

<values>
/correcth = 0%
/distractorh = 0%
</values>

It is important, however, that you you have the code in the <trial> correct, too:

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = parameters.responsekeyleft else values.target = parameters.responsekeyright;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

The highlighted bit you wiil also need in <tral firsttrial> for the _entire_ script to work properly, not just <trial secondtrial>:

<trial firsttrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>
Musashi Jason
Musashi Jason
Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)Distinguished Member (4K reputation)
Group: Forum Members
Posts: 61, Visits: 158
Dave - Tuesday, June 12, 2018
Dave - Tuesday, June 12, 2018
Musashi Jason - Tuesday, June 12, 2018
Dave - Friday, June 8, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>



What you need to do is set values.target to the keyboard scancode corresponding to the either the left or right key, and that will depend on _where_ text.correctoption is _positioned_, not on text.correctoption's current item. In other words, if text.correctoption is on the left in the given trial, values.target needs to be set to 30. If text.correctoption is on the right in the current trial, then values.target out to be set to 40.

I.e.

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = 30 else values.target = 40;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

with

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

...

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

As for the 2nd -- mismatched -- trial type, you need to set up separate stimulus elements. You cannot use the same ones that are already used by the 1st -- matched -- trial type.

Dave,

Thank you very much for the explanation. Just to clarify, the 30% corresponds to the left position, correct? And, so I can make sure I understand the syntax, double equal signs == is for comparison, correct? So I'm checking to see if correcth is 30 and if so I assign that to values.target and if not I assign 40 to values.target. :-)

Thanks again for your help. Hopefully I'll, sometime soon, be able to stand on my own. :-)

Regards

Jason 

Yes, 30 is the keyboard scan code for the "A" key (on a standard English QWERTY keyboard). See Tools -> Keyboard Scancodes in the Inquisit Lab menu and/or the "Keyboard Scancodes" topic in the documentation: https://www.millisecond.com/support/docs/v5/html/language/scancodes.htm

In your script, you have that information in the <parameters> element, too,

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"

/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

so the actually more elegant -- arguably better -- way to program the <trial>s would be

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = parameters.responsekeyleft else values.target = parameters.responsekeyright;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

That way, if you decide to change the keys you want to use in the <parameters> element, no changes to the <trial> are necessary.

As for operators, you are correct:

"==" is a logical comparison operator (equality), i.e. what you use in situations where you want to know if a statement is true or false.

4 == 4 -> true
3 == 5 -> false

"=" on the other hand is the assignment operator, i.e. what you use to assign a value to a variable.

The various operators are covered in the "Operators" topic: https://www.millisecond.com/support/docs/v5/html/language/expressions/operators.htm

Hope this helps!

<values>
/correcth = ""
/distractorh = ''
</values>

You can initialize them like so, or you can do

<values>
/correcth = 0%
/distractorh = 0%
</values>

It is important, however, that you you have the code in the <trial> correct, too:

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = parameters.responsekeyleft else values.target = parameters.responsekeyright;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

The highlighted bit you wiil also need in <tral firsttrial> for the _entire_ script to work properly, not just <trial secondtrial>:

<trial firsttrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

Dave,

Thanks again. I've made those changes but now am having a different positioning problem. I get one of my prompts (apple, for example) on the screen but cannot see the other one at all. I ran through the entire experiement and can note that the correct option is usally not appearing....but on some runs through the trial two options appear on top of each other. It seems the changes I've made have somehow made the followoing part of the script function differently:

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always

This is what I had adjusted, quite some time back, to get the prompts positioned as desired. 


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 99K
Musashi Jason - Tuesday, June 12, 2018
Dave - Tuesday, June 12, 2018
Dave - Tuesday, June 12, 2018
Musashi Jason - Tuesday, June 12, 2018
Dave - Friday, June 8, 2018
Musashi Jason - Thursday, June 7, 2018

Dave,

I'm thinking you may not be able to easily see the overall flow of my experiment from the above snippets so I'm pasting the entire thing here. Hopefully, this will make it clearer. Also, in addition to getting the correct response recognized in trial2, I want to next add two trials with negative primes (incongruent photo and audio file match) but don't quite understand how to accomplish that with /not attribute...

I continue to be extremely appreciative of your assistance.

Jason

**************************************************************************************************************
**************************************************************************************************************
DEFAULTS
**************************************************************************************************************
**************************************************************************************************************
script requires Inquisit 5.0.0.0 or higher

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"
/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

<defaults>
/ screencolor = white
/ voicekeythreshold = 15
/ minimumversion = "5.0.0.0"
/ fontstyle = ("Arial", 3.5%, false, false, false, false, 5, 1)
</defaults>

<item instructions>

/1 = "This is a timed selection task. GO AS FAST AS YOU CAN but try not to make mistakes.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Repeat the word you hear outloud immediately after you hear the word."

/2 = "For the second part of this test, use the A and ' keys to select the correct option.

A series of asterisks, like the following, ******** will be displayed on the screen followed by a quick flash.

You will then see two words.

After the two words appear, you will hear a word.

Use the A (on the left side of the keyboard) and ' (on the right side of the keyboard) to select the correct option that appears on the left or right of the screen."

</item>

***************************VALUES**********************
<values>
/selectContinue = 1
/target = ""
</values>
***************************VALUES*********************

<item continue>
/1 = "Press the SPACE BAR to begin"
</item>

<picture mypicture>
/ items = pictureitems
</picture>

<item pictureitems>
/ 1 = "dog.jpg"
/ 2 = "cat.jpg"
/ 3 = "apple.jpg"
/ 4 = "house.jpg"
/ 5 = "ball.jpg"
/ 6 = "banana.jpg"
/ 7 = "boat.jpg"
/ 8 = "snail.jpg"
/ 9 = "tree.jpg"
/10 = "boat.jpg"
</item>

<sound mysound>
/ items = sounditems
/ select = picture.mypicture.currentindex
/ erase = false
</sound>

<item sounditems>
/ 1 = "dog.wav"
/ 2 = "cat.wav"
/ 3 = "apple.wav"
/ 4 = "house.wav"
/ 5 = "ball.wav"
/ 6 = "banana.wav"
/ 7 = "boat.wav"
/ 8 = "snail.wav"
/ 9 = "tree.wav"
/ 10 = "car.wav"
</item>

<text correctoption>
/ items = correctitems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item correctitems>
/ 1 = "Dog"
/ 2 = "Cat"
/ 3 = "Apple"
/ 4 = "House"
/ 5 = "Ball"
/ 6 = "Banana"
/ 7 = "Boat"
/ 8 = "Snail"
/ 9 = "Tree"
/ 10 = "Car"
</item>

<text distractoroption>
/ items = distractoritems
/ select = picture.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = list.hpos.nextvalue
</text>

<item distractoritems>
/ 1 = "Cat"
/ 2 = "Dog"
/ 3 = "House"
/ 4 = "Apple"
/ 5 = "Banana"
/ 6 = "Ball"
/ 7 = "Snail"
/ 8 = "Boat"
/ 9 = "Car"
/ 10 = "Tree"
</item>

<item mask>
/1="*******
*******"
</item>

<text mask>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = black
/txbgcolor = white
/position = (50%, 50%)
</text>

<text maskeraser>
/items = mask
/select = 1
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ txcolor = white
/txbgcolor = white
/position = (50%, 50%)
</text>

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always
</list>

<text instructions>
/ items = item.instructions
/ hjustify = center
/ size = (90%, 60%)
/ position = (50%, 85%)
/ valign = bottom
/ txcolor = black
/ select = sequence
/ resetinterval = 20
</text>

<text spacebar>
/ items = continue
/ select = values.selectContinue
/ position = (50%, 95%)
/ valign = bottom
</text>

<trial firstinstructions>
/ stimulustimes = [1=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial secondinstructions>
/ stimulustimes = [2=instructions, spacebar]
/ correctresponse = (" ")
/ errormessage = false
/ recorddata = false
</trial>

<trial micset>
/ validresponse = (anyresponse)
/ inputdevice = voicerecord
/ errormessage = false
/ recorddata = false
</trial>

<trial firsttrial>
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

<trial secondtrial>
/ ontrialbegin = [
values.target = text.correctoption.currentitem;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

<block myblock>
/ trials = [1 = firstinstructions; 2 = micset; 3-12 = firsttrial; 13 = secondinstructions; 14-23 = secondtrial;]
</block>



What you need to do is set values.target to the keyboard scancode corresponding to the either the left or right key, and that will depend on _where_ text.correctoption is _positioned_, not on text.correctoption's current item. In other words, if text.correctoption is on the left in the given trial, values.target needs to be set to 30. If text.correctoption is on the right in the current trial, then values.target out to be set to 40.

I.e.

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = 30 else values.target = 40;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

with

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

...

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

As for the 2nd -- mismatched -- trial type, you need to set up separate stimulus elements. You cannot use the same ones that are already used by the 1st -- matched -- trial type.

Dave,

Thank you very much for the explanation. Just to clarify, the 30% corresponds to the left position, correct? And, so I can make sure I understand the syntax, double equal signs == is for comparison, correct? So I'm checking to see if correcth is 30 and if so I assign that to values.target and if not I assign 40 to values.target. :-)

Thanks again for your help. Hopefully I'll, sometime soon, be able to stand on my own. :-)

Regards

Jason 

Yes, 30 is the keyboard scan code for the "A" key (on a standard English QWERTY keyboard). See Tools -> Keyboard Scancodes in the Inquisit Lab menu and/or the "Keyboard Scancodes" topic in the documentation: https://www.millisecond.com/support/docs/v5/html/language/scancodes.htm

In your script, you have that information in the <parameters> element, too,

<parameters>
/fontheight = 10%

/responsekeyleft = 30
/responsekeyleft_label = "A"

/responsekeyright = 40
/responsekeyright_label = "'"
</parameters>

so the actually more elegant -- arguably better -- way to program the <trial>s would be

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = parameters.responsekeyleft else values.target = parameters.responsekeyright;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

That way, if you decide to change the keys you want to use in the <parameters> element, no changes to the <trial> are necessary.

As for operators, you are correct:

"==" is a logical comparison operator (equality), i.e. what you use in situations where you want to know if a statement is true or false.

4 == 4 -> true
3 == 5 -> false

"=" on the other hand is the assignment operator, i.e. what you use to assign a value to a variable.

The various operators are covered in the "Operators" topic: https://www.millisecond.com/support/docs/v5/html/language/expressions/operators.htm

Hope this helps!

<values>
/correcth = ""
/distractorh = ''
</values>

You can initialize them like so, or you can do

<values>
/correcth = 0%
/distractorh = 0%
</values>

It is important, however, that you you have the code in the <trial> correct, too:

<trial secondtrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
/ ontrialbegin = [
    if (values.correcth == 30%) values.target = parameters.responsekeyleft else values.target = parameters.responsekeyright;
]
/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ inputdevice = keyboard
/ validresponse = (parameters.responsekeyleft, parameters.responsekeyright)
/ correctresponse = (values.target)
/ recorddata = true
</trial>

The highlighted bit you wiil also need in <tral firsttrial> for the _entire_ script to work properly, not just <trial secondtrial>:

<trial firsttrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]

/ stimulustimes = [0= mask; 500=mypicture; 515=clearscreen; 516=mask; 1015=clearscreen; 1700=correctoption, distractoroption; 2200=mysound]
/ validresponse = (anyresponse)
/ beginresponsetime = 2000
/ inputdevice = voicerecord
/ responseinterrupt = frames
/ trialduration = 6000
/ recorddata = true
</trial>

Dave,

Thanks again. I've made those changes but now am having a different positioning problem. I get one of my prompts (apple, for example) on the screen but cannot see the other one at all. I ran through the entire experiement and can note that the correct option is usally not appearing....but on some runs through the trial two options appear on top of each other. It seems the changes I've made have somehow made the followoing part of the script function differently:

// randomize the left-right position of the two response options
<list hpos>
/ items = (30%, 70%)
/ selectionrate = always

This is what I had adjusted, quite some time back, to get the prompts positioned as desired. 


Check the /hposition attributes in

<text correctoption>
/ items = correctitems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.correcth
</text>

and

<text distractoroption>
/ items = distractoritems
/ select = text.mypicture.currentindex
/ vposition = 50%
/ fontstyle = ("Courier", parameters.fontheight, false, false, false, false, 5, 1)
/ hposition = values.distractorh
</text>

Make sure they're referencing the correct values. Also make sure the <list> is still set to selectionrate = always, and that you have the /ontrialbegin logic I explained in my previous reply correct and present in the <trial> elements.

<trial firsttrial>
/ ontrialbegin = [
    values.correcth = list.hpos.nextvalue;
    values.distractorh = list.hpos.nextvalue;
]
...
</trial>

GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search