sound player box & timing
sound player box & timing
Hi there,
I am trying to get a simple auditory oddball paradigm running, and use the lua stimulator and the sound player (one for standards, one for deviants), followed by the stimulation multiplexer, to write the data into a gdf file. Sounds are wav files of 50ms duration, the isi is jittered (scenario attached). Now it seems that I have a stimulator timing problem. First I noticed a jitter between onset and offset stimulators, beyond the one sample period uncertainty. Second, in the online (only) signal display, most (but not all) stimulators are shown only after a considerable delay (of several seconds). This is probably negligible, but a bit strange, as I do not have these problems with, say, the P3 speller. And finally the AEPs seems shifted in latency (by approx. 100 ms) and not as solid in quality as one might expect, so I assume some real, unwanted jitter. Does anybody have any idea how I could improve event timing?
Big thanks!
stede
I am trying to get a simple auditory oddball paradigm running, and use the lua stimulator and the sound player (one for standards, one for deviants), followed by the stimulation multiplexer, to write the data into a gdf file. Sounds are wav files of 50ms duration, the isi is jittered (scenario attached). Now it seems that I have a stimulator timing problem. First I noticed a jitter between onset and offset stimulators, beyond the one sample period uncertainty. Second, in the online (only) signal display, most (but not all) stimulators are shown only after a considerable delay (of several seconds). This is probably negligible, but a bit strange, as I do not have these problems with, say, the P3 speller. And finally the AEPs seems shifted in latency (by approx. 100 ms) and not as solid in quality as one might expect, so I assume some real, unwanted jitter. Does anybody have any idea how I could improve event timing?
Big thanks!
stede
- Attachments
-
- aud_oddball.xml
- (24.28 KiB) Downloaded 408 times
Re: sound player box & timing
Hi stede !
Indeed there is a problem with latest version of the Sound Player. The stimulation are not correctly generated.
I check that right now, I'll come back here when I find a solution.
Laurent-
Indeed there is a problem with latest version of the Sound Player. The stimulation are not correctly generated.
I check that right now, I'll come back here when I find a solution.
Laurent-
Re: sound player box & timing
Hi stede,
I investigated this problem.
The stimulation stream outputed by the sound player box was incorrect.
In OpenViBE, the stim stream must be continuous, i.e. even if you don't have stimulation, you must send an empty chunk so the boxes after yours know that there is nothing to expect at that time range.
This resulted in a bad processing of the streams by the Stimulation Multiplexer.
I corrected the sound Player (latest version in the svn trunk). It now works with the Stimulation Multiplexer for instance.
In my tests, I do get good stimulation timing, corresponding to the time when OpenAL status has been reported playing or stopping the sound.
As you may saw, there is some delta between the request and the sound actually playing.
However, if you display the stimulations in a signal display afterward, please note that you will experience very bad sound generation. As the signal display box is far from optimized, it is not capable of reaching real time display of many stimulations (e.g. one every 100 ms), slowing down the whole pipeline including the sound player boxes.
Laurent-
I investigated this problem.
The stimulation stream outputed by the sound player box was incorrect.
In OpenViBE, the stim stream must be continuous, i.e. even if you don't have stimulation, you must send an empty chunk so the boxes after yours know that there is nothing to expect at that time range.
This resulted in a bad processing of the streams by the Stimulation Multiplexer.
I corrected the sound Player (latest version in the svn trunk). It now works with the Stimulation Multiplexer for instance.
In my tests, I do get good stimulation timing, corresponding to the time when OpenAL status has been reported playing or stopping the sound.
As you may saw, there is some delta between the request and the sound actually playing.
However, if you display the stimulations in a signal display afterward, please note that you will experience very bad sound generation. As the signal display box is far from optimized, it is not capable of reaching real time display of many stimulations (e.g. one every 100 ms), slowing down the whole pipeline including the sound player boxes.
Laurent-
Re: sound player box & timing
Hi lbonnet,
Thanks much for working on this!!! I checked the new version, and apparently you fixed one of my problems, which is great: The sound-off event marker (stimulation) is now much more precise in timing, so the Stimulation Multiplexer seems happy now. However, my main problem is the temporal jitter between sound-on stimulation code and the actual playing of the sound. I am exploring this by recording the wav file directly into the EEG, and exploring the trial-by-trial fluctuations, and there is a jitter beyond the period of one sample. It seems that the problem is more evident for larger sound files)as compared to shorter ones (e.g. a 44kKhz vs. a 11kHz pure tone file of 60 ms duration), and more pronounced for shorter sound onset asynchronies (e.g. 330 ms SOA) compared to longer ones (like 1 sec SOA). Do you have any idea what the underlying problem could be? I will repeat my tests now on different hardware (currently win7 os, up to date intel i3 notebook) but it might be a problem inherent in the code of the sound player box....
By the way, has anybody done similar tests for visual stimulus presentation with OV (by using a photo diode)? I remember looking at VEPs from the P300 speller task and I found much smaller (almost absent) VEPs for non-target as compared to target trials. Initially I thought this would be due to presentation of non-targets in largely different visual fields (compared to targets, which are presented at fixation) and this might cause smearing of the VEP responses - but now I feel like I should also check visual timing accuracy.
Thanks much for any comments/ideas....
Best,
stede
Thanks much for working on this!!! I checked the new version, and apparently you fixed one of my problems, which is great: The sound-off event marker (stimulation) is now much more precise in timing, so the Stimulation Multiplexer seems happy now. However, my main problem is the temporal jitter between sound-on stimulation code and the actual playing of the sound. I am exploring this by recording the wav file directly into the EEG, and exploring the trial-by-trial fluctuations, and there is a jitter beyond the period of one sample. It seems that the problem is more evident for larger sound files)as compared to shorter ones (e.g. a 44kKhz vs. a 11kHz pure tone file of 60 ms duration), and more pronounced for shorter sound onset asynchronies (e.g. 330 ms SOA) compared to longer ones (like 1 sec SOA). Do you have any idea what the underlying problem could be? I will repeat my tests now on different hardware (currently win7 os, up to date intel i3 notebook) but it might be a problem inherent in the code of the sound player box....
By the way, has anybody done similar tests for visual stimulus presentation with OV (by using a photo diode)? I remember looking at VEPs from the P300 speller task and I found much smaller (almost absent) VEPs for non-target as compared to target trials. Initially I thought this would be due to presentation of non-targets in largely different visual fields (compared to targets, which are presented at fixation) and this might cause smearing of the VEP responses - but now I feel like I should also check visual timing accuracy.
Thanks much for any comments/ideas....
Best,
stede
Re: sound player box & timing
Hi there,
I did some more testing, using different hardware (two notebooks, one PC), but the problem persists. The two figures illustrate the jitter: Each figure shows the single-trial EEG response (and average in red) for the off-stimulation (left), a condition a (middle) and a condition b (right) onset-trigger. The sound files are 1000 (b) and 1200 kHz (c) 62 ms wav files, recorded into one EEG channel. As can be seen there is a delay (which I don't care much about), but the delay is not constant (which concerns me a lot) but jitters. Jitter is given in std ms (at threshold indicate b red line). This jitter must be introduced in between sending the on-stimulation trigger and playing the sound. Interestingly, the problem is much larger when the sounds are repeated more quickly (top figure, SOA 333 ms) compare to a longer delay (bottom, SOA 1000 ms). I believe the last fix of lbonnet improved a bit the jitter of the off-stimulation trigger (but I am not 100% sure, as I did not do a direct comparison), but neither off nor on stimulation triggers seem to sync perfectly with the actual playing of the sound. Hay anybody any idea for fixing this?
Thanks much,
stede
I did some more testing, using different hardware (two notebooks, one PC), but the problem persists. The two figures illustrate the jitter: Each figure shows the single-trial EEG response (and average in red) for the off-stimulation (left), a condition a (middle) and a condition b (right) onset-trigger. The sound files are 1000 (b) and 1200 kHz (c) 62 ms wav files, recorded into one EEG channel. As can be seen there is a delay (which I don't care much about), but the delay is not constant (which concerns me a lot) but jitters. Jitter is given in std ms (at threshold indicate b red line). This jitter must be introduced in between sending the on-stimulation trigger and playing the sound. Interestingly, the problem is much larger when the sounds are repeated more quickly (top figure, SOA 333 ms) compare to a longer delay (bottom, SOA 1000 ms). I believe the last fix of lbonnet improved a bit the jitter of the off-stimulation trigger (but I am not 100% sure, as I did not do a direct comparison), but neither off nor on stimulation triggers seem to sync perfectly with the actual playing of the sound. Hay anybody any idea for fixing this?
Thanks much,
stede
- Attachments
-
- mao02-odd-soa333.png (36.28 KiB) Viewed 15213 times
-
- mao02-odd-soa1000.png (29.14 KiB) Viewed 15213 times
Re: sound player box & timing
hi Laurent,
to follow up on stedes timing problem, we tried to look into the source code in order to figure out how the sending of the trigger is synchronized with the actual playing of the sound.
It is the first day of looking into the code, so I am still trying to get the big picture, but:
in ovpCBoxAlgorithmSoundPlayer, it is reasonably clear how the sound is played in the process function.
however, I do not see where the output trigger is generated and sent. If this trigger is independently generated (where?), it would mean that any delay in soundprocessing (in openvibe or in the hardware) would cause stedes unexpected jitter ...
Thanks a lot for your feedback on this problem
mdv
to follow up on stedes timing problem, we tried to look into the source code in order to figure out how the sending of the trigger is synchronized with the actual playing of the sound.
It is the first day of looking into the code, so I am still trying to get the big picture, but:
in ovpCBoxAlgorithmSoundPlayer, it is reasonably clear how the sound is played in the process function.
however, I do not see where the output trigger is generated and sent. If this trigger is independently generated (where?), it would mean that any delay in soundprocessing (in openvibe or in the hardware) would cause stedes unexpected jitter ...
Thanks a lot for your feedback on this problem
mdv
Re: sound player box & timing
Hello,
I'm sorry for the late reply, but if I want to be useful I need to spend some time on it (actually more than 10 minutes here and there when I can).
Here is my 2 cents, maybe it can help (I'll try to do more soon )
The Sound player box uses openal, but only on mono-source. Maybe using multi-sources implementation can be relevant.
This first case happens when the status of openal engine is "sound stopped" but no stim has been sent yet to trigger the "end of sound" event (m_ui64StopTrigger).
There is indeed a delay between this time (the box detected that the sound engine is stopped) and the real stop time. NB : The box process function is called at full openvibe speed (128 Hz).
The cases afterwards are similar:
- The engine is now playing a sound, but no "sound start" stim has been sent yet
- The engine is either stopped or playing, but corresponding stim has already been sent ("idle"), then we send empty chunks of data through the stimulation output of the box, to tell the other boxes that nothing happened at that time.
I hope it will help to understand the implementation.
Laurent
I'm sorry for the late reply, but if I want to be useful I need to spend some time on it (actually more than 10 minutes here and there when I can).
Here is my 2 cents, maybe it can help (I'll try to do more soon )
The Sound player box uses openal, but only on mono-source. Maybe using multi-sources implementation can be relevant.
The output stimulation is managed in the process function, line ~160:however, I do not see where the output trigger is generated and sent.
Code: Select all
ALint l_uiStatus;
alGetSourcei(m_uiSourceHandle, AL_SOURCE_STATE, &l_uiStatus);
// CASE : the sound has stopped, and we need to send the stimulation
if(l_uiStatus == AL_STOPPED && !m_bEndOfSoundSent)
{
ip_pStimulationSet->clear();
ip_pStimulationSet->appendStimulation(
m_ui64StopTrigger,
this->getPlayerContext().getCurrentTime(),
0);
m_pStreamEncoder->process(OVP_GD_Algorithm_StimulationStreamEncoder_InputTriggerId_EncodeBuffer);
l_rDynamicBoxContext.markOutputAsReadyToSend(0, m_ui64LastOutputChunkDate, this->getPlayerContext().getCurrentTime());
m_bEndOfSoundSent = true;
}
There is indeed a delay between this time (the box detected that the sound engine is stopped) and the real stop time. NB : The box process function is called at full openvibe speed (128 Hz).
The cases afterwards are similar:
- The engine is now playing a sound, but no "sound start" stim has been sent yet
- The engine is either stopped or playing, but corresponding stim has already been sent ("idle"), then we send empty chunks of data through the stimulation output of the box, to tell the other boxes that nothing happened at that time.
I hope it will help to understand the implementation.
Laurent
Re: sound player box & timing
Hi,
I am attempting to set up an auditory oddball experiment. (The code for the openvibe scenario file that I am working with is below). My openvibe scenario uses the clock stimulator, but I am wondering if it is possible to set this paradigm up without the clock stimulator. I found your post and was wondering if you could share the lua script that you wrote for the scenario that you created.
Is it possible to set up an auditory oddball experiment without the clock generator? Or is it possible to create a clock stimulator with variable stimulation intervals? Are there clock scripts that permit me to create controlled jitter in the stimulation intervals (or randomization of the interval times)?
Thanks!
Erin
<OpenViBE-Scenario>
<Boxes>
<Box>
<Identifier>(0x00000a6e, 0x0000673d)</Identifier>
<Name>Sound Player</Name>
<AlgorithmClassIdentifier>(0x7ac2396f, 0x7ee52efe)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input triggers</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Resync triggers</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>PLAY trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_01</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>STOP trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>OVTK_StimulationId_EndOfFile</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>File to play</Name>
<DefaultValue>${Path_Data}/plugins/stimulation/ov_beep.wav</DefaultValue>
<Value>C:/Program Files (x86)/openvibe/Audio/Low WoodBlock.wav</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Loop</Name>
<DefaultValue>False</DefaultValue>
<Value>False</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>192</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>400</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd327e20a, 0xaae6b1f8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>84</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00002015, 0x00005db9)</Identifier>
<Name>Keyboard stimulator</Name>
<AlgorithmClassIdentifier>(0x00d317b9, 0x6324c3ff)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Outgoing Stimulations</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filename</Name>
<DefaultValue>../share/openvibe-plugins/stimulation/simple-keyboard-to-stimulations.txt</DefaultValue>
<Value>C:/Alez/eeglike/simple-keyboard-to-stimulations.txt</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>96</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x8d89d3b7, 0x8339d210)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>126</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x0000275b, 0x00004963)</Identifier>
<Name>Lua Stimulator</Name>
<AlgorithmClassIdentifier>(0x0b5a2787, 0x02750621)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>New input</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0xb0d0db45, 0x49cbc34a)</TypeIdentifier>
<Name>Lua Script</Name>
<DefaultValue></DefaultValue>
<Value>C:/Program Files (x86)/openvibe/openvibe_oddball/oddball2.lua</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>34</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
</Attribute>
<Attribute>
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>93</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xf191c1c8, 0xa0123976)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00004ef7, 0x000021ec)</Identifier>
<Name>Clock stimulator</Name>
<AlgorithmClassIdentifier>(0x4f756d3f, 0x29ff0b96)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Generated stimulations</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Interstimulation interval (in sec)</Name>
<DefaultValue>1.0</DefaultValue>
<Value>4.0</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_01</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>64</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x27b3ee3c, 0xc50527e6)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>102</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00005b60, 0x00003d90)</Identifier>
<Name>Stimulation multiplexer</Name>
<AlgorithmClassIdentifier>(0x07db4efa, 0x472b0938)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stimulations 1</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stimulations 2</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Multiplexed stimulations</Name>
</Output>
</Outputs>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>224</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>34</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>128</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd5da9c1d, 0x1cc7dbf9)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>117</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>2</Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000064e0, 0x000015e2)</Identifier>
<Name>Sound Player</Name>
<AlgorithmClassIdentifier>(0x7ac2396f, 0x7ee52efe)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input triggers</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Resync triggers</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>PLAY trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_02</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>STOP trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>OVTK_StimulationId_Label_00</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>File to play</Name>
<DefaultValue>${Path_Data}/plugins/stimulation/ov_beep.wav</DefaultValue>
<Value>C:/Program Files (x86)/openvibe/Audio/QuintoM2R.wav</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Loop</Name>
<DefaultValue>False</DefaultValue>
<Value>False</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>192</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>304</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd327e20a, 0xaae6b1f8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>84</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00006d7b, 0x00000ff5)</Identifier>
<Name>Sound Player</Name>
<AlgorithmClassIdentifier>(0x7ac2396f, 0x7ee52efe)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input triggers</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Resync triggers</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>PLAY trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_03</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>STOP trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>OVTK_StimulationId_EndOfFile</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>File to play</Name>
<DefaultValue>${Path_Data}/plugins/stimulation/ov_beep.wav</DefaultValue>
<Value>C:/Program Files (x86)/openvibe/Audio/Taiko drum.wav</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Loop</Name>
<DefaultValue>False</DefaultValue>
<Value>False</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>192</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>512</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd327e20a, 0xaae6b1f8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>84</Value>
</Attribute>
<Attribute>
<Identifier>(0xc67a01dc, 0x28ce06c1)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x0000164a, 0x0000093c)</Identifier>
<Source>
<BoxIdentifier>(0x00004ef7, 0x000021ec)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>82</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>90</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>256</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x0000188f, 0x00005d28)</Identifier>
<Source>
<BoxIdentifier>(0x00002015, 0x00005db9)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005b60, 0x00003d90)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>114</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>202</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>120</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00002332, 0x0000569c)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005b60, 0x00003d90)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>202</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>135</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00003c8a, 0x0000618b)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006d7b, 0x00000ff5)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>512</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x000052e5, 0x00005888)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000064e0, 0x000015e2)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>304</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00007f5c, 0x000001f8)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00000a6e, 0x0000673d)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>400</Value>
</Attribute>
</Attributes>
</Link>
</Links>
<MessageLinks></MessageLinks>
<Comments></Comments>
<VisualisationTree>
<VisualisationWidget>
<Identifier>(0x00002f84, 0x000063c6)</Identifier>
<Type>3</Type>
<ParentIdentifier>(0xffffffff, 0xffffffff)</ParentIdentifier>
<BoxIdentifier>(0x00002015, 0x00005db9)</BoxIdentifier>
<NumChildren>0</NumChildren>
</VisualisationWidget>
<VisualisationWidget>
<Identifier>(0x00006b61, 0x00004740)</Identifier>
<Name>Default window</Name>
<Type>1</Type>
<ParentIdentifier>(0xffffffff, 0xffffffff)</ParentIdentifier>
<BoxIdentifier>(0xffffffff, 0xffffffff)</BoxIdentifier>
<NumChildren>1</NumChildren>
<Attributes>
<Attribute>
<Identifier>(0x4c90d4ad, 0x7a2554ec)</Identifier>
<Value>320</Value>
</Attribute>
<Attribute>
<Identifier>(0x7b814cca, 0x271df6dd)</Identifier>
<Value>480</Value>
</Attribute>
</Attributes>
</VisualisationWidget>
<VisualisationWidget>
<Identifier>(0x00001dc3, 0x000051b1)</Identifier>
<Name>Default tab</Name>
<Type>2</Type>
<ParentIdentifier>(0x00006b61, 0x00004740)</ParentIdentifier>
<Index>0</Index>
<BoxIdentifier>(0xffffffff, 0xffffffff)</BoxIdentifier>
<NumChildren>1</NumChildren>
</VisualisationWidget>
<VisualisationWidget>
<Identifier>(0x00001da7, 0x00001a30)</Identifier>
<Name>Empty</Name>
<Type>0</Type>
<ParentIdentifier>(0x00001dc3, 0x000051b1)</ParentIdentifier>
<Index>0</Index>
<BoxIdentifier>(0xffffffff, 0xffffffff)</BoxIdentifier>
<NumChildren>0</NumChildren>
</VisualisationWidget>
</VisualisationTree>
</OpenViBE-Scenario>
I am attempting to set up an auditory oddball experiment. (The code for the openvibe scenario file that I am working with is below). My openvibe scenario uses the clock stimulator, but I am wondering if it is possible to set this paradigm up without the clock stimulator. I found your post and was wondering if you could share the lua script that you wrote for the scenario that you created.
Is it possible to set up an auditory oddball experiment without the clock generator? Or is it possible to create a clock stimulator with variable stimulation intervals? Are there clock scripts that permit me to create controlled jitter in the stimulation intervals (or randomization of the interval times)?
Thanks!
Erin
<OpenViBE-Scenario>
<Boxes>
<Box>
<Identifier>(0x00000a6e, 0x0000673d)</Identifier>
<Name>Sound Player</Name>
<AlgorithmClassIdentifier>(0x7ac2396f, 0x7ee52efe)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input triggers</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Resync triggers</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>PLAY trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_01</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>STOP trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>OVTK_StimulationId_EndOfFile</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>File to play</Name>
<DefaultValue>${Path_Data}/plugins/stimulation/ov_beep.wav</DefaultValue>
<Value>C:/Program Files (x86)/openvibe/Audio/Low WoodBlock.wav</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Loop</Name>
<DefaultValue>False</DefaultValue>
<Value>False</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>192</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>400</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd327e20a, 0xaae6b1f8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>84</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00002015, 0x00005db9)</Identifier>
<Name>Keyboard stimulator</Name>
<AlgorithmClassIdentifier>(0x00d317b9, 0x6324c3ff)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Outgoing Stimulations</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>Filename</Name>
<DefaultValue>../share/openvibe-plugins/stimulation/simple-keyboard-to-stimulations.txt</DefaultValue>
<Value>C:/Alez/eeglike/simple-keyboard-to-stimulations.txt</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>96</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x8d89d3b7, 0x8339d210)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>126</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x0000275b, 0x00004963)</Identifier>
<Name>Lua Stimulator</Name>
<AlgorithmClassIdentifier>(0x0b5a2787, 0x02750621)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>New input</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Stimulations</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0xb0d0db45, 0x49cbc34a)</TypeIdentifier>
<Name>Lua Script</Name>
<DefaultValue></DefaultValue>
<Value>C:/Program Files (x86)/openvibe/openvibe_oddball/oddball2.lua</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>34</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
</Attribute>
<Attribute>
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>93</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xf191c1c8, 0xa0123976)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00004ef7, 0x000021ec)</Identifier>
<Name>Clock stimulator</Name>
<AlgorithmClassIdentifier>(0x4f756d3f, 0x29ff0b96)</AlgorithmClassIdentifier>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Generated stimulations</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
<Name>Interstimulation interval (in sec)</Name>
<DefaultValue>1.0</DefaultValue>
<Value>4.0</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>Stimulation</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_01</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>64</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0x27b3ee3c, 0xc50527e6)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>102</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>2</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00005b60, 0x00003d90)</Identifier>
<Name>Stimulation multiplexer</Name>
<AlgorithmClassIdentifier>(0x07db4efa, 0x472b0938)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stimulations 1</Name>
</Input>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input stimulations 2</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Multiplexed stimulations</Name>
</Output>
</Outputs>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>224</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>34</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>128</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd5da9c1d, 0x1cc7dbf9)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>117</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>2</Value>
</Attribute>
<Attribute>
<Identifier>(0xfba64161, 0x65304e21)</Identifier>
<Value></Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x000064e0, 0x000015e2)</Identifier>
<Name>Sound Player</Name>
<AlgorithmClassIdentifier>(0x7ac2396f, 0x7ee52efe)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input triggers</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Resync triggers</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>PLAY trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_02</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>STOP trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>OVTK_StimulationId_Label_00</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>File to play</Name>
<DefaultValue>${Path_Data}/plugins/stimulation/ov_beep.wav</DefaultValue>
<Value>C:/Program Files (x86)/openvibe/Audio/QuintoM2R.wav</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Loop</Name>
<DefaultValue>False</DefaultValue>
<Value>False</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>192</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>304</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd327e20a, 0xaae6b1f8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>84</Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
<Box>
<Identifier>(0x00006d7b, 0x00000ff5)</Identifier>
<Name>Sound Player</Name>
<AlgorithmClassIdentifier>(0x7ac2396f, 0x7ee52efe)</AlgorithmClassIdentifier>
<Inputs>
<Input>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Input triggers</Name>
</Input>
</Inputs>
<Outputs>
<Output>
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
<Name>Resync triggers</Name>
</Output>
</Outputs>
<Settings>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>PLAY trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
<Value>OVTK_StimulationId_Label_03</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
<Name>STOP trigger</Name>
<DefaultValue>OVTK_StimulationId_Label_01</DefaultValue>
<Value>OVTK_StimulationId_EndOfFile</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
<Name>File to play</Name>
<DefaultValue>${Path_Data}/plugins/stimulation/ov_beep.wav</DefaultValue>
<Value>C:/Program Files (x86)/openvibe/Audio/Taiko drum.wav</Value>
</Setting>
<Setting>
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
<Name>Loop</Name>
<DefaultValue>False</DefaultValue>
<Value>False</Value>
</Setting>
</Settings>
<Attributes>
<Attribute>
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
<Value>192</Value>
</Attribute>
<Attribute>
<Identifier>(0x1fa963f5, 0x1a638cd4)</Identifier>
<Value>23</Value>
</Attribute>
<Attribute>
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
<Value>512</Value>
</Attribute>
<Attribute>
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
<Value>(0xd327e20a, 0xaae6b1f8)</Value>
</Attribute>
<Attribute>
<Identifier>(0xad100179, 0xa3c984ab)</Identifier>
<Value>84</Value>
</Attribute>
<Attribute>
<Identifier>(0xc67a01dc, 0x28ce06c1)</Identifier>
<Value></Value>
</Attribute>
<Attribute>
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
<Value>false</Value>
</Attribute>
<Attribute>
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
<Value>1</Value>
</Attribute>
<Attribute>
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
<Value>4</Value>
</Attribute>
<Attribute>
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
<Value>1</Value>
</Attribute>
</Attributes>
</Box>
</Boxes>
<Links>
<Link>
<Identifier>(0x0000164a, 0x0000093c)</Identifier>
<Source>
<BoxIdentifier>(0x00004ef7, 0x000021ec)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>82</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>90</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>256</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x0000188f, 0x00005d28)</Identifier>
<Source>
<BoxIdentifier>(0x00002015, 0x00005db9)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005b60, 0x00003d90)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>114</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>112</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>202</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>120</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00002332, 0x0000569c)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00005b60, 0x00003d90)</BoxIdentifier>
<BoxInputIndex>1</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>202</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>135</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00003c8a, 0x0000618b)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00006d7b, 0x00000ff5)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>512</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x000052e5, 0x00005888)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x000064e0, 0x000015e2)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>304</Value>
</Attribute>
</Attributes>
</Link>
<Link>
<Identifier>(0x00007f5c, 0x000001f8)</Identifier>
<Source>
<BoxIdentifier>(0x0000275b, 0x00004963)</BoxIdentifier>
<BoxOutputIndex>0</BoxOutputIndex>
</Source>
<Target>
<BoxIdentifier>(0x00000a6e, 0x0000673d)</BoxIdentifier>
<BoxInputIndex>0</BoxInputIndex>
</Target>
<Attributes>
<Attribute>
<Identifier>(0x1b32c44c, 0x1905e0e9)</Identifier>
<Value>135</Value>
</Attribute>
<Attribute>
<Identifier>(0x358ae8b5, 0x0f8bacd1)</Identifier>
<Value>256</Value>
</Attribute>
<Attribute>
<Identifier>(0x3f0a3b27, 0x570913d2)</Identifier>
<Value>176</Value>
</Attribute>
<Attribute>
<Identifier>(0x6267b5c5, 0x676e3e42)</Identifier>
<Value>400</Value>
</Attribute>
</Attributes>
</Link>
</Links>
<MessageLinks></MessageLinks>
<Comments></Comments>
<VisualisationTree>
<VisualisationWidget>
<Identifier>(0x00002f84, 0x000063c6)</Identifier>
<Type>3</Type>
<ParentIdentifier>(0xffffffff, 0xffffffff)</ParentIdentifier>
<BoxIdentifier>(0x00002015, 0x00005db9)</BoxIdentifier>
<NumChildren>0</NumChildren>
</VisualisationWidget>
<VisualisationWidget>
<Identifier>(0x00006b61, 0x00004740)</Identifier>
<Name>Default window</Name>
<Type>1</Type>
<ParentIdentifier>(0xffffffff, 0xffffffff)</ParentIdentifier>
<BoxIdentifier>(0xffffffff, 0xffffffff)</BoxIdentifier>
<NumChildren>1</NumChildren>
<Attributes>
<Attribute>
<Identifier>(0x4c90d4ad, 0x7a2554ec)</Identifier>
<Value>320</Value>
</Attribute>
<Attribute>
<Identifier>(0x7b814cca, 0x271df6dd)</Identifier>
<Value>480</Value>
</Attribute>
</Attributes>
</VisualisationWidget>
<VisualisationWidget>
<Identifier>(0x00001dc3, 0x000051b1)</Identifier>
<Name>Default tab</Name>
<Type>2</Type>
<ParentIdentifier>(0x00006b61, 0x00004740)</ParentIdentifier>
<Index>0</Index>
<BoxIdentifier>(0xffffffff, 0xffffffff)</BoxIdentifier>
<NumChildren>1</NumChildren>
</VisualisationWidget>
<VisualisationWidget>
<Identifier>(0x00001da7, 0x00001a30)</Identifier>
<Name>Empty</Name>
<Type>0</Type>
<ParentIdentifier>(0x00001dc3, 0x000051b1)</ParentIdentifier>
<Index>0</Index>
<BoxIdentifier>(0xffffffff, 0xffffffff)</BoxIdentifier>
<NumChildren>0</NumChildren>
</VisualisationWidget>
</VisualisationTree>
</OpenViBE-Scenario>
-
- Posts: 112
- Joined: Sun Mar 14, 2010 12:58 pm
Re: sound player box & timing
Dear Erin,
Indeed, you could setup an auditory oddball using the Lua stimulator rather than the clock stimulator. Using a Lua script you can basically send stimulation whenever you want, including with variable intervals between trials/stimulations. I would recommand you to look at the lua script which is used for the motor imagery CSP scenarios ( in ...\openvibe\share\openvibe\scenarios\bci-examples\motor-imagery-CSP\motor-imagery-bci-graz-stimulator.lua). Indeed, this lua scripts does exactly that, i.e., sending stimulations indicating the trials events at precise timing, including with random variations between trials. You should be able to adapt this script to design an oddball experiment.
I hope this helps,
Best regards,
Fabien
Indeed, you could setup an auditory oddball using the Lua stimulator rather than the clock stimulator. Using a Lua script you can basically send stimulation whenever you want, including with variable intervals between trials/stimulations. I would recommand you to look at the lua script which is used for the motor imagery CSP scenarios ( in ...\openvibe\share\openvibe\scenarios\bci-examples\motor-imagery-CSP\motor-imagery-bci-graz-stimulator.lua). Indeed, this lua scripts does exactly that, i.e., sending stimulations indicating the trials events at precise timing, including with random variations between trials. You should be able to adapt this script to design an oddball experiment.
I hope this helps,
Best regards,
Fabien
Re: sound player box & timing
Hi Fabien,
Thanks for the information! Are you able to attach the lua script that you referred me to in this post or provide a direct link to it? I'm not able to find the actual lua script in in...\openvibe\share\openvibe\scenarios\bci-examples\motor-imagery-CSP\motor-imagery-bci-graz-stimulator.lua.
Thanks,
Erin
Thanks for the information! Are you able to attach the lua script that you referred me to in this post or provide a direct link to it? I'm not able to find the actual lua script in in...\openvibe\share\openvibe\scenarios\bci-examples\motor-imagery-CSP\motor-imagery-bci-graz-stimulator.lua.
Thanks,
Erin
-
- Posts: 112
- Joined: Sun Mar 14, 2010 12:58 pm
Re: sound player box & timing
Hi,
I don't have a direct link for that file, but you can have a look at the following OpenViBE scenarios, which also contains a Lua script which does send stimulations at specific times: http://openvibe.inria.fr/openvibe/wp-co ... r-demo.zip
I hope it will be useful,
Best,
Fabien
I don't have a direct link for that file, but you can have a look at the following OpenViBE scenarios, which also contains a Lua script which does send stimulations at specific times: http://openvibe.inria.fr/openvibe/wp-co ... r-demo.zip
I hope it will be useful,
Best,
Fabien