From dolores888 at hotmail.com Mon Jun 4 20:10:47 2007 From: dolores888 at hotmail.com (dolores ma) Date: Mon, 4 Jun 2007 22:10:47 +0200 Subject: Sending the response code for an experiment with neuroscan In-Reply-To: <81882.19068@mail.talkbank.org> Message-ID: Hi, We have been working on how to send the response code (1/2, which are pressed on the computer keyboard) to be writen in the EEG file. However, since we have some script, when we record the response in the EEG file, at the time of its occurrence, a problem appears: the sound file stops and also its window of 2000 ms (i.e., the word is not listened any more and the response window is shorten). How could we keep listening the audio file meantime in the background the script for sending the response code is being sent? thank you Dolores _________________________________________________________________ Un amor, una aventura, compañía para un viaje. Regístrate gratis en MSN Amor & Amistad. http://match.msn.es/match/mt.cfm?pg=channel&tcid=162349 From michael.crowley at yale.edu Tue Jun 12 17:11:24 2007 From: michael.crowley at yale.edu (Michael Crowley) Date: Tue, 12 Jun 2007 13:11:24 -0400 Subject: 64-bit XP for data collection? In-Reply-To: <0JC20NXO5LCH8V@email.med.yale.edu> Message-ID: Dear List, In the eprime archive there was a post on Fri, 21 Oct 2005 from an Eprime rep said that: Only experiment design and testing should be attempted on Windows XP 64-bit edition at this point. E-Prime 1.2 is scheduled to address installation issues on Windows XP 64, but issues regarding timing, use of SRBOX and Port devices will remain outstanding until reviewed. Until that time, it is not recommended that Windows XP 64 be used for data collection. Does anyone know any progress has been made with Windows XP 64 for data collection? (I see the eprime web says not approved yet) Thank you for any info you can provide. Mike Crowley From bianca.de-haan at klinikum.uni-tuebingen.de Fri Jun 15 14:22:19 2007 From: bianca.de-haan at klinikum.uni-tuebingen.de (B de Haan) Date: Fri, 15 Jun 2007 16:22:19 +0200 Subject: trigger TMS + collect responses during stimulus presentation In-Reply-To: Message-ID: Dear E-prime list, I've been racking my brain over this problem longer than I care to think about, so I hope someone can help me figure this out. I want to present a targetstimulus (mainstimulus) followed by a maskstimulus (mainmask2). Depending on the targetstimulus duration (titrated in a previous block) an x amount of TMS pulses occur during presentation of the targetstimulus (first pulse synchronized with stimulus onset) and the remaining TMS pulses occur during presentation of the maskstimulus. Furthermore, during presentation of the maskstimulus, I would also like to be able to collect 2 button presses. Mostly, I've managed to get it all to work (see code at the end of this email). I have put the ImageDisplays of both the targetstimulus and the mainstimulus under unreferenced objects with a duration of 0, time limit infinite and end action none. The stimuli are presented correctly and the tms pulses are fired during stimulus presentation) However, there are 2 problems I can't seem to solve. Firstly, the timing seems to be way off. The most critical timing is the timing of the targetstimulus and the TMS pulses. I have applied all the tricks in the Timing-chapter of the E-Prime manual. Furthermore, I have run the RefreshClockTest which shows that my computer is theoretically capable of achieving millisecond precision. Finally, I calculate the exact Refresh duration at the start of the experiment (using part of the code of the RefreshClockTest experiment) and specify all my timings in multiples of the calculated refresh duration (8.333ms at 120Hz monitor) with half a refresh duration subtracted to make sure events happen on the exact vertical refresh. Still, I don't achieve anything near good timing, especially for the TMS pulses. Secondly, during presentation of the maskstimulus it does not register all button presses. Sometimes a button press is detected, sometimes it's not. I've had a look at monitoring responses using Inputmasks, but have not been able to get this to work at all (mainmask2.Inputmasks.(Responses?).RT <> 0 cannot be compiled). If anyone can provide me with any tips or tricks as to how to solve these 2 problems, they will earn my eternal gratitude. Many thanks, Bianca de Haan Excerpt of code follows: ################################################################ 'create pulsecount to make sure each pulse is only fired once PulseCount = 1 do 'start loop that will display mainstimulus till stimdisplayduration has elapsed dim i1 as integer 'start loop counter 'draw mainstimulus for infinite duration, terminated by StimDisplayDuration mainstimulus.Filename = c.GetAttrib("mainstimulus") mainstimulus.Load mainstimulus.Run c.SetAttrib "mainstimulus.OnsetDelay", mainstimulus.OnsetDelay c.SetAttrib "mainstimulus.OnsetTime", mainstimulus.OnsetTime c.SetAttrib "mainstimulus.PreRelease", mainstimulus.PreRelease c.SetAttrib "mainstimulus.StartTime", mainstimulus.StartTime c.SetAttrib "mainstimulus.TimingMode", mainstimulus.TimingMode c.SetAttrib "mainstimulus.CustomOnsetTime", mainstimulus.CustomOnsetTime c.SetAttrib "mainstimulus.TargetOnsetTime", mainstimulus.TargetOnsetTime 'onsettime will only be collected in first loop and first tms pulse synched with stimulus onset if i1 = 0 then MainStimOnset = mainstimulus.OnsetTime mainstimulus.OnsetSignalEnabled = True 'send pulse at stimulus onset mainstimulus.OnsetSignalPort = &H378 mainstimulus.OnsetSignalData = &HFF 'write time that the pulse was really sent PulseTime = clock.read() c.SetAttrib "PulseTime1", PulseTime 'switch port off again to enable second pulse writeport &H378, 0 PulseCount = PulseCount + 1 end if i1 = i1 + 1 'end loop when stimulus duration has elapsed loop until clock.read() > MainStimOnset + StimDisplayDuration 'create respcount to count the responses RespCount = 0 'create place to log the 2 responses dim resp1 as Integer dim resp2 as Integer do 'start loop that runs mainmask2 until 2 responses are collected while firing remaining tms pulses mainmask2.InputMasks.Reset mainmask2EchoClients.RemoveAll mainmask2.InputMasks.Add Keyboard.CreateInputMask("{ANY}", "", CLng("-1"), CLng("2"), ebEndResponseActionNone, CLogical("Yes"), "", "", "ResponseMode:All ProcessBackspace:Yes") mainmask2.Run c.SetAttrib "mainmask2.OnsetDelay", mainmask2.OnsetDelay c.SetAttrib "mainmask2.OnsetTime", mainmask2.OnsetTime c.SetAttrib "mainmask2.RTTime", mainmask2.RTTime c.SetAttrib "mainmask2.ACC", mainmask2.ACC c.SetAttrib "mainmask2.RT", mainmask2.RT c.SetAttrib "mainmask2.RESP", mainmask2.RESP c.SetAttrib "mainmask2.CRESP", mainmask2.CRESP 'fire pulse 2 if clock.read() >= MainStimOnset + (4.5 * RefreshDuration) and PulseCount = 2 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime2", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'fire pulse 3 if clock.read() >= MainStimOnset + (9.5 * RefreshDuration) and PulseCount = 3 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime3", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'fire pulse 4 if clock.read() >= MainStimOnset + (14.5 * RefreshDuration) and PulseCount = 4 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime4", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'fire pulse 5 if clock.read() >= MainStimOnset + (19.5 * RefreshDuration) and PulseCount = 5 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime5", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'continuously check whether a response has been made and then log which 'response has been made if mainmask2.RT <> 0 then RespCount = RespCount + 1 if RespCount = 1 then resp1 = mainmask2.RESP c.SetAttrib "resp1", resp1 elseif RespCount = 2 then resp2 = mainmask2.RESP c.SetAttrib "resp2", resp2 'collate the 2 responses in 1 column so I don't have to change a previous response assignment c.SetAttrib "BothResps", resp1 & resp2 end if end if 'loop until 2 responses are collected loop until RespCount = 2 ############################################################################ # From pauls_postbus at hotmail.com Sat Jun 16 00:44:05 2007 From: pauls_postbus at hotmail.com (Paul Gr) Date: Sat, 16 Jun 2007 02:44:05 +0200 Subject: trigger TMS + collect responses during stimulus presentation Message-ID: Dear Bianca, Just a few questions and hints: Did you define sufficient prerelease times in mainstimulus and mainmask2? This would be required since you reload images during the time critical loop. (But read on...;) The place of the mainstimulus.OnsetSignal statements are a bit unusual. Normally you would initialize these before mainstimulus.Run. That would be required if the TMS trigger should be in sync with ALL (including the very first) mainstimulus onsets. There are several good arguments for not placing the mainstimulus preparation and execution inside the first loop. The prefered way would be to run the mainstimulus object just before the loop. Then use a simplified loop to generate the trigger pulses that should be generated during the target. Also use the sleep() instruction inside the loop to specify the delays for each iteration. You should also place the OnsetSignal initialisation script somewhere before mainstimulus.run. Also set the duration and prerelease vaules of mainstimulus to the required duration of the target. This will prevent large timing error values for the following objects. The declaration of the i1 integer variable is probably misplaced because it should be declared outside the loop. I'm not sure if E-Basic will reinitialize the variable each time to zero at the start of the loop, but most programming languages will indeed do this. If this is the case then the lines inside the 'if i1 = 0 then' block will be executed each iteration. However, E-Prime probable doesn't reinitialize i1 to zero again because this would have introduced an infinite loop because the mainstimonset wouldn't grow. The reason for the missing responses in the second part is caused by the continuous reinitialization of the input mask. The solution is the same as for the first loop: place the preparation and execution of mainmask2 before the second loop so it is ran only once. Also configure the input object to accept 2 responses and use InputMaskManager.Responses to extract the RT and RESP values of both responses. An example for this kan be found in the E-Basic help documentation. I also noticed that you used the WritePort command several times in sequence. This is probably required because you immediatly reset the printer port values to zero each time. This will cause VERY short pulses on fast computers. The prefered way is to reset the value to zero after a specific time. (Using sleep() for example.) Below you fill find some example script, which can be used as starting point. (Note that i wasn't sure about the number of pulses during the target.) hope this helps Paul Paul Groot VU University Amsterdam The Netherlands 'create pulsecount to make sure each pulse is only fired oncedim PulseCount%dim RespCount%dim MainStimOnset as longdim PulseTime as longdim StimDisplayDuration as longConst RefreshDuration% = 20 '''''' at start of experimentwriteport &H378, 0 '''''' script 1mainstimulus.OnsetSignalEnabled = Truemainstimulus.OnsetSignalPort = &H378mainstimulus.OnsetSignalData = &HFF ''''' show targetmainstimulus.duration = StimDisplayDurationmainstimulus.prerelease = mainstimulus.duration'mainstimulus.Filename = c.GetAttrib("mainstimulus")mainstimulus.Loadmainstimulus.Run ' stim onset and first triggerPulseCount = 1MainStimOnset = mainstimulus.OnsetTime c.SetAttrib "PulseTime1", MainStimOnsetc.SetAttrib "mainstimulus.OnsetDelay",mainstimulus.OnsetDelayc.SetAttrib "mainstimulus.OnsetTime", mainstimulus.OnsetTimec.SetAttrib "mainstimulus.PreRelease",mainstimulus.PreReleasedebug.print PulseCount & " onset=" & MainStimOnset dim nextPulse as longdim waitms as long '''''' block wave during targetSleep(0.5*RefreshDuration) ' start with high pulse of 50% duty cycledo ' you can modify the pulse duration by replacing RefreshDuration nextPulse = MainStimOnset + PulseCount*RefreshDuration waitms = nextPulse - clock.read() writeport &H378, 0 if waitms>0 then Sleep(waitms) writeport &H378, &HFF PulseCount = PulseCount + 1 c.SetAttrib "PulseTime" & PulseCount, clock.read() debug.print PulseCount & " onset=" & clock.read() & ", wait=" & waitms Sleep(0.5*RefreshDuration)loop until clock.read() >= MainStimOnset + StimDisplayDuration - RefreshDurationwriteport &H378, 0 '''''' show maskmainmask2.InputMasks.Resetmainmask2EchoClients.RemoveAllmainmask2.InputMasks.Add Keyboard.CreateInputMask("{ANY}", "", CLng("-1"), CLng("2"), ebEndResponseActionNone, CLogical("Yes"), "", "", "ResponseMode:All ProcessBackspace:Yes")mainmask2.Duration = 0mainmask2.Run '''''' generate remaining pulses and stop after two responsesDim stimDisplayMasks As InputMaskManagerSet stimDisplayMasks = mainmask2.InputMaskswhile PulseCount<5 And stimDisplayMasks.Item(1).Responses.Count<2 ' time between remaining pulses = 5 refreshes ? nextPulse = MainStimOnset + 5*(PulseCount-1)*RefreshDuration waitms = nextPulse - clock.read() if waitms>0 then Sleep(waitms) WritePort &H378, &HFF PulseCount = PulseCount + 1 c.SetAttrib "PulseTime" & PulseCount, clock.read() debug.print PulseCount & " onset=" & clock.read() & ", wait=" & waitms Sleep(0.5*RefreshDuration) WritePort &H378,0wend' two reponses yet?doloop until stimDisplayMasks.Item(1).Responses.Count = 2' save attributesc.SetAttrib "resp1", stimDisplayMasks.Item(1).Responses(1).RESPc.SetAttrib "rt1", stimDisplayMasks.Item(1).Responses(1).RTc.SetAttrib "resp2", stimDisplayMasks.Item(1).Responses(2).RESPc.SetAttrib "rt2", stimDisplayMasks.Item(1).Responses(2).RTc.SetAttrib "mainmask2.OnsetDelay", mainmask2.OnsetDelayc.SetAttrib "mainmask2.OnsetTime", mainmask2.OnsetTimec.SetAttrib "mainmask2.RESP", mainmask2.RESPc.SetAttrib "mainmask2.CRESP", mainmask2.CRESPc.SetAttrib "mainmask2.ACC", mainmask2.ACC > From: bianca.de-haan at klinikum.uni-tuebingen.de> To: eprime at mail.talkbank.org> Subject: trigger TMS + collect responses during stimulus presentation> Date: Fri, 15 Jun 2007 16:22:19 +0200> > Dear E-prime list,> > I've been racking my brain over this problem longer than I care to think> about, so I hope someone can help me figure this out.> > I want to present a targetstimulus (mainstimulus) followed by a maskstimulus> (mainmask2). Depending on the targetstimulus duration (titrated in a> previous block) an x amount of TMS pulses occur during presentation of the> targetstimulus (first pulse synchronized with stimulus onset) and the> remaining TMS pulses occur during presentation of the maskstimulus.> Furthermore, during presentation of the maskstimulus, I would also like to> be able to collect 2 button presses.> > Mostly, I've managed to get it all to work (see code at the end of this> email). I have put the ImageDisplays of both the targetstimulus and the> mainstimulus under unreferenced objects with a duration of 0, time limit> infinite and end action none. The stimuli are presented correctly and the> tms pulses are fired during stimulus presentation) However, there are 2> problems I can't seem to solve.> > Firstly, the timing seems to be way off. The most critical timing is the> timing of the targetstimulus and the TMS pulses. I have applied all the> tricks in the Timing-chapter of the E-Prime manual. Furthermore, I have run> the RefreshClockTest which shows that my computer is theoretically capable> of achieving millisecond precision. Finally, I calculate the exact Refresh> duration at the start of the experiment (using part of the code of the> RefreshClockTest experiment) and specify all my timings in multiples of the> calculated refresh duration (8.333ms at 120Hz monitor) with half a refresh> duration subtracted to make sure events happen on the exact vertical> refresh. Still, I don't achieve anything near good timing, especially for> the TMS pulses. > > Secondly, during presentation of the maskstimulus it does not register all> button presses. Sometimes a button press is detected, sometimes it's not.> I've had a look at monitoring responses using Inputmasks, but have not been> able to get this to work at all (mainmask2.Inputmasks.(Responses?).RT <> 0> cannot be compiled).> > If anyone can provide me with any tips or tricks as to how to solve these 2> problems, they will earn my eternal gratitude.> > Many thanks,> > Bianca de Haan> > Excerpt of code follows:> ################################################################> > 'create pulsecount to make sure each pulse is only fired once> PulseCount = 1> > do 'start loop that will display mainstimulus till> stimdisplayduration has elapsed> > dim i1 as integer 'start loop counter> > 'draw mainstimulus for infinite duration, terminated by> StimDisplayDuration> mainstimulus.Filename = c.GetAttrib("mainstimulus")> mainstimulus.Load> mainstimulus.Run > > 'onsettime will only be collected in first loop and first> tms pulse synched with stimulus onset> if i1 = 0 then > MainStimOnset = mainstimulus.OnsetTime > mainstimulus.OnsetSignalEnabled = True> 'send pulse at stimulus onset> mainstimulus.OnsetSignalPort = &H378> mainstimulus.OnsetSignalData = &HFF> 'write time that the pulse was really sent> PulseTime = clock.read()> c.SetAttrib "PulseTime1", PulseTime> 'switch port off again to enable second pulse> writeport &H378, 0> PulseCount = PulseCount + 1> end if> > i1 = i1 + 1> > 'end loop when stimulus duration has elapsed> loop until clock.read() > MainStimOnset + StimDisplayDuration> > > 'create respcount to count the responses> RespCount = 0> 'create place to log the 2 responses> dim resp1 as Integer> dim resp2 as Integer> > do 'start loop that runs mainmask2 until 2 responses are collected> while firing remaining tms pulses> > mainmask2.InputMasks.Reset> mainmask2EchoClients.RemoveAll> mainmask2.InputMasks.Add Keyboard.CreateInputMask("{ANY}",> "", CLng("-1"), CLng("2"), ebEndResponseActionNone, CLogical("Yes"), "", "",> "ResponseMode:All ProcessBackspace:Yes")> mainmask2.Run> c.SetAttrib "mainmask2.OnsetDelay", mainmask2.OnsetDelay> c.SetAttrib "mainmask2.OnsetTime", mainmask2.OnsetTime> c.SetAttrib "mainmask2.RTTime", mainmask2.RTTime> c.SetAttrib "mainmask2.ACC", mainmask2.ACC> c.SetAttrib "mainmask2.RT", mainmask2.RT> c.SetAttrib "mainmask2.RESP", mainmask2.RESP> c.SetAttrib "mainmask2.CRESP", mainmask2.CRESP> > 'fire pulse 2> if clock.read() >= MainStimOnset + (4.5 * RefreshDuration)> and PulseCount = 2 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime2", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'fire pulse 3> if clock.read() >= MainStimOnset + (9.5 * RefreshDuration)> and PulseCount = 3 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime3", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'fire pulse 4> if clock.read() >= MainStimOnset + (14.5 * RefreshDuration)> and PulseCount = 4 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime4", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'fire pulse 5> if clock.read() >= MainStimOnset + (19.5 * RefreshDuration)> and PulseCount = 5 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime5", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'continuously check whether a response has been made and> then log which> 'response has been made> if mainmask2.RT <> 0 then> RespCount = RespCount + 1> > if RespCount = 1 then> resp1 = mainmask2.RESP> c.SetAttrib "resp1", resp1> elseif RespCount = 2 then> resp2 = mainmask2.RESP> c.SetAttrib "resp2", resp2> 'collate the 2 responses in 1 column so I don't have> to change a previous response assignment> c.SetAttrib "BothResps", resp1 & resp2> end if> > end if> > 'loop until 2 responses are collected> loop until RespCount = 2> > ############################################################################> #> > _________________________________________________________________ Jouw nieuws: wereldnieuws! Beleef 't op MSN.nl http://reporter.msn.nl/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From bianca.de-haan at klinikum.uni-tuebingen.de Tue Jun 19 15:32:29 2007 From: bianca.de-haan at klinikum.uni-tuebingen.de (B de Haan) Date: Tue, 19 Jun 2007 17:32:29 +0200 Subject: AW: trigger TMS + collect responses during stimulus presentation In-Reply-To: Message-ID: Dear Paul, Many thanks for your answer and excellent advice, it definitely did go a long way towards solving my problems. However, inevitably, I still have a problem left. _____ There are several good arguments for not placing the mainstimulus preparation and execution inside the first loop. The prefered way would be to run the mainstimulus object just before the loop. Then use a simplified loop to generate the trigger pulses that should be generated during the target. Also use the sleep() instruction inside the loop to specify the delays for each iteration. You should also place the OnsetSignal initialisation script somewhere before mainstimulus.run. Also set the duration and prerelease vaules of mainstimulus to the required duration of the target.[emphasis added] This will prevent large timing error values for the following objects. I do not quite understand this part of your advice. I want to be able to present TMS pulses during presentation of the mainstimulus as well (so some pulses will occur during the mainstimulus with the first pulse synchronised at mainstimulus onset and some pulses will occur during the subsequent response-collecting mainmask2. Mainly the part where you advice me to set the duration of the mainstimulus to unequal 0 therefore puzzles me. When I follow that advice, E-prime will not execute the TMS-pulses until the mainstimulus duration has elapsed. I ask since I have now still set the duration of the mainstimulus to 0 followed by a TMS-generating loop (akin to the 1 you adviced me to use for mainmask2) where the TMS-pulses are generated and that terminates when the target duration has reached. This works, however, as you predict, I find timing errors for the onset of the mainmask2 and the TMS pulses that occur during the mainmask2. Is there any way to generate pulses during presentation of mainstimulus without creating timing errors for the following objects? I would be very grateful if you could help me tie up this final loose string, Bianca de Haan -------------- next part -------------- An HTML attachment was scrubbed... URL: From jared.smith at reading.ac.uk Tue Jun 19 15:47:59 2007 From: jared.smith at reading.ac.uk (Jared G. Smith) Date: Tue, 19 Jun 2007 15:47:59 +0000 Subject: Holding a response button down In-Reply-To: <005801c7b287$0c6408c0$d87d0286@dehaan> Message-ID: Hi I am creating a line bisection task using a method of adjustment whereby participants are required to move (left or right) a vertical cursor superimposed on a horizontal line towards the perceived midpoint (the scripting for this resembles that of visual analogue scales). Because in many trials the cursor begins placed some distance from the objective midpoint, rather than always having to press the response button to move the stimulus by one increment, I would like the user to be able to hold a keyboard button down in order to move the cursor in continuous increments (which would cease moving when the key was released) - rather like the effect of pressing a key down on a word processor. Does anyone know how such response movement could be achived? Alternatively, does anyone have an example script for recording the duration of a button keyboard press response as I think I could use this duration to achieve continuous cursor movement in response to holding down a response button? Would appreciate any help here. Thanks very much. Best wishes Jared G Smith Research Fellow School of Psychology and Clinical Language Sciences University of Reading Reading RG6 6AL UK From pauls_postbus at hotmail.com Tue Jun 19 16:46:37 2007 From: pauls_postbus at hotmail.com (Paul Gr) Date: Tue, 19 Jun 2007 18:46:37 +0200 Subject: AW: trigger TMS + collect responses during stimulus presentation Message-ID: Hello Bianca, When the display duration is set to zero, you can immediately continue with a script to generate one or more TMS pulses. The target stimulus will stay on screen when the user script is executed, unless you use the ClearAfter property. The advantage of this is that the pulse timing becomes independent of the refresh cycle of the monitor. In the example script I also used the OnsetSignal properties to generate the first trigger at the exact onset of the stimulus. (I hope this example was included in my previous email.) However, instead of setting the duration (and prerelease) to zero, it is also possible to set the duration to the requested value (say 200 ms) and use exactly the same value as PreRelease time to allow your script to execute immediately after stimulus onset. This way EPrime correctly schedules the start time of mask object at stimulus onset + 200. If you use a duration of zero instead, EPrime expects the mask to start immediately after the target and considers the time taken to execute the user script (for the trigger pulses) as unexpected delays. I think I accidentally mixed those two constructions in the text of my previous email. (Sorry for the confusion.) The same technique can be used for the Mask image. best,paul From: bianca.de-haan at klinikum.uni-tuebingen.deTo: pauls_postbus at hotmail.com; eprime at mail.talkbank.orgSubject: AW: trigger TMS + collect responses during stimulus presentationDate: Tue, 19 Jun 2007 17:32:29 +0200 Dear Paul, Many thanks for your answer and excellent advice, it definitely did go a long way towards solving my problems. However, inevitably, I still have a problem left. There are several good arguments for not placing the mainstimulus preparation and execution inside the first loop. The prefered way would be to run the mainstimulus object just before the loop. Then use a simplified loop to generate the trigger pulses that should be generated during the target. Also use the sleep() instruction inside the loop to specify the delays for each iteration. You should also place the OnsetSignal initialisation script somewhere before mainstimulus.run. Also set the duration and prerelease vaules of mainstimulus to the required duration of the target.[emphasis added] This will prevent large timing error values for the following objects. I do not quite understand this part of your advice. I want to be able to present TMS pulses during presentation of the mainstimulus as well (so some pulses will occur during the mainstimulus with the first pulse synchronised at mainstimulus onset and some pulses will occur during the subsequent response-collecting mainmask2. Mainly the part where you advice me to set the duration of the mainstimulus to unequal 0 therefore puzzles me. When I follow that advice, E-prime will not execute the TMS-pulses until the mainstimulus duration has elapsed. I ask since I have now still set the duration of the mainstimulus to 0 followed by a TMS-generating loop (akin to the 1 you adviced me to use for mainmask2) where the TMS-pulses are generated and that terminates when the target duration has reached. This works, however, as you predict, I find timing errors for the onset of the mainmask2 and the TMS pulses that occur during the mainmask2. Is there any way to generate pulses during presentation of mainstimulus without creating timing errors for the following objects? I would be very grateful if you could help me tie up this final loose string, Bianca de Haan _________________________________________________________________ Zoek met Live Search en ervaar het verschil. Test het NU, klik hier! http://www.live.com/?mkt=nl-nl -------------- next part -------------- An HTML attachment was scrubbed... URL: From BRobinso at mprc.umaryland.edu Tue Jun 19 17:18:17 2007 From: BRobinso at mprc.umaryland.edu (Ben Robinson) Date: Tue, 19 Jun 2007 13:18:17 -0400 Subject: Holding a response button down Message-ID: i had to do something similar recently. here's how i did it: Dim nPresses as Long 'put this first line in the User section of your Script window have a List object (List1) with a single row, weight=1, for your procedure. the first object in the timeline of your procedure should be a Label object (Label1). then put a slide object (Slide1) to display the horizontal line, and the cursor. fill in the cursor's x-axis position as [xPos], or something like that, and add a column to your list called xPos. then put an inline object following Slide1. this code will check to see what the response to the Slide1 was, go back to Label1 if the response was to move the cursor either left or right, or exit the procedural loop if the response was {ENTER}, meaning the cursor is in the desired location. if either {LEFTARROW} or {RIGHTARROW} is pressed, the inline will adjust the value of xPos in List1 so that the next time Slide1 is drawn the cursor's position will increment appropriately. here's the inline code: nPresses = Keyboard.History.Count Set lastPress = Keyboard.History(nPresses) If lastPress Is Nothing Then Goto Label1 ElseIf Not lastPress Is Nothing Then Select Case lastPress.RESP Case "{LEFTARROW}" If xPos > [the farthest left the cursor can go on the line] Then xPos = xPos -1 End If Goto Label1 Case "{RIGHTARROW}" If xPos < [the farthest right the cursor can go on the line] Then xPos = xPos +1 End If Goto Label1 Case "{ENTER}" 'if they press {ENTER} don't return to Label1, thereby ending this loop. Case Else Goto Label1 End Select End If >>> "Jared G. Smith" 6/19/2007 11:47 AM >>> Hi I am creating a line bisection task using a method of adjustment whereby participants are required to move (left or right) a vertical cursor superimposed on a horizontal line towards the perceived midpoint (the scripting for this resembles that of visual analogue scales). Because in many trials the cursor begins placed some distance from the objective midpoint, rather than always having to press the response button to move the stimulus by one increment, I would like the user to be able to hold a keyboard button down in order to move the cursor in continuous increments (which would cease moving when the key was released) - rather like the effect of pressing a key down on a word processor. Does anyone know how such response movement could be achived? Alternatively, does anyone have an example script for recording the duration of a button keyboard press response as I think I could use this duration to achieve continuous cursor movement in response to holding down a response button? Would appreciate any help here. Thanks very much. Best wishes Jared G Smith Research Fellow School of Psychology and Clinical Language Sciences University of Reading Reading RG6 6AL UK From BRobinso at mprc.umaryland.edu Tue Jun 19 17:23:01 2007 From: BRobinso at mprc.umaryland.edu (Ben Robinson) Date: Tue, 19 Jun 2007 13:23:01 -0400 Subject: Holding a response button down Message-ID: whoops, and i forgot to mention you need an inline immediately after your Label1 and before your Slide1 to reset List1's value for xPos. c.SetAttribAtSource "xPos", xPos >>> "Ben Robinson" 6/19/2007 1:18 PM >>> i had to do something similar recently. here's how i did it: Dim nPresses as Long 'put this first line in the User section of your Script window have a List object (List1) with a single row, weight=1, for your procedure. the first object in the timeline of your procedure should be a Label object (Label1). then put a slide object (Slide1) to display the horizontal line, and the cursor. fill in the cursor's x-axis position as [xPos], or something like that, and add a column to your list called xPos. then put an inline object following Slide1. this code will check to see what the response to the Slide1 was, go back to Label1 if the response was to move the cursor either left or right, or exit the procedural loop if the response was {ENTER}, meaning the cursor is in the desired location. if either {LEFTARROW} or {RIGHTARROW} is pressed, the inline will adjust the value of xPos in List1 so that the next time Slide1 is drawn the cursor's position will increment appropriately. here's the inline code: nPresses = Keyboard.History.Count Set lastPress = Keyboard.History(nPresses) If lastPress Is Nothing Then Goto Label1 ElseIf Not lastPress Is Nothing Then Select Case lastPress.RESP Case "{LEFTARROW}" If xPos > [the farthest left the cursor can go on the line] Then xPos = xPos -1 End If Goto Label1 Case "{RIGHTARROW}" If xPos < [the farthest right the cursor can go on the line] Then xPos = xPos +1 End If Goto Label1 Case "{ENTER}" 'if they press {ENTER} don't return to Label1, thereby ending this loop. Case Else Goto Label1 End Select End If >>> "Jared G. Smith" 6/19/2007 11:47 AM >>> Hi I am creating a line bisection task using a method of adjustment whereby participants are required to move (left or right) a vertical cursor superimposed on a horizontal line towards the perceived midpoint (the scripting for this resembles that of visual analogue scales). Because in many trials the cursor begins placed some distance from the objective midpoint, rather than always having to press the response button to move the stimulus by one increment, I would like the user to be able to hold a keyboard button down in order to move the cursor in continuous increments (which would cease moving when the key was released) - rather like the effect of pressing a key down on a word processor. Does anyone know how such response movement could be achived? Alternatively, does anyone have an example script for recording the duration of a button keyboard press response as I think I could use this duration to achieve continuous cursor movement in response to holding down a response button? Would appreciate any help here. Thanks very much. Best wishes Jared G Smith Research Fellow School of Psychology and Clinical Language Sciences University of Reading Reading RG6 6AL UK From bermanm at umich.edu Tue Jun 26 02:28:39 2007 From: bermanm at umich.edu (Marc Berman) Date: Mon, 25 Jun 2007 22:28:39 -0400 Subject: E-prime and unilateral auditory presentation Message-ID: Hi All, I was wondering if e-prime was able to present auditory stimuli to two channels (i.e., the left ear and the right ear)? I would like to conduct a study where I would present different auditory stimuli to the left and right ear. Thanks so much, -Marc From john.herrington at yale.edu Tue Jun 26 11:29:33 2007 From: john.herrington at yale.edu (John Herrington) Date: Tue, 26 Jun 2007 07:29:33 -0400 Subject: E-prime and unilateral auditory presentation In-Reply-To: <468079D7.6020305@umich.edu> Message-ID: Eprime can do this. The key is to configure eprime to play stereo audio files (it might even be configured for this by default), and make sure the "Pan" attribute of your auditory stimuli is set to 0 (incidentally, if you want to play just the right or left channels of a two-channel audio file, set the Pan attribute to 10000 or -10000, respectively). With these set, two-channel audio files should play straight away. Sorry I'm not able to guide you to the exact windows to set this up, I'm not at a computer with eprime right now... Best wishes - John Marc Berman wrote: > Hi All, > > I was wondering if e-prime was able to present auditory stimuli > to two channels (i.e., the left ear and the right ear)? I would like to > conduct a study where I would present different auditory stimuli to the > left and right ear. > > Thanks so much, > -Marc > From bermanm at umich.edu Tue Jun 26 15:24:13 2007 From: bermanm at umich.edu (Marc Berman) Date: Tue, 26 Jun 2007 11:24:13 -0400 Subject: Auditory presentation to 2 channels Message-ID: Hi, if you look at Properties for the SoundOut Object, you will find that there is something called Pan Control. If I remember correctly you can get sound in one of the ears if you set the value for Pan Control to 10000 (or alternatively -10000 for the other ear). I believe the SoundDevice has to be set to 2 channels. What this does is that one of your SoundOut Objects is always played in one ear and the other Object always in the other ear. Tobias From Pieter.Vandemaele at UGent.be Tue Jun 26 15:27:25 2007 From: Pieter.Vandemaele at UGent.be (Pieter Vandemaele) Date: Tue, 26 Jun 2007 17:27:25 +0200 Subject: Auditory presentation to 2 channels In-Reply-To: <46812F9D.3020504@umich.edu> Message-ID: Hi, A more time-consuming way is to create stereo sounds, where one of the channels is set to 0 and the other to your sound file. Pieter Marc Berman schreef: > Hi, if you look at Properties for the SoundOut Object, you will find > that there is something called Pan Control. If I remember correctly > you can get sound in one of the ears if you set the value for Pan > Control to 10000 (or alternatively -10000 for the other ear). I > believe the SoundDevice has to be set to 2 channels. > > What this does is that one of your SoundOut Objects is always played > in one ear and the other Object always in the other ear. > > Tobias From frosts at haskins.yale.edu Tue Jun 26 15:53:07 2007 From: frosts at haskins.yale.edu (Stephen Frost) Date: Tue, 26 Jun 2007 11:53:07 -0400 Subject: Microphone recommendation Message-ID: I am sorry if this question has been asked before but I couldn't turn up anything from a search of the archives... Can anybody recommend a particular (make and model) head-mounted microphone or headset (microphone and earphone) that has had good success with the voice key in the Eprime button box? We have tried several (Plantronics, Logitech) with impedances in the range of the hand held microphone that comes with the bbox, but have had very poor luck. Any help would be immensely appreciated. Thanks. Steve -- Stephen Frost, Ph.D. Senior Scientist Haskins Laboratories 300 George Street New Haven, CT 06511 Tel: 203-865-6163 ext. 261 Fax: 203-865-8963 http://www.haskins.yale.edu/staff/stevefrost.html From ndmaxfield at hotmail.com Wed Jun 27 00:02:48 2007 From: ndmaxfield at hotmail.com (Nathan Maxfield) Date: Tue, 26 Jun 2007 20:02:48 -0400 Subject: Microphone recommendation In-Reply-To: Message-ID: I've used the E-prime voice key, and one way I've been able to get more reliable speech reaction times are by using a pre-amp in conjunction with the voice key. We had participants name pictures using a carrier phrase (e.g., "say [picture name]"). We connected the mic to a small preamplifier, and the preamp to the E-prime voice key. Before testing, we calibrated each speaker by asking them to say some examples at their typical speaking loudness, and we adjusted the pre-amp until we got what we felt were reliable voice key triggers to the word "say". We still had some error during testing (due to coughing, clicks, etc), but the pre-amp and carrier phrase approach helped to reduce these types of mis-triggers quite a bit. If you wanted to avoid the carrier phrase, I suppose having a pre-amp and calibrating each participant beforehand would still help to some extent. Best, Nathan Maxfield University of South Florida formerly at the CUNY Graduate Center, Doctoral Program in Speech & Hearing Sciences From dolores888 at hotmail.com Mon Jun 4 20:10:47 2007 From: dolores888 at hotmail.com (dolores ma) Date: Mon, 4 Jun 2007 22:10:47 +0200 Subject: Sending the response code for an experiment with neuroscan In-Reply-To: <81882.19068@mail.talkbank.org> Message-ID: Hi, We have been working on how to send the response code (1/2, which are pressed on the computer keyboard) to be writen in the EEG file. However, since we have some script, when we record the response in the EEG file, at the time of its occurrence, a problem appears: the sound file stops and also its window of 2000 ms (i.e., the word is not listened any more and the response window is shorten). How could we keep listening the audio file meantime in the background the script for sending the response code is being sent? thank you Dolores _________________________________________________________________ Un amor, una aventura, compa??a para un viaje. Reg?strate gratis en MSN Amor & Amistad. http://match.msn.es/match/mt.cfm?pg=channel&tcid=162349 From michael.crowley at yale.edu Tue Jun 12 17:11:24 2007 From: michael.crowley at yale.edu (Michael Crowley) Date: Tue, 12 Jun 2007 13:11:24 -0400 Subject: 64-bit XP for data collection? In-Reply-To: <0JC20NXO5LCH8V@email.med.yale.edu> Message-ID: Dear List, In the eprime archive there was a post on Fri, 21 Oct 2005 from an Eprime rep said that: Only experiment design and testing should be attempted on Windows XP 64-bit edition at this point. E-Prime 1.2 is scheduled to address installation issues on Windows XP 64, but issues regarding timing, use of SRBOX and Port devices will remain outstanding until reviewed. Until that time, it is not recommended that Windows XP 64 be used for data collection. Does anyone know any progress has been made with Windows XP 64 for data collection? (I see the eprime web says not approved yet) Thank you for any info you can provide. Mike Crowley From bianca.de-haan at klinikum.uni-tuebingen.de Fri Jun 15 14:22:19 2007 From: bianca.de-haan at klinikum.uni-tuebingen.de (B de Haan) Date: Fri, 15 Jun 2007 16:22:19 +0200 Subject: trigger TMS + collect responses during stimulus presentation In-Reply-To: Message-ID: Dear E-prime list, I've been racking my brain over this problem longer than I care to think about, so I hope someone can help me figure this out. I want to present a targetstimulus (mainstimulus) followed by a maskstimulus (mainmask2). Depending on the targetstimulus duration (titrated in a previous block) an x amount of TMS pulses occur during presentation of the targetstimulus (first pulse synchronized with stimulus onset) and the remaining TMS pulses occur during presentation of the maskstimulus. Furthermore, during presentation of the maskstimulus, I would also like to be able to collect 2 button presses. Mostly, I've managed to get it all to work (see code at the end of this email). I have put the ImageDisplays of both the targetstimulus and the mainstimulus under unreferenced objects with a duration of 0, time limit infinite and end action none. The stimuli are presented correctly and the tms pulses are fired during stimulus presentation) However, there are 2 problems I can't seem to solve. Firstly, the timing seems to be way off. The most critical timing is the timing of the targetstimulus and the TMS pulses. I have applied all the tricks in the Timing-chapter of the E-Prime manual. Furthermore, I have run the RefreshClockTest which shows that my computer is theoretically capable of achieving millisecond precision. Finally, I calculate the exact Refresh duration at the start of the experiment (using part of the code of the RefreshClockTest experiment) and specify all my timings in multiples of the calculated refresh duration (8.333ms at 120Hz monitor) with half a refresh duration subtracted to make sure events happen on the exact vertical refresh. Still, I don't achieve anything near good timing, especially for the TMS pulses. Secondly, during presentation of the maskstimulus it does not register all button presses. Sometimes a button press is detected, sometimes it's not. I've had a look at monitoring responses using Inputmasks, but have not been able to get this to work at all (mainmask2.Inputmasks.(Responses?).RT <> 0 cannot be compiled). If anyone can provide me with any tips or tricks as to how to solve these 2 problems, they will earn my eternal gratitude. Many thanks, Bianca de Haan Excerpt of code follows: ################################################################ 'create pulsecount to make sure each pulse is only fired once PulseCount = 1 do 'start loop that will display mainstimulus till stimdisplayduration has elapsed dim i1 as integer 'start loop counter 'draw mainstimulus for infinite duration, terminated by StimDisplayDuration mainstimulus.Filename = c.GetAttrib("mainstimulus") mainstimulus.Load mainstimulus.Run c.SetAttrib "mainstimulus.OnsetDelay", mainstimulus.OnsetDelay c.SetAttrib "mainstimulus.OnsetTime", mainstimulus.OnsetTime c.SetAttrib "mainstimulus.PreRelease", mainstimulus.PreRelease c.SetAttrib "mainstimulus.StartTime", mainstimulus.StartTime c.SetAttrib "mainstimulus.TimingMode", mainstimulus.TimingMode c.SetAttrib "mainstimulus.CustomOnsetTime", mainstimulus.CustomOnsetTime c.SetAttrib "mainstimulus.TargetOnsetTime", mainstimulus.TargetOnsetTime 'onsettime will only be collected in first loop and first tms pulse synched with stimulus onset if i1 = 0 then MainStimOnset = mainstimulus.OnsetTime mainstimulus.OnsetSignalEnabled = True 'send pulse at stimulus onset mainstimulus.OnsetSignalPort = &H378 mainstimulus.OnsetSignalData = &HFF 'write time that the pulse was really sent PulseTime = clock.read() c.SetAttrib "PulseTime1", PulseTime 'switch port off again to enable second pulse writeport &H378, 0 PulseCount = PulseCount + 1 end if i1 = i1 + 1 'end loop when stimulus duration has elapsed loop until clock.read() > MainStimOnset + StimDisplayDuration 'create respcount to count the responses RespCount = 0 'create place to log the 2 responses dim resp1 as Integer dim resp2 as Integer do 'start loop that runs mainmask2 until 2 responses are collected while firing remaining tms pulses mainmask2.InputMasks.Reset mainmask2EchoClients.RemoveAll mainmask2.InputMasks.Add Keyboard.CreateInputMask("{ANY}", "", CLng("-1"), CLng("2"), ebEndResponseActionNone, CLogical("Yes"), "", "", "ResponseMode:All ProcessBackspace:Yes") mainmask2.Run c.SetAttrib "mainmask2.OnsetDelay", mainmask2.OnsetDelay c.SetAttrib "mainmask2.OnsetTime", mainmask2.OnsetTime c.SetAttrib "mainmask2.RTTime", mainmask2.RTTime c.SetAttrib "mainmask2.ACC", mainmask2.ACC c.SetAttrib "mainmask2.RT", mainmask2.RT c.SetAttrib "mainmask2.RESP", mainmask2.RESP c.SetAttrib "mainmask2.CRESP", mainmask2.CRESP 'fire pulse 2 if clock.read() >= MainStimOnset + (4.5 * RefreshDuration) and PulseCount = 2 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime2", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'fire pulse 3 if clock.read() >= MainStimOnset + (9.5 * RefreshDuration) and PulseCount = 3 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime3", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'fire pulse 4 if clock.read() >= MainStimOnset + (14.5 * RefreshDuration) and PulseCount = 4 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime4", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'fire pulse 5 if clock.read() >= MainStimOnset + (19.5 * RefreshDuration) and PulseCount = 5 then WritePort &H378,255 WritePort &H378,255 WritePort &H378,255 PulseTime = clock.read() c.SetAttrib "PulseTime5", PulseTime WritePort &H378,0 PulseCount = PulseCount + 1 end if 'continuously check whether a response has been made and then log which 'response has been made if mainmask2.RT <> 0 then RespCount = RespCount + 1 if RespCount = 1 then resp1 = mainmask2.RESP c.SetAttrib "resp1", resp1 elseif RespCount = 2 then resp2 = mainmask2.RESP c.SetAttrib "resp2", resp2 'collate the 2 responses in 1 column so I don't have to change a previous response assignment c.SetAttrib "BothResps", resp1 & resp2 end if end if 'loop until 2 responses are collected loop until RespCount = 2 ############################################################################ # From pauls_postbus at hotmail.com Sat Jun 16 00:44:05 2007 From: pauls_postbus at hotmail.com (Paul Gr) Date: Sat, 16 Jun 2007 02:44:05 +0200 Subject: trigger TMS + collect responses during stimulus presentation Message-ID: Dear Bianca, Just a few questions and hints: Did you define sufficient prerelease times in mainstimulus and mainmask2? This would be required since you reload images during the time critical loop. (But read on...;) The place of the mainstimulus.OnsetSignal statements are a bit unusual. Normally you would initialize these before mainstimulus.Run. That would be required if the TMS trigger should be in sync with ALL (including the very first) mainstimulus onsets. There are several good arguments for not placing the mainstimulus preparation and execution inside the first loop. The prefered way would be to run the mainstimulus object just before the loop. Then use a simplified loop to generate the trigger pulses that should be generated during the target. Also use the sleep() instruction inside the loop to specify the delays for each iteration. You should also place the OnsetSignal initialisation script somewhere before mainstimulus.run. Also set the duration and prerelease vaules of mainstimulus to the required duration of the target. This will prevent large timing error values for the following objects. The declaration of the i1 integer variable is probably misplaced because it should be declared outside the loop. I'm not sure if E-Basic will reinitialize the variable each time to zero at the start of the loop, but most programming languages will indeed do this. If this is the case then the lines inside the 'if i1 = 0 then' block will be executed each iteration. However, E-Prime probable doesn't reinitialize i1 to zero again because this would have introduced an infinite loop because the mainstimonset wouldn't grow. The reason for the missing responses in the second part is caused by the continuous reinitialization of the input mask. The solution is the same as for the first loop: place the preparation and execution of mainmask2 before the second loop so it is ran only once. Also configure the input object to accept 2 responses and use InputMaskManager.Responses to extract the RT and RESP values of both responses. An example for this kan be found in the E-Basic help documentation. I also noticed that you used the WritePort command several times in sequence. This is probably required because you immediatly reset the printer port values to zero each time. This will cause VERY short pulses on fast computers. The prefered way is to reset the value to zero after a specific time. (Using sleep() for example.) Below you fill find some example script, which can be used as starting point. (Note that i wasn't sure about the number of pulses during the target.) hope this helps Paul Paul Groot VU University Amsterdam The Netherlands 'create pulsecount to make sure each pulse is only fired oncedim PulseCount%dim RespCount%dim MainStimOnset as longdim PulseTime as longdim StimDisplayDuration as longConst RefreshDuration% = 20 '''''' at start of experimentwriteport &H378, 0 '''''' script 1mainstimulus.OnsetSignalEnabled = Truemainstimulus.OnsetSignalPort = &H378mainstimulus.OnsetSignalData = &HFF ''''' show targetmainstimulus.duration = StimDisplayDurationmainstimulus.prerelease = mainstimulus.duration'mainstimulus.Filename = c.GetAttrib("mainstimulus")mainstimulus.Loadmainstimulus.Run ' stim onset and first triggerPulseCount = 1MainStimOnset = mainstimulus.OnsetTime c.SetAttrib "PulseTime1", MainStimOnsetc.SetAttrib "mainstimulus.OnsetDelay",mainstimulus.OnsetDelayc.SetAttrib "mainstimulus.OnsetTime", mainstimulus.OnsetTimec.SetAttrib "mainstimulus.PreRelease",mainstimulus.PreReleasedebug.print PulseCount & " onset=" & MainStimOnset dim nextPulse as longdim waitms as long '''''' block wave during targetSleep(0.5*RefreshDuration) ' start with high pulse of 50% duty cycledo ' you can modify the pulse duration by replacing RefreshDuration nextPulse = MainStimOnset + PulseCount*RefreshDuration waitms = nextPulse - clock.read() writeport &H378, 0 if waitms>0 then Sleep(waitms) writeport &H378, &HFF PulseCount = PulseCount + 1 c.SetAttrib "PulseTime" & PulseCount, clock.read() debug.print PulseCount & " onset=" & clock.read() & ", wait=" & waitms Sleep(0.5*RefreshDuration)loop until clock.read() >= MainStimOnset + StimDisplayDuration - RefreshDurationwriteport &H378, 0 '''''' show maskmainmask2.InputMasks.Resetmainmask2EchoClients.RemoveAllmainmask2.InputMasks.Add Keyboard.CreateInputMask("{ANY}", "", CLng("-1"), CLng("2"), ebEndResponseActionNone, CLogical("Yes"), "", "", "ResponseMode:All ProcessBackspace:Yes")mainmask2.Duration = 0mainmask2.Run '''''' generate remaining pulses and stop after two responsesDim stimDisplayMasks As InputMaskManagerSet stimDisplayMasks = mainmask2.InputMaskswhile PulseCount<5 And stimDisplayMasks.Item(1).Responses.Count<2 ' time between remaining pulses = 5 refreshes ? nextPulse = MainStimOnset + 5*(PulseCount-1)*RefreshDuration waitms = nextPulse - clock.read() if waitms>0 then Sleep(waitms) WritePort &H378, &HFF PulseCount = PulseCount + 1 c.SetAttrib "PulseTime" & PulseCount, clock.read() debug.print PulseCount & " onset=" & clock.read() & ", wait=" & waitms Sleep(0.5*RefreshDuration) WritePort &H378,0wend' two reponses yet?doloop until stimDisplayMasks.Item(1).Responses.Count = 2' save attributesc.SetAttrib "resp1", stimDisplayMasks.Item(1).Responses(1).RESPc.SetAttrib "rt1", stimDisplayMasks.Item(1).Responses(1).RTc.SetAttrib "resp2", stimDisplayMasks.Item(1).Responses(2).RESPc.SetAttrib "rt2", stimDisplayMasks.Item(1).Responses(2).RTc.SetAttrib "mainmask2.OnsetDelay", mainmask2.OnsetDelayc.SetAttrib "mainmask2.OnsetTime", mainmask2.OnsetTimec.SetAttrib "mainmask2.RESP", mainmask2.RESPc.SetAttrib "mainmask2.CRESP", mainmask2.CRESPc.SetAttrib "mainmask2.ACC", mainmask2.ACC > From: bianca.de-haan at klinikum.uni-tuebingen.de> To: eprime at mail.talkbank.org> Subject: trigger TMS + collect responses during stimulus presentation> Date: Fri, 15 Jun 2007 16:22:19 +0200> > Dear E-prime list,> > I've been racking my brain over this problem longer than I care to think> about, so I hope someone can help me figure this out.> > I want to present a targetstimulus (mainstimulus) followed by a maskstimulus> (mainmask2). Depending on the targetstimulus duration (titrated in a> previous block) an x amount of TMS pulses occur during presentation of the> targetstimulus (first pulse synchronized with stimulus onset) and the> remaining TMS pulses occur during presentation of the maskstimulus.> Furthermore, during presentation of the maskstimulus, I would also like to> be able to collect 2 button presses.> > Mostly, I've managed to get it all to work (see code at the end of this> email). I have put the ImageDisplays of both the targetstimulus and the> mainstimulus under unreferenced objects with a duration of 0, time limit> infinite and end action none. The stimuli are presented correctly and the> tms pulses are fired during stimulus presentation) However, there are 2> problems I can't seem to solve.> > Firstly, the timing seems to be way off. The most critical timing is the> timing of the targetstimulus and the TMS pulses. I have applied all the> tricks in the Timing-chapter of the E-Prime manual. Furthermore, I have run> the RefreshClockTest which shows that my computer is theoretically capable> of achieving millisecond precision. Finally, I calculate the exact Refresh> duration at the start of the experiment (using part of the code of the> RefreshClockTest experiment) and specify all my timings in multiples of the> calculated refresh duration (8.333ms at 120Hz monitor) with half a refresh> duration subtracted to make sure events happen on the exact vertical> refresh. Still, I don't achieve anything near good timing, especially for> the TMS pulses. > > Secondly, during presentation of the maskstimulus it does not register all> button presses. Sometimes a button press is detected, sometimes it's not.> I've had a look at monitoring responses using Inputmasks, but have not been> able to get this to work at all (mainmask2.Inputmasks.(Responses?).RT <> 0> cannot be compiled).> > If anyone can provide me with any tips or tricks as to how to solve these 2> problems, they will earn my eternal gratitude.> > Many thanks,> > Bianca de Haan> > Excerpt of code follows:> ################################################################> > 'create pulsecount to make sure each pulse is only fired once> PulseCount = 1> > do 'start loop that will display mainstimulus till> stimdisplayduration has elapsed> > dim i1 as integer 'start loop counter> > 'draw mainstimulus for infinite duration, terminated by> StimDisplayDuration> mainstimulus.Filename = c.GetAttrib("mainstimulus")> mainstimulus.Load> mainstimulus.Run > > 'onsettime will only be collected in first loop and first> tms pulse synched with stimulus onset> if i1 = 0 then > MainStimOnset = mainstimulus.OnsetTime > mainstimulus.OnsetSignalEnabled = True> 'send pulse at stimulus onset> mainstimulus.OnsetSignalPort = &H378> mainstimulus.OnsetSignalData = &HFF> 'write time that the pulse was really sent> PulseTime = clock.read()> c.SetAttrib "PulseTime1", PulseTime> 'switch port off again to enable second pulse> writeport &H378, 0> PulseCount = PulseCount + 1> end if> > i1 = i1 + 1> > 'end loop when stimulus duration has elapsed> loop until clock.read() > MainStimOnset + StimDisplayDuration> > > 'create respcount to count the responses> RespCount = 0> 'create place to log the 2 responses> dim resp1 as Integer> dim resp2 as Integer> > do 'start loop that runs mainmask2 until 2 responses are collected> while firing remaining tms pulses> > mainmask2.InputMasks.Reset> mainmask2EchoClients.RemoveAll> mainmask2.InputMasks.Add Keyboard.CreateInputMask("{ANY}",> "", CLng("-1"), CLng("2"), ebEndResponseActionNone, CLogical("Yes"), "", "",> "ResponseMode:All ProcessBackspace:Yes")> mainmask2.Run> c.SetAttrib "mainmask2.OnsetDelay", mainmask2.OnsetDelay> c.SetAttrib "mainmask2.OnsetTime", mainmask2.OnsetTime> c.SetAttrib "mainmask2.RTTime", mainmask2.RTTime> c.SetAttrib "mainmask2.ACC", mainmask2.ACC> c.SetAttrib "mainmask2.RT", mainmask2.RT> c.SetAttrib "mainmask2.RESP", mainmask2.RESP> c.SetAttrib "mainmask2.CRESP", mainmask2.CRESP> > 'fire pulse 2> if clock.read() >= MainStimOnset + (4.5 * RefreshDuration)> and PulseCount = 2 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime2", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'fire pulse 3> if clock.read() >= MainStimOnset + (9.5 * RefreshDuration)> and PulseCount = 3 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime3", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'fire pulse 4> if clock.read() >= MainStimOnset + (14.5 * RefreshDuration)> and PulseCount = 4 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime4", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'fire pulse 5> if clock.read() >= MainStimOnset + (19.5 * RefreshDuration)> and PulseCount = 5 then> WritePort &H378,255> WritePort &H378,255> WritePort &H378,255> PulseTime = clock.read()> c.SetAttrib "PulseTime5", PulseTime> WritePort &H378,0> PulseCount = PulseCount + 1> end if > > 'continuously check whether a response has been made and> then log which> 'response has been made> if mainmask2.RT <> 0 then> RespCount = RespCount + 1> > if RespCount = 1 then> resp1 = mainmask2.RESP> c.SetAttrib "resp1", resp1> elseif RespCount = 2 then> resp2 = mainmask2.RESP> c.SetAttrib "resp2", resp2> 'collate the 2 responses in 1 column so I don't have> to change a previous response assignment> c.SetAttrib "BothResps", resp1 & resp2> end if> > end if> > 'loop until 2 responses are collected> loop until RespCount = 2> > ############################################################################> #> > _________________________________________________________________ Jouw nieuws: wereldnieuws! Beleef 't op MSN.nl http://reporter.msn.nl/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From bianca.de-haan at klinikum.uni-tuebingen.de Tue Jun 19 15:32:29 2007 From: bianca.de-haan at klinikum.uni-tuebingen.de (B de Haan) Date: Tue, 19 Jun 2007 17:32:29 +0200 Subject: AW: trigger TMS + collect responses during stimulus presentation In-Reply-To: Message-ID: Dear Paul, Many thanks for your answer and excellent advice, it definitely did go a long way towards solving my problems. However, inevitably, I still have a problem left. _____ There are several good arguments for not placing the mainstimulus preparation and execution inside the first loop. The prefered way would be to run the mainstimulus object just before the loop. Then use a simplified loop to generate the trigger pulses that should be generated during the target. Also use the sleep() instruction inside the loop to specify the delays for each iteration. You should also place the OnsetSignal initialisation script somewhere before mainstimulus.run. Also set the duration and prerelease vaules of mainstimulus to the required duration of the target.[emphasis added] This will prevent large timing error values for the following objects. I do not quite understand this part of your advice. I want to be able to present TMS pulses during presentation of the mainstimulus as well (so some pulses will occur during the mainstimulus with the first pulse synchronised at mainstimulus onset and some pulses will occur during the subsequent response-collecting mainmask2. Mainly the part where you advice me to set the duration of the mainstimulus to unequal 0 therefore puzzles me. When I follow that advice, E-prime will not execute the TMS-pulses until the mainstimulus duration has elapsed. I ask since I have now still set the duration of the mainstimulus to 0 followed by a TMS-generating loop (akin to the 1 you adviced me to use for mainmask2) where the TMS-pulses are generated and that terminates when the target duration has reached. This works, however, as you predict, I find timing errors for the onset of the mainmask2 and the TMS pulses that occur during the mainmask2. Is there any way to generate pulses during presentation of mainstimulus without creating timing errors for the following objects? I would be very grateful if you could help me tie up this final loose string, Bianca de Haan -------------- next part -------------- An HTML attachment was scrubbed... URL: From jared.smith at reading.ac.uk Tue Jun 19 15:47:59 2007 From: jared.smith at reading.ac.uk (Jared G. Smith) Date: Tue, 19 Jun 2007 15:47:59 +0000 Subject: Holding a response button down In-Reply-To: <005801c7b287$0c6408c0$d87d0286@dehaan> Message-ID: Hi I am creating a line bisection task using a method of adjustment whereby participants are required to move (left or right) a vertical cursor superimposed on a horizontal line towards the perceived midpoint (the scripting for this resembles that of visual analogue scales). Because in many trials the cursor begins placed some distance from the objective midpoint, rather than always having to press the response button to move the stimulus by one increment, I would like the user to be able to hold a keyboard button down in order to move the cursor in continuous increments (which would cease moving when the key was released) - rather like the effect of pressing a key down on a word processor. Does anyone know how such response movement could be achived? Alternatively, does anyone have an example script for recording the duration of a button keyboard press response as I think I could use this duration to achieve continuous cursor movement in response to holding down a response button? Would appreciate any help here. Thanks very much. Best wishes Jared G Smith Research Fellow School of Psychology and Clinical Language Sciences University of Reading Reading RG6 6AL UK From pauls_postbus at hotmail.com Tue Jun 19 16:46:37 2007 From: pauls_postbus at hotmail.com (Paul Gr) Date: Tue, 19 Jun 2007 18:46:37 +0200 Subject: AW: trigger TMS + collect responses during stimulus presentation Message-ID: Hello Bianca, When the display duration is set to zero, you can immediately continue with a script to generate one or more TMS pulses. The target stimulus will stay on screen when the user script is executed, unless you use the ClearAfter property. The advantage of this is that the pulse timing becomes independent of the refresh cycle of the monitor. In the example script I also used the OnsetSignal properties to generate the first trigger at the exact onset of the stimulus. (I hope this example was included in my previous email.) However, instead of setting the duration (and prerelease) to zero, it is also possible to set the duration to the requested value (say 200 ms) and use exactly the same value as PreRelease time to allow your script to execute immediately after stimulus onset. This way EPrime correctly schedules the start time of mask object at stimulus onset + 200. If you use a duration of zero instead, EPrime expects the mask to start immediately after the target and considers the time taken to execute the user script (for the trigger pulses) as unexpected delays. I think I accidentally mixed those two constructions in the text of my previous email. (Sorry for the confusion.) The same technique can be used for the Mask image. best,paul From: bianca.de-haan at klinikum.uni-tuebingen.deTo: pauls_postbus at hotmail.com; eprime at mail.talkbank.orgSubject: AW: trigger TMS + collect responses during stimulus presentationDate: Tue, 19 Jun 2007 17:32:29 +0200 Dear Paul, Many thanks for your answer and excellent advice, it definitely did go a long way towards solving my problems. However, inevitably, I still have a problem left. There are several good arguments for not placing the mainstimulus preparation and execution inside the first loop. The prefered way would be to run the mainstimulus object just before the loop. Then use a simplified loop to generate the trigger pulses that should be generated during the target. Also use the sleep() instruction inside the loop to specify the delays for each iteration. You should also place the OnsetSignal initialisation script somewhere before mainstimulus.run. Also set the duration and prerelease vaules of mainstimulus to the required duration of the target.[emphasis added] This will prevent large timing error values for the following objects. I do not quite understand this part of your advice. I want to be able to present TMS pulses during presentation of the mainstimulus as well (so some pulses will occur during the mainstimulus with the first pulse synchronised at mainstimulus onset and some pulses will occur during the subsequent response-collecting mainmask2. Mainly the part where you advice me to set the duration of the mainstimulus to unequal 0 therefore puzzles me. When I follow that advice, E-prime will not execute the TMS-pulses until the mainstimulus duration has elapsed. I ask since I have now still set the duration of the mainstimulus to 0 followed by a TMS-generating loop (akin to the 1 you adviced me to use for mainmask2) where the TMS-pulses are generated and that terminates when the target duration has reached. This works, however, as you predict, I find timing errors for the onset of the mainmask2 and the TMS pulses that occur during the mainmask2. Is there any way to generate pulses during presentation of mainstimulus without creating timing errors for the following objects? I would be very grateful if you could help me tie up this final loose string, Bianca de Haan _________________________________________________________________ Zoek met Live Search en ervaar het verschil. Test het NU, klik hier! http://www.live.com/?mkt=nl-nl -------------- next part -------------- An HTML attachment was scrubbed... URL: From BRobinso at mprc.umaryland.edu Tue Jun 19 17:18:17 2007 From: BRobinso at mprc.umaryland.edu (Ben Robinson) Date: Tue, 19 Jun 2007 13:18:17 -0400 Subject: Holding a response button down Message-ID: i had to do something similar recently. here's how i did it: Dim nPresses as Long 'put this first line in the User section of your Script window have a List object (List1) with a single row, weight=1, for your procedure. the first object in the timeline of your procedure should be a Label object (Label1). then put a slide object (Slide1) to display the horizontal line, and the cursor. fill in the cursor's x-axis position as [xPos], or something like that, and add a column to your list called xPos. then put an inline object following Slide1. this code will check to see what the response to the Slide1 was, go back to Label1 if the response was to move the cursor either left or right, or exit the procedural loop if the response was {ENTER}, meaning the cursor is in the desired location. if either {LEFTARROW} or {RIGHTARROW} is pressed, the inline will adjust the value of xPos in List1 so that the next time Slide1 is drawn the cursor's position will increment appropriately. here's the inline code: nPresses = Keyboard.History.Count Set lastPress = Keyboard.History(nPresses) If lastPress Is Nothing Then Goto Label1 ElseIf Not lastPress Is Nothing Then Select Case lastPress.RESP Case "{LEFTARROW}" If xPos > [the farthest left the cursor can go on the line] Then xPos = xPos -1 End If Goto Label1 Case "{RIGHTARROW}" If xPos < [the farthest right the cursor can go on the line] Then xPos = xPos +1 End If Goto Label1 Case "{ENTER}" 'if they press {ENTER} don't return to Label1, thereby ending this loop. Case Else Goto Label1 End Select End If >>> "Jared G. Smith" 6/19/2007 11:47 AM >>> Hi I am creating a line bisection task using a method of adjustment whereby participants are required to move (left or right) a vertical cursor superimposed on a horizontal line towards the perceived midpoint (the scripting for this resembles that of visual analogue scales). Because in many trials the cursor begins placed some distance from the objective midpoint, rather than always having to press the response button to move the stimulus by one increment, I would like the user to be able to hold a keyboard button down in order to move the cursor in continuous increments (which would cease moving when the key was released) - rather like the effect of pressing a key down on a word processor. Does anyone know how such response movement could be achived? Alternatively, does anyone have an example script for recording the duration of a button keyboard press response as I think I could use this duration to achieve continuous cursor movement in response to holding down a response button? Would appreciate any help here. Thanks very much. Best wishes Jared G Smith Research Fellow School of Psychology and Clinical Language Sciences University of Reading Reading RG6 6AL UK From BRobinso at mprc.umaryland.edu Tue Jun 19 17:23:01 2007 From: BRobinso at mprc.umaryland.edu (Ben Robinson) Date: Tue, 19 Jun 2007 13:23:01 -0400 Subject: Holding a response button down Message-ID: whoops, and i forgot to mention you need an inline immediately after your Label1 and before your Slide1 to reset List1's value for xPos. c.SetAttribAtSource "xPos", xPos >>> "Ben Robinson" 6/19/2007 1:18 PM >>> i had to do something similar recently. here's how i did it: Dim nPresses as Long 'put this first line in the User section of your Script window have a List object (List1) with a single row, weight=1, for your procedure. the first object in the timeline of your procedure should be a Label object (Label1). then put a slide object (Slide1) to display the horizontal line, and the cursor. fill in the cursor's x-axis position as [xPos], or something like that, and add a column to your list called xPos. then put an inline object following Slide1. this code will check to see what the response to the Slide1 was, go back to Label1 if the response was to move the cursor either left or right, or exit the procedural loop if the response was {ENTER}, meaning the cursor is in the desired location. if either {LEFTARROW} or {RIGHTARROW} is pressed, the inline will adjust the value of xPos in List1 so that the next time Slide1 is drawn the cursor's position will increment appropriately. here's the inline code: nPresses = Keyboard.History.Count Set lastPress = Keyboard.History(nPresses) If lastPress Is Nothing Then Goto Label1 ElseIf Not lastPress Is Nothing Then Select Case lastPress.RESP Case "{LEFTARROW}" If xPos > [the farthest left the cursor can go on the line] Then xPos = xPos -1 End If Goto Label1 Case "{RIGHTARROW}" If xPos < [the farthest right the cursor can go on the line] Then xPos = xPos +1 End If Goto Label1 Case "{ENTER}" 'if they press {ENTER} don't return to Label1, thereby ending this loop. Case Else Goto Label1 End Select End If >>> "Jared G. Smith" 6/19/2007 11:47 AM >>> Hi I am creating a line bisection task using a method of adjustment whereby participants are required to move (left or right) a vertical cursor superimposed on a horizontal line towards the perceived midpoint (the scripting for this resembles that of visual analogue scales). Because in many trials the cursor begins placed some distance from the objective midpoint, rather than always having to press the response button to move the stimulus by one increment, I would like the user to be able to hold a keyboard button down in order to move the cursor in continuous increments (which would cease moving when the key was released) - rather like the effect of pressing a key down on a word processor. Does anyone know how such response movement could be achived? Alternatively, does anyone have an example script for recording the duration of a button keyboard press response as I think I could use this duration to achieve continuous cursor movement in response to holding down a response button? Would appreciate any help here. Thanks very much. Best wishes Jared G Smith Research Fellow School of Psychology and Clinical Language Sciences University of Reading Reading RG6 6AL UK From bermanm at umich.edu Tue Jun 26 02:28:39 2007 From: bermanm at umich.edu (Marc Berman) Date: Mon, 25 Jun 2007 22:28:39 -0400 Subject: E-prime and unilateral auditory presentation Message-ID: Hi All, I was wondering if e-prime was able to present auditory stimuli to two channels (i.e., the left ear and the right ear)? I would like to conduct a study where I would present different auditory stimuli to the left and right ear. Thanks so much, -Marc From john.herrington at yale.edu Tue Jun 26 11:29:33 2007 From: john.herrington at yale.edu (John Herrington) Date: Tue, 26 Jun 2007 07:29:33 -0400 Subject: E-prime and unilateral auditory presentation In-Reply-To: <468079D7.6020305@umich.edu> Message-ID: Eprime can do this. The key is to configure eprime to play stereo audio files (it might even be configured for this by default), and make sure the "Pan" attribute of your auditory stimuli is set to 0 (incidentally, if you want to play just the right or left channels of a two-channel audio file, set the Pan attribute to 10000 or -10000, respectively). With these set, two-channel audio files should play straight away. Sorry I'm not able to guide you to the exact windows to set this up, I'm not at a computer with eprime right now... Best wishes - John Marc Berman wrote: > Hi All, > > I was wondering if e-prime was able to present auditory stimuli > to two channels (i.e., the left ear and the right ear)? I would like to > conduct a study where I would present different auditory stimuli to the > left and right ear. > > Thanks so much, > -Marc > From bermanm at umich.edu Tue Jun 26 15:24:13 2007 From: bermanm at umich.edu (Marc Berman) Date: Tue, 26 Jun 2007 11:24:13 -0400 Subject: Auditory presentation to 2 channels Message-ID: Hi, if you look at Properties for the SoundOut Object, you will find that there is something called Pan Control. If I remember correctly you can get sound in one of the ears if you set the value for Pan Control to 10000 (or alternatively -10000 for the other ear). I believe the SoundDevice has to be set to 2 channels. What this does is that one of your SoundOut Objects is always played in one ear and the other Object always in the other ear. Tobias From Pieter.Vandemaele at UGent.be Tue Jun 26 15:27:25 2007 From: Pieter.Vandemaele at UGent.be (Pieter Vandemaele) Date: Tue, 26 Jun 2007 17:27:25 +0200 Subject: Auditory presentation to 2 channels In-Reply-To: <46812F9D.3020504@umich.edu> Message-ID: Hi, A more time-consuming way is to create stereo sounds, where one of the channels is set to 0 and the other to your sound file. Pieter Marc Berman schreef: > Hi, if you look at Properties for the SoundOut Object, you will find > that there is something called Pan Control. If I remember correctly > you can get sound in one of the ears if you set the value for Pan > Control to 10000 (or alternatively -10000 for the other ear). I > believe the SoundDevice has to be set to 2 channels. > > What this does is that one of your SoundOut Objects is always played > in one ear and the other Object always in the other ear. > > Tobias From frosts at haskins.yale.edu Tue Jun 26 15:53:07 2007 From: frosts at haskins.yale.edu (Stephen Frost) Date: Tue, 26 Jun 2007 11:53:07 -0400 Subject: Microphone recommendation Message-ID: I am sorry if this question has been asked before but I couldn't turn up anything from a search of the archives... Can anybody recommend a particular (make and model) head-mounted microphone or headset (microphone and earphone) that has had good success with the voice key in the Eprime button box? We have tried several (Plantronics, Logitech) with impedances in the range of the hand held microphone that comes with the bbox, but have had very poor luck. Any help would be immensely appreciated. Thanks. Steve -- Stephen Frost, Ph.D. Senior Scientist Haskins Laboratories 300 George Street New Haven, CT 06511 Tel: 203-865-6163 ext. 261 Fax: 203-865-8963 http://www.haskins.yale.edu/staff/stevefrost.html From ndmaxfield at hotmail.com Wed Jun 27 00:02:48 2007 From: ndmaxfield at hotmail.com (Nathan Maxfield) Date: Tue, 26 Jun 2007 20:02:48 -0400 Subject: Microphone recommendation In-Reply-To: Message-ID: I've used the E-prime voice key, and one way I've been able to get more reliable speech reaction times are by using a pre-amp in conjunction with the voice key. We had participants name pictures using a carrier phrase (e.g., "say [picture name]"). We connected the mic to a small preamplifier, and the preamp to the E-prime voice key. Before testing, we calibrated each speaker by asking them to say some examples at their typical speaking loudness, and we adjusted the pre-amp until we got what we felt were reliable voice key triggers to the word "say". We still had some error during testing (due to coughing, clicks, etc), but the pre-amp and carrier phrase approach helped to reduce these types of mis-triggers quite a bit. If you wanted to avoid the carrier phrase, I suppose having a pre-amp and calibrating each participant beforehand would still help to some extent. Best, Nathan Maxfield University of South Florida formerly at the CUNY Graduate Center, Doctoral Program in Speech & Hearing Sciences