init
This commit is contained in:
+1
@@ -0,0 +1 @@
|
||||
This folder contains configuration files created by the SSVEP scenarios.
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains materials created by the SSVEP scenarios.
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains classifiers and CSP filters created by the SSVEP scenarios.
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains configuration files generated by the scenarios.
|
||||
+672
@@ -0,0 +1,672 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>OpenVIBE</Creator>
|
||||
<CreatorVersion>0.1.99</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00000efb, 0x00007452)</Identifier>
|
||||
<Name>Time based epoching</Name>
|
||||
<AlgorithmClassIdentifier>(0x00777fa0, 0x5dc3f560)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Epoched signal 1</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Epoch 1 duration (in sec)</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>2.000000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Epoch 1 intervals (in sec)</Name>
|
||||
<DefaultValue>0.5</DefaultValue>
|
||||
<Value>0.250000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>112.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xc5ff41e9, 0xccc59a01)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x002363af)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000026ba, 0x000014fc)</Identifier>
|
||||
<Name>Spectral analysis</Name>
|
||||
<AlgorithmClassIdentifier>(0x84218ff8, 0xa87e7995)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Amplitude</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Phase</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Real Part</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Imag Part</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Amplitude</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Phase</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Real Part</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Imaginary Part</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>192.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x4e5c55a0, 0xe69eb7db)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x004039af)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000441d, 0x00001a28)</Identifier>
|
||||
<Name>Acquisition client</Name>
|
||||
<AlgorithmClassIdentifier>(0x35d225cb, 0x3e6e3a5f)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Signal stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x013df452, 0xa3a8879a)</TypeIdentifier>
|
||||
<Name>Channel localisation</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
|
||||
<Name>Channel units</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Acquisition server hostname</Name>
|
||||
<DefaultValue>${AcquisitionServer_HostName}</DefaultValue>
|
||||
<Value>${AcquisitionServer_HostName}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Acquisition server port</Name>
|
||||
<DefaultValue>1024</DefaultValue>
|
||||
<Value>1024</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>-16.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x0d4656c0, 0xc95b1fa8)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00596403)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>5</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00006e09, 0x00006c54)</Identifier>
|
||||
<Name>Temporal filter</Name>
|
||||
<AlgorithmClassIdentifier>(0xb4f9d042, 0x9d79f2e5)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Filtered signal</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2f2c606c, 0x8512ed68)</TypeIdentifier>
|
||||
<Name>Filter method</Name>
|
||||
<DefaultValue>Butterworth</DefaultValue>
|
||||
<Value>Butterworth</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xfa20178e, 0x4cba62e9)</TypeIdentifier>
|
||||
<Name>Filter type</Name>
|
||||
<DefaultValue>Band pass</DefaultValue>
|
||||
<Value>Band pass</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Filter order</Name>
|
||||
<DefaultValue>4</DefaultValue>
|
||||
<Value>4</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Low cut frequency (Hz)</Name>
|
||||
<DefaultValue>29</DefaultValue>
|
||||
<Value>3.000000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>High cut frequency (Hz)</Name>
|
||||
<DefaultValue>40</DefaultValue>
|
||||
<Value>40.000000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Pass band ripple (dB)</Name>
|
||||
<DefaultValue>0.5</DefaultValue>
|
||||
<Value>0.500000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>48.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x27a4ceec, 0x876d6384)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x005c78a8)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>6</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00006ff2, 0x000035c1)</Identifier>
|
||||
<Name>Signal display</Name>
|
||||
<AlgorithmClassIdentifier>(0x0055be5f, 0x087bdd12)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Data</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
|
||||
<Name>Channel Units</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5de046a6, 0x086340aa)</TypeIdentifier>
|
||||
<Name>Display Mode</Name>
|
||||
<DefaultValue>Scan</DefaultValue>
|
||||
<Value>Scan</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x33a30739, 0x00d5299b)</TypeIdentifier>
|
||||
<Name>Auto vertical scale</Name>
|
||||
<DefaultValue>Per channel</DefaultValue>
|
||||
<Value>Per channel</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Scale refresh interval (secs)</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Scale</Name>
|
||||
<DefaultValue>100</DefaultValue>
|
||||
<Value>100</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Offset</Name>
|
||||
<DefaultValue>0</DefaultValue>
|
||||
<Value>0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Time Scale</Name>
|
||||
<DefaultValue>10</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Horizontal ruler</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Vertical ruler</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Multiview</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>112.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>752.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x92c056a7, 0x2dc71aff)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x0020924b)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>9</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x4f539eea, 0x4f1d2b36)</Identifier>
|
||||
<Name>Instant Bars</Name>
|
||||
<AlgorithmClassIdentifier>(0xecb46081, 0x96da0d49)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Matrix</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Channel Localisation</Name>
|
||||
<DefaultValue>${AdvancedViz_ChannelLocalisation}</DefaultValue>
|
||||
<Value>${AdvancedViz_ChannelLocalisation}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Positive Data Only ?</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Gain</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Caption</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value></Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Translucency</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
|
||||
<Name>Color</Name>
|
||||
<DefaultValue>${AdvancedViz_DefaultColorGradient}</DefaultValue>
|
||||
<Value>${AdvancedViz_DefaultColorGradient}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x6b60e2b2, 0xf4839b7d)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>6</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00000c5d, 0x00003e97)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00000efb, 0x00007452)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000026ba, 0x000014fc)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000235d, 0x00005682)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000441d, 0x00001a28)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006e09, 0x00006c54)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003f9c, 0x000047e9)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006e09, 0x00006c54)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006ff2, 0x000035c1)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006d4e, 0x0000333e)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006e09, 0x00006c54)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00000efb, 0x00007452)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x2146ff07, 0x607b577b)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000026ba, 0x000014fc)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x4f539eea, 0x4f1d2b36)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00002d94, 0x00007404)</Identifier>
|
||||
<Text>Display the signal from all channels </Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>960.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>112.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00004efd, 0x0000146d)</Identifier>
|
||||
<Text>You can browse each box' documentation by selecting the box and pressing <b>F1</b>
|
||||
|
||||
This scenario set is documented in 'http://openvibe.inria.fr/using-the-ssvep-mind-shooter-scenarios/'</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>528</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>-112</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00007577, 0x000059a7)</Identifier>
|
||||
<Text><b><big>Acquisition test</big></b>
|
||||
|
||||
Scenario used for testing data acquisition. The signal quality should
|
||||
always be checked before training.
|
||||
|
||||
You can monitor signals from all of the electrodes. Individual
|
||||
signals are shown for each channel, as well as FFT power of all channels.
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>224.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>16.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":776,"identifier":"(0x00002985, 0x00004ff2)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":753},{"boxIdentifier":"(0x4f539eea, 0x4f1d2b36)","childCount":0,"identifier":"(0x470943ea, 0x174708bb)","parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x000024d0, 0x00004b7a)","index":0,"name":"Default tab","parentIdentifier":"(0x00002985, 0x00004ff2)","type":2},{"boxIdentifier":"(0x00006ff2, 0x000035c1)","childCount":0,"identifier":"(0x00003256, 0x00006784)","index":0,"parentIdentifier":"(0x000024d0, 0x00004b7a)","type":3}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value>Jozef Legeny</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>1.0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>SSVEP Acquisition Test</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value>http://openvibe.inria.fr/using-the-ssvep-mind-shooter-scenarios/</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value>SSVEP</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value>Inria</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+583
@@ -0,0 +1,583 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>Designer</Creator>
|
||||
<CreatorVersion>2.0.0</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00000533, 0x00001c79)</Identifier>
|
||||
<Name>Experiment Settings</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>${Player_ScenarioDirectory}/scripts/configuration-experiment-settings.lua</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x7f45a2a9, 0x7db12219)</TypeIdentifier>
|
||||
<Name>Target Light Color</Name>
|
||||
<DefaultValue>100,0,0</DefaultValue>
|
||||
<Value>100,0,0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x7f45a2a9, 0x7db12219)</TypeIdentifier>
|
||||
<Name>Target Dark Color</Name>
|
||||
<DefaultValue>0,0,0</DefaultValue>
|
||||
<Value>10,0,0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Stimulation Frequencies</Name>
|
||||
<DefaultValue>20;15;12</DefaultValue>
|
||||
<Value>5.454545;6.6666;7.5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Processing Epoch Duration</Name>
|
||||
<DefaultValue>0.5</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Processing Epoch Interval</Name>
|
||||
<DefaultValue>0.1</DefaultValue>
|
||||
<Value>0.1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Processing Frequency Tolerance</Name>
|
||||
<DefaultValue>0.250</DefaultValue>
|
||||
<Value>0.25</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>CSP Spatial Filter Order</Name>
|
||||
<DefaultValue>3</DefaultValue>
|
||||
<Value>6</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Focus Point</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>400</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
|
||||
<Value></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>(0x000024b5, 0x00000bb5)</Identifier>
|
||||
<Name>Peripheral Settings</Name>
|
||||
<AlgorithmClassIdentifier>(0x0b5a2787, 0x02750621)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xb0d0db45, 0x49cbc34a)</TypeIdentifier>
|
||||
<Name>Lua Script</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/scripts/configuration-peripheral-settings.lua</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Screen Refresh Rate</Name>
|
||||
<DefaultValue>60</DefaultValue>
|
||||
<Value>60</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Window Width</Name>
|
||||
<DefaultValue>800</DefaultValue>
|
||||
<Value>800</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Window Height</Name>
|
||||
<DefaultValue>600</DefaultValue>
|
||||
<Value>600</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Fullscreen</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>64</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
|
||||
<Value></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>(0x00004bf3, 0x00007808)</Identifier>
|
||||
<Name>Player Controller</Name>
|
||||
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_TrainCompleted</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
|
||||
<Name>Action to perform</Name>
|
||||
<DefaultValue>Pause</DefaultValue>
|
||||
<Value>Stop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>528</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00005dd3, 0x00000cf3)</Identifier>
|
||||
<Name>EEG Input Settings</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>${Player_ScenarioDirectory}/scripts/configuration-eeg-input-settings.lua</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Channels</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>:</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x3bcf9e67, 0x0c23994d)</TypeIdentifier>
|
||||
<Name>Selection Method</Name>
|
||||
<DefaultValue>Reject</DefaultValue>
|
||||
<Value>Select</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x666f25e9, 0x3e5738d6)</TypeIdentifier>
|
||||
<Name>Match Method</Name>
|
||||
<DefaultValue>Smart</DefaultValue>
|
||||
<Value>Smart</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Training Data File</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Testing Data File</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
|
||||
<Value></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>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x000011e3, 0x00005213)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000024b5, 0x00000bb5)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005dd3, 0x00000cf3)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002afe, 0x00005880)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005dd3, 0x00000cf3)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00000533, 0x00001c79)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000591f, 0x00006602)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00000533, 0x00001c79)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004bf3, 0x00007808)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00000df6, 0x00003d56)</Identifier>
|
||||
<Text><big><b>Experiment Settings</b></big>
|
||||
|
||||
Settings concerning the SSVEP experiment in general.
|
||||
|
||||
<b>Target Light Color</b> and <b>Target Dark Color</b> represent
|
||||
the two colors which will be used to generate the flickering of
|
||||
the targets. The notation Light and Dark is arbitrary, however on
|
||||
frequencies using odd number of frames will use more frames to
|
||||
represent the Light color.
|
||||
|
||||
<b>Screen Refresh Rate : </b> The refresh rate of your screen,
|
||||
refer to your screen's user manual to find this value.
|
||||
|
||||
<span color="red">Important notice</span>
|
||||
|
||||
Your screen will be able to reproduce only frequencies which
|
||||
are result of division of your screen refresh rate by an
|
||||
integer.
|
||||
|
||||
<b>Stimulation Frequencies</b> A comma separated list of
|
||||
frequencies used for the stimulation. Refer to the documentation
|
||||
for more details.
|
||||
|
||||
<b>Processing Epoch Duration</b> The length of the slice of the signal
|
||||
which will be used to find SSVEP response. With longer duration precision
|
||||
will increase at the detriment of the lag.
|
||||
|
||||
<b>Processing Epoch Interval</b> The speed interval between slices of the
|
||||
signal.
|
||||
|
||||
<b>Processing Frequency Tolerance</b> The width of the frequency band
|
||||
around the stimulation frequency used for classification.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>-176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>128</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x0000187e, 0x00005350)</Identifier>
|
||||
<Text> <b><span color="#2060ff">Configurable box</span></b>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>400</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x0000288f, 0x00005f55)</Identifier>
|
||||
<Text><b>Welcome to the 'classic' SSVEP Mind Shooter</b>
|
||||
|
||||
Binary classifiers and CSP are used
|
||||
by the signal processing pipelines.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>-176.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>-192.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x000031b0, 0x00003fa0)</Identifier>
|
||||
<Text><big><b>Scenario description</b></big>
|
||||
|
||||
<b><span color="red">This scenario must be run at least once before
|
||||
running any further SSVEP scenarios</span></b>
|
||||
|
||||
This is a scenario where you can configure your SSVEP experiment. There
|
||||
are two boxes containing configuration parameters:
|
||||
|
||||
<b>Peripheral Settings</b>
|
||||
|
||||
<b>Experiment Settings</b>
|
||||
|
||||
For more detailed description please refer to the SSVEP
|
||||
documentation page.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>336</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>-160</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00003244, 0x00004359)</Identifier>
|
||||
<Text> <b><span color="#2060ff">Configurable box</span></b>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>64</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00005ca6, 0x00003399)</Identifier>
|
||||
<Text> <b><span color="#2060ff">Configurable box</span></b>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":1,"identifier":"(0x00005488, 0x0000451f)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00000bbf, 0x000047e2)","index":0,"name":"Default tab","parentIdentifier":"(0x00005488, 0x0000451f)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x000017e4, 0x00003d53)","index":0,"name":"Empty","parentIdentifier":"(0x00000bbf, 0x000047e2)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value>Jozef Legeny</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>1.0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>SSVEP Configuration</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value>http://openvibe.inria.fr/using-the-ssvep-mind-shooter-scenarios/</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value>SSVEP</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value>Inria</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+1300
File diff suppressed because it is too large
Load Diff
+3570
File diff suppressed because it is too large
Load Diff
+8110
File diff suppressed because it is too large
Load Diff
+5380
File diff suppressed because it is too large
Load Diff
+4250
File diff suppressed because it is too large
Load Diff
+41
@@ -0,0 +1,41 @@
|
||||
flip_count = 0
|
||||
switched_flip_count = 0
|
||||
flips = {}
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
flip_count = box:get_input_count()
|
||||
|
||||
for i = 1, flip_count do
|
||||
flips[i] = false
|
||||
end
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() and switched_flip_count < flip_count do
|
||||
|
||||
for i = 1, flip_count do
|
||||
if box:get_stimulation_count(i) > 0 then
|
||||
|
||||
box:remove_stimulation(i, 1)
|
||||
|
||||
if not flips[i] then
|
||||
switched_flip_count = switched_flip_count + 1
|
||||
flips[i] = true
|
||||
|
||||
io.write("Flip ", i, " of ", flip_count, " switched\n")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_Label_00, box:get_current_time())
|
||||
end
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
targets = {}
|
||||
non_targets = {}
|
||||
sent_stimulation = 0
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
-- read the parameters of the box
|
||||
|
||||
s_targets = box:get_setting(2)
|
||||
|
||||
for t in s_targets:gmatch("%d+") do
|
||||
targets[t + 0] = true
|
||||
end
|
||||
|
||||
s_non_targets = box:get_setting(3)
|
||||
|
||||
for t in s_non_targets:gmatch("%d+") do
|
||||
non_targets[t + 0] = true
|
||||
end
|
||||
|
||||
sent_stimulation = _G[box:get_setting(4)]
|
||||
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
finished = false
|
||||
|
||||
while box:keep_processing() and not finished do
|
||||
|
||||
time = box:get_current_time()
|
||||
|
||||
while box:get_stimulation_count(1) > 0 do
|
||||
|
||||
s_code, s_date, s_duration = box:get_stimulation(1, 1)
|
||||
box:remove_stimulation(1, 1)
|
||||
|
||||
|
||||
|
||||
if s_code >= OVTK_StimulationId_Label_00 and s_code <= OVTK_StimulationId_Label_1F then
|
||||
|
||||
received_stimulation = s_code - OVTK_StimulationId_Label_00
|
||||
|
||||
|
||||
if targets[received_stimulation] ~= nil then
|
||||
box:send_stimulation(1, sent_stimulation, time)
|
||||
elseif non_targets[received_stimulation] ~= nil then
|
||||
box:send_stimulation(2, sent_stimulation, time)
|
||||
end
|
||||
|
||||
elseif s_code == OVTK_StimulationId_ExperimentStop then
|
||||
finished = true
|
||||
end
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
channels = nil
|
||||
selection_method = nil
|
||||
match_method = nil
|
||||
|
||||
training_datafile = nil
|
||||
testing_datafile = nil
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
channels = box:get_setting(2)
|
||||
selection_method = box:get_setting(3)
|
||||
match_method = box:get_setting(4)
|
||||
training_datafile = box:get_setting(5)
|
||||
testing_datafile = box:get_setting(6)
|
||||
|
||||
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() and box:get_stimulation_count(1) == 0 do
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
-- create material
|
||||
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/channel-selector.cfg'"))
|
||||
|
||||
cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/configuration/channel-selector.cfg"), "w")
|
||||
|
||||
if cfg_file == nil then
|
||||
box:log("Error", "Could not open config file for writing")
|
||||
end
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", channels))
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", selection_method))
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", match_method))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/file-reader-training.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/file-reader-training.cfg"), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", training_datafile))
|
||||
-- cfg_file:write(string.format("<SettingValue>32</SettingValue>\n"))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/file-reader-testing.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/file-reader-testing.cfg"), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", testing_datafile))
|
||||
-- cfg_file:write(string.format("<SettingValue>32</SettingValue>\n"))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
|
||||
|
||||
|
||||
-- notify the scenario that the configuration process is complete
|
||||
box:send_stimulation(1, OVTK_StimulationId_TrainCompleted, box:get_current_time() + 0.2, 0)
|
||||
|
||||
end
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
stimulation_frequencies = {}
|
||||
frequency_count = 0
|
||||
|
||||
target_light_color = {}
|
||||
target_dark_color = {}
|
||||
training_target_size = {}
|
||||
training_targets_positions = {}
|
||||
|
||||
processing_epoch_duration = nil
|
||||
processing_epoch_interval = nil
|
||||
processing_frequency_tolerance = nil
|
||||
csp_filter_order = nil
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
for value in box:get_setting(2):gmatch("%d+") do
|
||||
table.insert(target_light_color, value)
|
||||
end
|
||||
|
||||
for value in box:get_setting(3):gmatch("%d+") do
|
||||
table.insert(target_dark_color, value)
|
||||
end
|
||||
|
||||
for value in box:get_setting(4):gmatch("%d+[.]?%d*") do
|
||||
table.insert(stimulation_frequencies, value)
|
||||
frequency_count = frequency_count + 1
|
||||
end
|
||||
|
||||
processing_epoch_duration = box:get_setting(5)
|
||||
processing_epoch_interval = box:get_setting(6)
|
||||
processing_frequency_tolerance = box:get_setting(7)
|
||||
csp_filter_order = box:get_setting(8)
|
||||
s_focus_point = box:get_setting(9)
|
||||
|
||||
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() and box:get_stimulation_count(1) == 0 do
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
-- create material
|
||||
|
||||
box:log("Info", box:get_config("Creating materials in '${Player_ScenarioDirectory}/appconf/materials/flickering.material'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/appconf/materials/flickering.material"), "w"))
|
||||
|
||||
cfg_file:write("material target_bright\n")
|
||||
cfg_file:write("{\n")
|
||||
cfg_file:write(" technique\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" pass\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" ambient 0 0 0 0\n")
|
||||
cfg_file:write(" diffuse 0 0 0 0\n")
|
||||
cfg_file:write(" specular 0 0 0 0\n")
|
||||
cfg_file:write(" emissive ", target_light_color[1] / 100, " ", target_light_color[2] / 100, " ", target_light_color[3] / 100, "\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write("}\n")
|
||||
cfg_file:write("material target_dark\n")
|
||||
cfg_file:write("{\n")
|
||||
cfg_file:write(" technique\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" pass\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" ambient 0 0 0 0\n")
|
||||
cfg_file:write(" diffuse 0 0 0 0\n")
|
||||
cfg_file:write(" specular 0 0 0 0\n")
|
||||
cfg_file:write(" emissive ", target_dark_color[1] / 100, " ", target_dark_color[2] / 100, " ", target_dark_color[3] / 100, "\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write("}\n")
|
||||
cfg_file:close()
|
||||
|
||||
-- prepare the datafolder
|
||||
|
||||
foldername = box:get_config("${Player_ScenarioDirectory}/signals/userdata-[$core{date}-$core{time}]")
|
||||
os.execute(string.format("mkdir \"%s\"", foldername))
|
||||
|
||||
box:log("Info", box:get_config("Writing additional configuration to '${Player_ScenarioDirectory}/appconf/application-configuration.conf'"))
|
||||
|
||||
-- this file was generated by configuration-peripheral-settings.lua, here we just add to it
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/appconf/application-configuration.conf"), "a"))
|
||||
|
||||
for i=1,frequency_count do
|
||||
cfg_file:write("SSVEP_Frequency_", i, " = ", string.format("%g", stimulation_frequencies[i]), "\n")
|
||||
end
|
||||
|
||||
cfg_file:write(string.format("SSVEP_TargetLightColourRed = %f\n", target_light_color[1] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetLightColourGreen = %f\n", target_light_color[2] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetLightColourBlue = %f\n", target_light_color[3] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetDarkColourRed = %f\n", target_dark_color[1] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetDarkColourGreen = %f\n", target_dark_color[2] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetDarkColourBlue = %f\n", target_dark_color[3] / 100))
|
||||
|
||||
cfg_file:write("SSVEP_UserDataFolder = ", foldername, "\n")
|
||||
cfg_file:write("SSVEP_FocusPoint = ", s_focus_point, "\n")
|
||||
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
-- create configuration files for temporal filters
|
||||
|
||||
for i=1,frequency_count do
|
||||
box:log("Info", string.format(box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%db.cfg'"), i))
|
||||
|
||||
cfg_file = assert(io.open(string.format(box:get_config("${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%db.cfg"), i), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write("<SettingValue>Butterworth</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>Band pass</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>4</SettingValue>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] - processing_frequency_tolerance))
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] + processing_frequency_tolerance))
|
||||
cfg_file:write("<SettingValue>0.500000</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", string.format(box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%dh1.cfg'"), i))
|
||||
|
||||
cfg_file = assert(io.open(string.format(box:get_config("${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%dh1.cfg"), i), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write("<SettingValue>Butterworth</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>Band pass</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>4</SettingValue>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] * 2 - processing_frequency_tolerance))
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] * 2 + processing_frequency_tolerance))
|
||||
cfg_file:write("<SettingValue>0.500000</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", string.format(box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/csp-spatial-filter-trainer-%db.cfg'"), i))
|
||||
|
||||
cfg_file = assert(io.open(string.format(box:get_config("${Player_ScenarioDirectory}/configuration/csp-spatial-filter-trainer-%db.cfg"), i), "w"))
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(" <SettingValue>OVTK_StimulationId_ExperimentStop</SettingValue>\n")
|
||||
cfg_file:write(string.format(box:get_config(" <SettingValue>${Player_ScenarioDirectory}/classifiers/csp-%db</SettingValue>\n"), i))
|
||||
cfg_file:write(string.format(" <SettingValue>%d</SettingValue>\n", csp_filter_order))
|
||||
cfg_file:write(" <SettingValue></SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", string.format(box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/csp-spatial-filter-trainer-%dh1.cfg'"), i))
|
||||
|
||||
cfg_file = assert(io.open(string.format(box:get_config("${Player_ScenarioDirectory}/configuration/csp-spatial-filter-trainer-%dh1.cfg"), i), "w"))
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(" <SettingValue>OVTK_StimulationId_ExperimentStop</SettingValue>\n")
|
||||
cfg_file:write(string.format(box:get_config(" <SettingValue>${Player_ScenarioDirectory}/classifiers/csp-%dh1</SettingValue>\n"), i))
|
||||
cfg_file:write(string.format(" <SettingValue>%d</SettingValue>\n", csp_filter_order))
|
||||
cfg_file:write(" <SettingValue></SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:close()
|
||||
|
||||
end
|
||||
|
||||
-- create configuration file for time based epoching
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/time-based-epoching.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/time-based-epoching.cfg"), "w"))
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", processing_epoch_duration))
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", processing_epoch_interval))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:close()
|
||||
|
||||
-- create the file writer configuration
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/file-writer.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/file-writer.cfg"), "w"))
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s/eeg-data-[$core{date}-$core{time}].ov</SettingValue>\n", foldername))
|
||||
cfg_file:write("<SettingValue>false</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/csp-filter.cfg'"))
|
||||
|
||||
-- notify the scenario that the configuration process is complete
|
||||
box:send_stimulation(1, OVTK_StimulationId_TrainCompleted, box:get_current_time() + 0.2, 0)
|
||||
|
||||
end
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
vrpn_host = nil
|
||||
vrpn_port = nil
|
||||
screen_refresh_rate = nil
|
||||
window_width = nil
|
||||
window_height = nil
|
||||
fullscreen = nil
|
||||
|
||||
function initialize(box)
|
||||
screen_refresh_rate = box:get_setting(2)
|
||||
window_width = box:get_setting(3)
|
||||
window_height = box:get_setting(4)
|
||||
fullscreen = box:get_setting(5)
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
|
||||
box:log("Info", box:get_config("Generating '${Player_ScenarioDirectory}/appconf/application-configuration.conf'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/appconf/application-configuration.conf"), "w"))
|
||||
|
||||
cfg_file:write("# This file was automatically generated!\n\n")
|
||||
cfg_file:write("# If you want to change the SSVEP configuration\n")
|
||||
cfg_file:write("# please use the provided ssvep-configuration scenario.\n")
|
||||
|
||||
cfg_file:write("SSVEP_ScreenRefreshRate = ", screen_refresh_rate, "\n")
|
||||
cfg_file:write("SSVEP_VRPNServerPort = 1337\n")
|
||||
cfg_file:write("SSVEP_VRPNHost = localhost\n")
|
||||
|
||||
-- cfg_file:close()
|
||||
|
||||
-- box:log("Info", box:get_config("Generating '${Player_ScenarioDirectory}/appconf/ogre-configuration.conf'"))
|
||||
|
||||
-- cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/appconf/ogre-configuration.conf"), "w")
|
||||
|
||||
-- cfg_file:write("# This file was automatically generated!\n\n")
|
||||
-- cfg_file:write("# If you want to change the SSVEP configuration\n")
|
||||
-- cfg_file:write("# please use the provided ssvep-configuration scenario.\n")
|
||||
|
||||
cfg_file:write("SSVEP_Ogre_LogToConsole = False\n")
|
||||
|
||||
cfg_file:write("SSVEP_Ogre_ScreenWidth = ", window_width, "\n")
|
||||
cfg_file:write("SSVEP_Ogre_ScreenHeight = ", window_height, "\n")
|
||||
cfg_file:write("SSVEP_Ogre_FullScreen = ", fullscreen, "\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_TrainCompleted, box:get_current_time() + 0.2, 0)
|
||||
end
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
classes = nil
|
||||
|
||||
do_debug = false;
|
||||
|
||||
score = {}
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
classes = box:get_setting(2)
|
||||
|
||||
for j = 1, classes do
|
||||
score[j] = {}
|
||||
for i = 1, classes do
|
||||
score[j][i] = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
|
||||
correct = 0
|
||||
incorrect = 0
|
||||
|
||||
for j = 1, classes do
|
||||
|
||||
output = string.format("Target %d : ", j - 1)
|
||||
inClass = 0
|
||||
|
||||
for i = 1, classes do
|
||||
inClass = inClass + score[j][i]
|
||||
end
|
||||
|
||||
for i = 1, classes do
|
||||
output = output .. string.format("%d : %5.1f%%, ", i - 1, 100*score[j][i]/inClass)
|
||||
|
||||
if i == j then
|
||||
correct = correct + score[j][i]
|
||||
else
|
||||
incorrect = incorrect + score[j][i]
|
||||
end
|
||||
end
|
||||
|
||||
box:log("Info", string.format("%s total %d", output, inClass))
|
||||
end
|
||||
|
||||
box:log("Info", string.format("Correct %4d -> %5.1f%%", correct, 100*correct/(correct+incorrect)))
|
||||
box:log("Info", string.format("Incorrect %4d -> %5.1f%%", incorrect, 100*incorrect/(correct+incorrect)))
|
||||
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
finished = false
|
||||
trials = {}
|
||||
trialNum = 0
|
||||
|
||||
while not finished and box:keep_processing() do
|
||||
|
||||
-- time = box:get_current_time()
|
||||
|
||||
while box:get_stimulation_count(1) > 0 do
|
||||
|
||||
s_code, s_date, s_duration = box:get_stimulation(1, 1)
|
||||
box:remove_stimulation(1, 1)
|
||||
|
||||
if s_code >= OVTK_StimulationId_Label_00 and s_code <= OVTK_StimulationId_Label_1F then
|
||||
if do_debug then box:log("Info", string.format("Received target %d at ", s_code) .. s_date) end
|
||||
|
||||
trialNum = trialNum + 1
|
||||
trials[trialNum]={}
|
||||
trials[trialNum].class = s_code - OVTK_StimulationId_Label_00 + 1
|
||||
trials[trialNum].start_time = 9999999999;
|
||||
trials[trialNum].stop_time = 9999999999;
|
||||
|
||||
elseif s_code == OVTK_StimulationId_VisualStimulationStart then
|
||||
if do_debug then box:log("Info", "Trial started at " .. s_date) end
|
||||
trials[trialNum].start_time = s_date;
|
||||
|
||||
elseif s_code == OVTK_StimulationId_VisualStimulationStop then
|
||||
if do_debug then box:log("Info", "Trial ended at " .. s_date) end
|
||||
trials[trialNum].stop_time = s_date;
|
||||
|
||||
elseif s_code == OVTK_StimulationId_ExperimentStop then
|
||||
finished = true
|
||||
end
|
||||
end
|
||||
|
||||
while box:get_stimulation_count(2) > 0 do
|
||||
|
||||
s_code, s_date, s_duration = box:get_stimulation(2, 1)
|
||||
box:remove_stimulation(2, 1)
|
||||
|
||||
if do_debug then box:log("Info", string.format("Received prediction %d at ", s_code) .. s_date) end
|
||||
|
||||
if (s_code >= OVTK_StimulationId_Label_00 and s_code <= OVTK_StimulationId_Label_1F) then
|
||||
-- not the fastest but ok for small trial amounts
|
||||
for i = trialNum,1,-1 do
|
||||
if s_date >= trials[i].start_time and s_date <= trials[i].stop_time then
|
||||
|
||||
if do_debug then box:log("Info", string.format("Accepted prediction %d at ", s_code) .. s_date) end
|
||||
|
||||
real_target = trials[i].class
|
||||
prediction = s_code - OVTK_StimulationId_Label_00 + 1
|
||||
|
||||
-- if do_debug then box:log("Info", string.format(" -> %d %d ", real_target, prediction)) end
|
||||
|
||||
score[real_target][prediction] = score[real_target][prediction] + 1
|
||||
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
buffer = {}
|
||||
|
||||
function initialize(box)
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
-- This script receives stimulations and lets pass only every other one
|
||||
-- for each stimulation code
|
||||
-- Useful to remove "key up" events of keyboard stimulator
|
||||
function process(box)
|
||||
|
||||
while (box:keep_processing()) do
|
||||
|
||||
for index = 1, box:get_stimulation_count(1) do
|
||||
|
||||
stimulation = box:get_stimulation(1, index)
|
||||
|
||||
if buffer[stimulation] == nil then
|
||||
box:send_stimulation(1, stimulation, box:get_current_time(), 0)
|
||||
buffer[stimulation] = 1
|
||||
else
|
||||
buffer[stimulation] = nil
|
||||
end
|
||||
|
||||
box:remove_stimulation(1, 1)
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
class_count = 0
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
class_count = box:get_setting(2)
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() do
|
||||
|
||||
if box:get_stimulation_count(1) > 0 then
|
||||
|
||||
local decision = 0
|
||||
local conflict = false
|
||||
|
||||
-- check each input
|
||||
for i = 1, class_count do
|
||||
-- if the frequency is considered as stimulated
|
||||
stim_id = box:get_stimulation(i, 1)
|
||||
-- box:log("Info", string.format("Received %d from %d", stim_id, i))
|
||||
if stim_id == OVTK_StimulationId_Label_01 then
|
||||
if decision ~= 0 then
|
||||
conflict = true
|
||||
end
|
||||
decision = i
|
||||
end
|
||||
box:remove_stimulation(i, 1)
|
||||
end
|
||||
|
||||
-- If several classifiers predict 'in class', predict no action class 0 instead.
|
||||
if conflict then
|
||||
decision = 0
|
||||
end
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_Label_00 + decision, box:get_current_time() + 0.01, 0)
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
end
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
sequence = {}
|
||||
flickeringDelay = nil
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
s_sequence_types = box:get_setting(2)
|
||||
s_sequence_positions = box:get_setting(3)
|
||||
s_target_lockdown = box:get_setting(4)
|
||||
s_pilot_assist = box:get_setting(5)
|
||||
s_feedback = box:get_setting(6)
|
||||
s_onebyone = box:get_setting(7)
|
||||
s_analog_control = box:get_setting(8)
|
||||
s_log_level = box:get_setting(9)
|
||||
|
||||
box:log("Info", string.format("Target Types Sequence : [%s]\n", s_sequence_types))
|
||||
|
||||
for target in s_sequence_positions:gmatch("%d+") do
|
||||
table.insert(sequence, target)
|
||||
end
|
||||
|
||||
-- create the configuration file for the shooter application
|
||||
cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/appconf/shooter-configuration.conf"), "w")
|
||||
|
||||
cfg_file:write("SSVEP_EnemyOrder = ", s_sequence_types, "\n")
|
||||
cfg_file:write("SSVEP_TargetLockdown = ", s_target_lockdown, "\n")
|
||||
cfg_file:write("SSVEP_PilotAssist = ", s_pilot_assist, "\n")
|
||||
cfg_file:write("SSVEP_Feedback = ", s_feedback, "\n")
|
||||
cfg_file:write("SSVEP_OneByOne = ", s_onebyone, "\n")
|
||||
cfg_file:write("SSVEP_AnalogControl = ", s_analog_control, "\n")
|
||||
cfg_file:write("SSVEP_LogLevel = ", s_log_level, "\n")
|
||||
|
||||
cfg_file:close()
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
-- while targets are available, send a stimulation with new target
|
||||
-- position for each request
|
||||
|
||||
while box:keep_processing() do
|
||||
if box:get_stimulation_count(1) > 0 then
|
||||
|
||||
identifier, date, duration = box:get_stimulation(1, 1)
|
||||
|
||||
if identifier == OVTK_StimulationId_Target then
|
||||
current_time = box:get_current_time() + 1
|
||||
|
||||
-- if no targets are available, quit the game
|
||||
if # sequence == 0 then
|
||||
box:send_stimulation(1, OVTK_StimulationId_ExperimentStop, current_time, 0)
|
||||
break
|
||||
end
|
||||
|
||||
next_target = sequence[1]
|
||||
table.remove(sequence, 1)
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_Label_00 + next_target , current_time, 0)
|
||||
end
|
||||
|
||||
box:remove_stimulation(1, 1)
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
delay = 1
|
||||
|
||||
function initialize(box)
|
||||
s_delay = box:get_setting(2);
|
||||
|
||||
io.write(string.format("Delay : [%s]\n", s_delay))
|
||||
|
||||
if (s_delay:find("^%d+$") ~= nil) then
|
||||
delay = tonumber(s_delay)
|
||||
else
|
||||
io.write("[ERROR] The parameter should be a numeric value\n")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
box:send_stimulation(1, 0x00008001, delay, 0)
|
||||
end
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
sequence = {}
|
||||
number_of_cycles = 0
|
||||
|
||||
stimulation_duration = 7
|
||||
break_duration = 2
|
||||
flickering_delay = 3.5
|
||||
|
||||
stimulationLabels = {
|
||||
0x00008100,
|
||||
0x00008101,
|
||||
0x00008102,
|
||||
0x00008103,
|
||||
}
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
|
||||
-- load the goal sequence
|
||||
s_sequence = box:get_setting(2)
|
||||
|
||||
for target in s_sequence:gmatch("%d+") do
|
||||
table.insert(sequence, target)
|
||||
number_of_cycles = number_of_cycles + 1
|
||||
end
|
||||
|
||||
stimulation_duration = box:get_setting(3)
|
||||
break_duration = box:get_setting(4)
|
||||
flickering_delay = box:get_setting(5)
|
||||
|
||||
box:log("Info", string.format("Number of goals in sequence: [%d]", number_of_cycles))
|
||||
|
||||
cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/configuration/stimulation-based-epoching.cfg"), "w")
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(" <SettingValue>", stimulation_duration, "</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>", flickering_delay, "</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>OVTK_StimulationId_Target</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() and box:get_stimulation_count(1) == 0 do
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
current_time = box:get_current_time() + 1
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_ExperimentStart, current_time, 0)
|
||||
|
||||
current_time = current_time + 2
|
||||
|
||||
for i,target in ipairs(sequence) do
|
||||
box:log("Info", string.format("Goal no %d is %d at %d", i, target, current_time))
|
||||
-- mark goal
|
||||
box:send_stimulation(2, OVTK_StimulationId_LabelStart + target, current_time, 0)
|
||||
-- wait for Flickering_delay seconds
|
||||
current_time = current_time + flickering_delay
|
||||
-- start flickering
|
||||
box:send_stimulation(1, OVTK_StimulationId_VisualStimulationStart, current_time, 0)
|
||||
-- wait for Stimulation_duration seconds
|
||||
current_time = current_time + stimulation_duration
|
||||
-- unmark goal and stop flickering
|
||||
box:send_stimulation(1, OVTK_StimulationId_VisualStimulationStop, current_time, 0)
|
||||
-- wait for Break_duration seconds
|
||||
current_time = current_time + break_duration
|
||||
end
|
||||
|
||||
current_time = current_time + 2
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_ExperimentStop, current_time, 0)
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains signals recorded by the SSVEP scenarios.
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains configuration files created by the SSVEP scenarios.
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains materials created by the SSVEP scenarios.
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains classifiers and CSP filters created by the SSVEP scenarios.
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains configuration files generated by the scenarios.
|
||||
+672
@@ -0,0 +1,672 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>OpenVIBE</Creator>
|
||||
<CreatorVersion>0.1.99</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00000efb, 0x00007452)</Identifier>
|
||||
<Name>Time based epoching</Name>
|
||||
<AlgorithmClassIdentifier>(0x00777fa0, 0x5dc3f560)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Epoched signal 1</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Epoch 1 duration (in sec)</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>2.000000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Epoch 1 intervals (in sec)</Name>
|
||||
<DefaultValue>0.5</DefaultValue>
|
||||
<Value>0.250000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>112.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xc5ff41e9, 0xccc59a01)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x002363af)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x000026ba, 0x000014fc)</Identifier>
|
||||
<Name>Spectral analysis</Name>
|
||||
<AlgorithmClassIdentifier>(0x84218ff8, 0xa87e7995)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Amplitude</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Phase</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Real Part</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Imag Part</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Amplitude</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Phase</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Real Part</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Imaginary Part</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>192.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x4e5c55a0, 0xe69eb7db)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x004039af)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>4</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x0000441d, 0x00001a28)</Identifier>
|
||||
<Name>Acquisition client</Name>
|
||||
<AlgorithmClassIdentifier>(0x35d225cb, 0x3e6e3a5f)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x403488e7, 0x565d70b6)</TypeIdentifier>
|
||||
<Name>Experiment information</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Signal stream</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x013df452, 0xa3a8879a)</TypeIdentifier>
|
||||
<Name>Channel localisation</Name>
|
||||
</Output>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
|
||||
<Name>Channel units</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Acquisition server hostname</Name>
|
||||
<DefaultValue>${AcquisitionServer_HostName}</DefaultValue>
|
||||
<Value>${AcquisitionServer_HostName}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Acquisition server port</Name>
|
||||
<DefaultValue>1024</DefaultValue>
|
||||
<Value>1024</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>-16.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x0d4656c0, 0xc95b1fa8)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00596403)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>5</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00006e09, 0x00006c54)</Identifier>
|
||||
<Name>Temporal filter</Name>
|
||||
<AlgorithmClassIdentifier>(0xb4f9d042, 0x9d79f2e5)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Input signal</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Filtered signal</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2f2c606c, 0x8512ed68)</TypeIdentifier>
|
||||
<Name>Filter method</Name>
|
||||
<DefaultValue>Butterworth</DefaultValue>
|
||||
<Value>Butterworth</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xfa20178e, 0x4cba62e9)</TypeIdentifier>
|
||||
<Name>Filter type</Name>
|
||||
<DefaultValue>Band pass</DefaultValue>
|
||||
<Value>Band pass</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Filter order</Name>
|
||||
<DefaultValue>4</DefaultValue>
|
||||
<Value>4</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Low cut frequency (Hz)</Name>
|
||||
<DefaultValue>29</DefaultValue>
|
||||
<Value>3.000000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>High cut frequency (Hz)</Name>
|
||||
<DefaultValue>40</DefaultValue>
|
||||
<Value>40.000000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Pass band ripple (dB)</Name>
|
||||
<DefaultValue>0.5</DefaultValue>
|
||||
<Value>0.500000</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>48.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x27a4ceec, 0x876d6384)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x005c78a8)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc80ce8af, 0xf699f813)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>6</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00006ff2, 0x000035c1)</Identifier>
|
||||
<Name>Signal display</Name>
|
||||
<AlgorithmClassIdentifier>(0x0055be5f, 0x087bdd12)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x5ba36127, 0x195feae1)</TypeIdentifier>
|
||||
<Name>Data</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6ab26b81, 0x0f8c02f3)</TypeIdentifier>
|
||||
<Name>Channel Units</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x5de046a6, 0x086340aa)</TypeIdentifier>
|
||||
<Name>Display Mode</Name>
|
||||
<DefaultValue>Scan</DefaultValue>
|
||||
<Value>Scan</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x33a30739, 0x00d5299b)</TypeIdentifier>
|
||||
<Name>Auto vertical scale</Name>
|
||||
<DefaultValue>Per channel</DefaultValue>
|
||||
<Value>Per channel</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Scale refresh interval (secs)</Name>
|
||||
<DefaultValue>5</DefaultValue>
|
||||
<Value>5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Scale</Name>
|
||||
<DefaultValue>100</DefaultValue>
|
||||
<Value>100</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Vertical Offset</Name>
|
||||
<DefaultValue>0</DefaultValue>
|
||||
<Value>0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Time Scale</Name>
|
||||
<DefaultValue>10</DefaultValue>
|
||||
<Value>10</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Horizontal ruler</Name>
|
||||
<DefaultValue>true</DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Vertical ruler</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Multiview</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>112.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>752.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x92c056a7, 0x2dc71aff)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x0020924b)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc73e83ec, 0xf855c5bc)</Identifier>
|
||||
<Value>false</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>9</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>3</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x28b20eb9, 0x6ca2286f)</Identifier>
|
||||
<Name>Instant Bars</Name>
|
||||
<AlgorithmClassIdentifier>(0xecb46081, 0x96da0d49)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x1f261c0a, 0x593bf6bd)</TypeIdentifier>
|
||||
<Name>Matrix</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Channel Localisation</Name>
|
||||
<DefaultValue>${AdvancedViz_ChannelLocalisation}</DefaultValue>
|
||||
<Value>${AdvancedViz_ChannelLocalisation}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Positive Data Only ?</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Gain</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Caption</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value></Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Translucency</Name>
|
||||
<DefaultValue>1</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x3d3c7c7f, 0xef0e7129)</TypeIdentifier>
|
||||
<Name>Color</Name>
|
||||
<DefaultValue>${AdvancedViz_DefaultColorGradient}</DefaultValue>
|
||||
<Value>${AdvancedViz_DefaultColorGradient}</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>256</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>560</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x6b60e2b2, 0xf4839b7d)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x527ad68d, 0x16d746a0)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>6</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x00000c5d, 0x00003e97)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00000efb, 0x00007452)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x000026ba, 0x000014fc)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000235d, 0x00005682)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x0000441d, 0x00001a28)</BoxIdentifier>
|
||||
<BoxOutputIndex>1</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006e09, 0x00006c54)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00003f9c, 0x000047e9)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006e09, 0x00006c54)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00006ff2, 0x000035c1)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00006d4e, 0x0000333e)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00006e09, 0x00006c54)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00000efb, 0x00007452)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x5b7cfcf0, 0x1cbb9051)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000026ba, 0x000014fc)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x28b20eb9, 0x6ca2286f)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00002d94, 0x00007404)</Identifier>
|
||||
<Text>Display the signal from all channels </Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>960.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>112.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00004efd, 0x0000146d)</Identifier>
|
||||
<Text>You can browse each box' documentation by selecting the box and pressing <b>F1</b>
|
||||
|
||||
This scenario set is documented in 'http://openvibe.inria.fr/using-the-ssvep-mind-shooter-scenarios/'</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>528</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>-112</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00007577, 0x000059a7)</Identifier>
|
||||
<Text><b><big>Acquisition test</big></b>
|
||||
|
||||
Scenario used for testing data acquisition. The signal quality should
|
||||
always be checked before training.
|
||||
|
||||
You can monitor signals from all of the electrodes. Individual
|
||||
signals are shown for each channel, as well as FFT power of all channels.
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>224.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>16.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":776,"identifier":"(0x00002985, 0x00004ff2)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":753},{"boxIdentifier":"(0x28b20eb9, 0x6ca2286f)","childCount":0,"identifier":"(0x63bb111b, 0x0b13330c)","parentIdentifier":"(0xffffffff, 0xffffffff)","type":3},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x000024d0, 0x00004b7a)","index":0,"name":"Default tab","parentIdentifier":"(0x00002985, 0x00004ff2)","type":2},{"boxIdentifier":"(0x00006ff2, 0x000035c1)","childCount":0,"identifier":"(0x00003256, 0x00006784)","index":0,"parentIdentifier":"(0x000024d0, 0x00004b7a)","type":3}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value>Jussi T. Lindgren, Jozef Legeny</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>1.0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>SSVEP Acquisition Test</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value>http://openvibe.inria.fr/using-the-ssvep-mind-shooter-scenarios/</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value>SSVEP</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value>Inria</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+599
@@ -0,0 +1,599 @@
|
||||
<OpenViBE-Scenario>
|
||||
<FormatVersion>1</FormatVersion>
|
||||
<Creator>Designer</Creator>
|
||||
<CreatorVersion>2.0.0</CreatorVersion>
|
||||
<Settings></Settings>
|
||||
<Inputs></Inputs>
|
||||
<Outputs></Outputs>
|
||||
<Boxes>
|
||||
<Box>
|
||||
<Identifier>(0x00000533, 0x00001c79)</Identifier>
|
||||
<Name>Experiment Settings</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>${Player_ScenarioDirectory}/scripts/configuration-experiment-settings.lua</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x7f45a2a9, 0x7db12219)</TypeIdentifier>
|
||||
<Name>Target Light Color</Name>
|
||||
<DefaultValue>100,0,0</DefaultValue>
|
||||
<Value>100,0,0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x7f45a2a9, 0x7db12219)</TypeIdentifier>
|
||||
<Name>Target Dark Color</Name>
|
||||
<DefaultValue>0,0,0</DefaultValue>
|
||||
<Value>10,0,0</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Stimulation Frequencies</Name>
|
||||
<DefaultValue>20;15;12</DefaultValue>
|
||||
<Value>5.454545;6.6666;7.5</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Processing Epoch Duration</Name>
|
||||
<DefaultValue>0.5</DefaultValue>
|
||||
<Value>1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Processing Epoch Interval</Name>
|
||||
<DefaultValue>0.1</DefaultValue>
|
||||
<Value>0.1</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x512a166f, 0x5c3ef83f)</TypeIdentifier>
|
||||
<Name>Processing Frequency Tolerance</Name>
|
||||
<DefaultValue>0.250</DefaultValue>
|
||||
<Value>0.25</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>CSP Spatial Filter Order</Name>
|
||||
<DefaultValue>3</DefaultValue>
|
||||
<Value>2</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Focus Point</Name>
|
||||
<DefaultValue>false</DefaultValue>
|
||||
<Value>false</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>400</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x0004a72a)</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>(0x000024b5, 0x00000bb5)</Identifier>
|
||||
<Name>Display Settings</Name>
|
||||
<AlgorithmClassIdentifier>(0x0b5a2787, 0x02750621)</AlgorithmClassIdentifier>
|
||||
<Outputs>
|
||||
<Output>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Output>
|
||||
</Outputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xb0d0db45, 0x49cbc34a)</TypeIdentifier>
|
||||
<Name>Lua Script</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/scripts/configuration-peripheral-settings.lua</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Screen Refresh Rate</Name>
|
||||
<DefaultValue>60</DefaultValue>
|
||||
<Value>60</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Window Width</Name>
|
||||
<DefaultValue>800</DefaultValue>
|
||||
<Value>800</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x007deef9, 0x2f3e95c6)</TypeIdentifier>
|
||||
<Name>Window Height</Name>
|
||||
<DefaultValue>600</DefaultValue>
|
||||
<Value>600</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2cdb2f0b, 0x12f231ea)</TypeIdentifier>
|
||||
<Name>Fullscreen</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>true</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>64.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>369.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x007b56c4)</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>(0x00004bf3, 0x00007808)</Identifier>
|
||||
<Name>Player Controller</Name>
|
||||
<AlgorithmClassIdentifier>(0x5f426dce, 0x08456e13)</AlgorithmClassIdentifier>
|
||||
<Inputs>
|
||||
<Input>
|
||||
<TypeIdentifier>(0x6f752dd0, 0x082a321e)</TypeIdentifier>
|
||||
<Name>Stimulations</Name>
|
||||
</Input>
|
||||
</Inputs>
|
||||
<Settings>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x2c132d6e, 0x44ab0d97)</TypeIdentifier>
|
||||
<Name>Stimulation name</Name>
|
||||
<DefaultValue>OVTK_StimulationId_Label_00</DefaultValue>
|
||||
<Value>OVTK_StimulationId_TrainCompleted</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0xcc14d8d6, 0xf27ecb73)</TypeIdentifier>
|
||||
<Name>Action to perform</Name>
|
||||
<DefaultValue>Pause</DefaultValue>
|
||||
<Value>Stop</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>528</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0x568d148e, 0x650792b3)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00208175)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xce18836a, 0x9c0eb403)</Identifier>
|
||||
<Value>2</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xcfad85b0, 0x7c6d841c)</Identifier>
|
||||
<Value>1</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Box>
|
||||
<Box>
|
||||
<Identifier>(0x00005dd3, 0x00000cf3)</Identifier>
|
||||
<Name>EEG Input Settings</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>${Player_ScenarioDirectory}/scripts/configuration-eeg-input-settings.lua</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x79a9edeb, 0x245d83fc)</TypeIdentifier>
|
||||
<Name>Channels</Name>
|
||||
<DefaultValue></DefaultValue>
|
||||
<Value>:</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x3bcf9e67, 0x0c23994d)</TypeIdentifier>
|
||||
<Name>Selection Method</Name>
|
||||
<DefaultValue>Reject</DefaultValue>
|
||||
<Value>Select</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x666f25e9, 0x3e5738d6)</TypeIdentifier>
|
||||
<Name>Match Method</Name>
|
||||
<DefaultValue>Smart</DefaultValue>
|
||||
<Value>Smart</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Training Data File</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
<Setting>
|
||||
<TypeIdentifier>(0x330306dd, 0x74a95f98)</TypeIdentifier>
|
||||
<Name>Testing Data File</Name>
|
||||
<DefaultValue>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</DefaultValue>
|
||||
<Value>${Player_ScenarioDirectory}/signals/ssvep-record-current.ov</Value>
|
||||
<Modifiability>false</Modifiability>
|
||||
</Setting>
|
||||
</Settings>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x17ee7c08, 0x94c14893)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x1fa7a38f, 0x54edbe0b)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x207c9054, 0x3c841b63)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x4e7b798a, 0x183beafb)</Identifier>
|
||||
<Value>(0xd6e3f48b, 0xbee3523a)</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x61d11811, 0x71e65362)</Identifier>
|
||||
<Value></Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xc46b3d00, 0x3e0454e1)</Identifier>
|
||||
<Value>(0x00000000, 0x00dac25b)</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>
|
||||
</Boxes>
|
||||
<Links>
|
||||
<Link>
|
||||
<Identifier>(0x000011e3, 0x00005213)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x000024b5, 0x00000bb5)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00005dd3, 0x00000cf3)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x00002afe, 0x00005880)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00005dd3, 0x00000cf3)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00000533, 0x00001c79)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
<Link>
|
||||
<Identifier>(0x0000591f, 0x00006602)</Identifier>
|
||||
<Source>
|
||||
<BoxIdentifier>(0x00000533, 0x00001c79)</BoxIdentifier>
|
||||
<BoxOutputIndex>0</BoxOutputIndex>
|
||||
</Source>
|
||||
<Target>
|
||||
<BoxIdentifier>(0x00004bf3, 0x00007808)</BoxIdentifier>
|
||||
<BoxInputIndex>0</BoxInputIndex>
|
||||
</Target>
|
||||
</Link>
|
||||
</Links>
|
||||
<Comments>
|
||||
<Comment>
|
||||
<Identifier>(0x00000df6, 0x00003d56)</Identifier>
|
||||
<Text><big><b>Experiment Settings</b></big>
|
||||
|
||||
Settings concerning the SSVEP experiment in general.
|
||||
|
||||
<b>Target Light Color</b> and <b>Target Dark Color</b> represent
|
||||
the two colors which will be used to generate the flickering of
|
||||
the targets. The notation Light and Dark is arbitrary, however on
|
||||
frequencies using odd number of frames will use more frames to
|
||||
represent the Light color.
|
||||
|
||||
<b>Screen Refresh Rate : </b> The refresh rate of your screen,
|
||||
refer to your screen's user manual to find this value.
|
||||
|
||||
<span color="red">Important notice</span>
|
||||
|
||||
Your screen will be able to reproduce only frequencies which
|
||||
are result of division of your screen refresh rate by an
|
||||
integer.
|
||||
|
||||
<b>Stimulation Frequencies</b> A comma separated list of
|
||||
frequencies used for the stimulation. Refer to the documentation
|
||||
for more details.
|
||||
|
||||
<b>Processing Epoch Duration</b> The length of the slice of the signal
|
||||
which will be used to find SSVEP response. With longer duration precision
|
||||
will increase at the detriment of the lag.
|
||||
|
||||
<b>Processing Epoch Interval</b> The speed interval between slices of the
|
||||
signal.
|
||||
|
||||
<b>Processing Frequency Tolerance</b> The width of the frequency band
|
||||
around the stimulation frequency used for classification.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>-176</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>128</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x0000187e, 0x00005350)</Identifier>
|
||||
<Text> <b><span color="#2060ff">Configurable box</span></b>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>400</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x0000288f, 0x00005f55)</Identifier>
|
||||
<Text><b>Welcome to the 'multiclass' SSVEP Mind Shooter</b>
|
||||
|
||||
Multiclass classifiers and CSP are used
|
||||
by the signal processing pipelines.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>-160.000000</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>-192.000000</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x000031b0, 0x00003fa0)</Identifier>
|
||||
<Text><big><b>Scenario description</b></big>
|
||||
|
||||
<b><span color="red">This scenario must be run at least once before
|
||||
running any further SSVEP scenarios</span></b>
|
||||
|
||||
This is a scenario where you can configure your SSVEP experiment. There
|
||||
are two boxes containing configuration parameters:
|
||||
|
||||
<b>Peripheral Settings</b>
|
||||
|
||||
<b>Experiment Settings</b>
|
||||
|
||||
For more detailed description please refer to the SSVEP
|
||||
documentation page.</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>336</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>-160</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00003244, 0x00004359)</Identifier>
|
||||
<Text> <b><span color="#2060ff">Configurable box</span></b>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>64</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
<Comment>
|
||||
<Identifier>(0x00005ca6, 0x00003399)</Identifier>
|
||||
<Text> <b><span color="#2060ff">Configurable box</span></b>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</Text>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x473d9a43, 0x97fc0a97)</Identifier>
|
||||
<Value>368</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x7234b86b, 0x2b8651a5)</Identifier>
|
||||
<Value>224</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</Comment>
|
||||
</Comments>
|
||||
<Metadata>
|
||||
<Entry>
|
||||
<Identifier>(0x0000775c, 0x000078ff)</Identifier>
|
||||
<Type>(0x3bcce5d2, 0x43f2d968)</Type>
|
||||
<Data>[{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"height":1,"identifier":"(0x00005488, 0x0000451f)","name":"Default window","parentIdentifier":"(0xffffffff, 0xffffffff)","type":1,"width":1},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":1,"identifier":"(0x00000bbf, 0x000047e2)","index":0,"name":"Default tab","parentIdentifier":"(0x00005488, 0x0000451f)","type":2},{"boxIdentifier":"(0xffffffff, 0xffffffff)","childCount":0,"identifier":"(0x000017e4, 0x00003d53)","index":0,"name":"Empty","parentIdentifier":"(0x00000bbf, 0x000047e2)","type":0}]</Data>
|
||||
</Entry>
|
||||
</Metadata>
|
||||
<Attributes>
|
||||
<Attribute>
|
||||
<Identifier>(0x790d75b8, 0x3bb90c33)</Identifier>
|
||||
<Value>Jussi T. Lindgren, Jozef Legeny</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x8c1fc55b, 0x7b433dc2)</Identifier>
|
||||
<Value>1.0</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0x9f5c4075, 0x4a0d3666)</Identifier>
|
||||
<Value>SSVEP Configuration</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf36a1567, 0xd13c53da)</Identifier>
|
||||
<Value>http://openvibe.inria.fr/using-the-ssvep-mind-shooter-scenarios/</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf6b2e3fa, 0x7bd43926)</Identifier>
|
||||
<Value>SSVEP</Value>
|
||||
</Attribute>
|
||||
<Attribute>
|
||||
<Identifier>(0xf8034a49, 0x8b3f37cc)</Identifier>
|
||||
<Value>Inria</Value>
|
||||
</Attribute>
|
||||
</Attributes>
|
||||
</OpenViBE-Scenario>
|
||||
+1351
File diff suppressed because it is too large
Load Diff
+1681
File diff suppressed because it is too large
Load Diff
+2199
File diff suppressed because it is too large
Load Diff
+3334
File diff suppressed because it is too large
Load Diff
+2102
File diff suppressed because it is too large
Load Diff
+74
@@ -0,0 +1,74 @@
|
||||
channels = nil
|
||||
selection_method = nil
|
||||
match_method = nil
|
||||
|
||||
training_datafile = nil
|
||||
testing_datafile = nil
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
channels = box:get_setting(2)
|
||||
selection_method = box:get_setting(3)
|
||||
match_method = box:get_setting(4)
|
||||
training_datafile = box:get_setting(5)
|
||||
testing_datafile = box:get_setting(6)
|
||||
|
||||
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() and box:get_stimulation_count(1) == 0 do
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
-- create material
|
||||
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/channel-selector.cfg'"))
|
||||
|
||||
cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/configuration/channel-selector.cfg"), "w")
|
||||
|
||||
if cfg_file == nil then
|
||||
box:log("Error", "Could not open config file for writing")
|
||||
end
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", channels))
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", selection_method))
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", match_method))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/file-reader-training.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/file-reader-training.cfg"), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", training_datafile))
|
||||
-- cfg_file:write(string.format("<SettingValue>32</SettingValue>\n"))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/file-reader-testing.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/file-reader-testing.cfg"), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s</SettingValue>\n", testing_datafile))
|
||||
-- cfg_file:write(string.format("<SettingValue>32</SettingValue>\n"))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
|
||||
|
||||
|
||||
-- notify the scenario that the configuration process is complete
|
||||
box:send_stimulation(1, OVTK_StimulationId_TrainCompleted, box:get_current_time() + 0.2, 0)
|
||||
|
||||
end
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
stimulation_frequencies = {}
|
||||
frequency_count = 0
|
||||
|
||||
target_light_color = {}
|
||||
target_dark_color = {}
|
||||
training_target_size = {}
|
||||
training_targets_positions = {}
|
||||
|
||||
processing_epoch_duration = nil
|
||||
processing_epoch_interval = nil
|
||||
processing_frequency_tolerance = nil
|
||||
csp_filter_order = nil
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
for value in box:get_setting(2):gmatch("%d+") do
|
||||
table.insert(target_light_color, value)
|
||||
end
|
||||
|
||||
for value in box:get_setting(3):gmatch("%d+") do
|
||||
table.insert(target_dark_color, value)
|
||||
end
|
||||
|
||||
for value in box:get_setting(4):gmatch("%d+[.]?%d*") do
|
||||
table.insert(stimulation_frequencies, value)
|
||||
frequency_count = frequency_count + 1
|
||||
end
|
||||
|
||||
processing_epoch_duration = box:get_setting(5)
|
||||
processing_epoch_interval = box:get_setting(6)
|
||||
processing_frequency_tolerance = box:get_setting(7)
|
||||
csp_filter_order = box:get_setting(8)
|
||||
s_focus_point = box:get_setting(9)
|
||||
|
||||
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() and box:get_stimulation_count(1) == 0 do
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
-- create material
|
||||
|
||||
box:log("Info", box:get_config("Creating materials in '${Player_ScenarioDirectory}/appconf/materials/flickering.material'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/appconf/materials/flickering.material"), "w"))
|
||||
|
||||
cfg_file:write("material target_bright\n")
|
||||
cfg_file:write("{\n")
|
||||
cfg_file:write(" technique\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" pass\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" ambient 0 0 0 0\n")
|
||||
cfg_file:write(" diffuse 0 0 0 0\n")
|
||||
cfg_file:write(" specular 0 0 0 0\n")
|
||||
cfg_file:write(" emissive ", target_light_color[1] / 100, " ", target_light_color[2] / 100, " ", target_light_color[3] / 100, "\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write("}\n")
|
||||
cfg_file:write("material target_dark\n")
|
||||
cfg_file:write("{\n")
|
||||
cfg_file:write(" technique\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" pass\n")
|
||||
cfg_file:write(" {\n")
|
||||
cfg_file:write(" ambient 0 0 0 0\n")
|
||||
cfg_file:write(" diffuse 0 0 0 0\n")
|
||||
cfg_file:write(" specular 0 0 0 0\n")
|
||||
cfg_file:write(" emissive ", target_dark_color[1] / 100, " ", target_dark_color[2] / 100, " ", target_dark_color[3] / 100, "\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write(" }\n")
|
||||
cfg_file:write("}\n")
|
||||
cfg_file:close()
|
||||
|
||||
-- prepare the datafolder
|
||||
|
||||
foldername = box:get_config("${Player_ScenarioDirectory}/signals/userdata-[$core{date}-$core{time}]")
|
||||
os.execute(string.format("mkdir \"%s\"", foldername))
|
||||
|
||||
box:log("Info", box:get_config("Writing additional configuration to '${Player_ScenarioDirectory}/appconf/application-configuration.conf'"))
|
||||
|
||||
-- this file was generated by configuration-peripheral-settings.lua, here we just add to it
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/appconf/application-configuration.conf"), "a"))
|
||||
|
||||
for i=1,frequency_count do
|
||||
cfg_file:write("SSVEP_Frequency_", i, " = ", string.format("%g", stimulation_frequencies[i]), "\n")
|
||||
end
|
||||
|
||||
cfg_file:write(string.format("SSVEP_TargetLightColourRed = %f\n", target_light_color[1] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetLightColourGreen = %f\n", target_light_color[2] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetLightColourBlue = %f\n", target_light_color[3] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetDarkColourRed = %f\n", target_dark_color[1] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetDarkColourGreen = %f\n", target_dark_color[2] / 100))
|
||||
cfg_file:write(string.format("SSVEP_TargetDarkColourBlue = %f\n", target_dark_color[3] / 100))
|
||||
|
||||
cfg_file:write("SSVEP_UserDataFolder = ", foldername, "\n")
|
||||
cfg_file:write("SSVEP_FocusPoint = ", s_focus_point, "\n")
|
||||
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
-- create configuration files for temporal filters
|
||||
|
||||
for i=1,frequency_count do
|
||||
box:log("Info", string.format(box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%db.cfg'"), i))
|
||||
|
||||
cfg_file = assert(io.open(string.format(box:get_config("${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%db.cfg"), i), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write("<SettingValue>Butterworth</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>Band pass</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>4</SettingValue>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] - processing_frequency_tolerance))
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] + processing_frequency_tolerance))
|
||||
cfg_file:write("<SettingValue>0.500000</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
box:log("Info", string.format(box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%dh1.cfg'"), i))
|
||||
|
||||
cfg_file = assert(io.open(string.format(box:get_config("${Player_ScenarioDirectory}/configuration/temporal-filter-freq-%dh1.cfg"), i), "w"))
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write("<SettingValue>Butterworth</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>Band pass</SettingValue>\n")
|
||||
cfg_file:write("<SettingValue>4</SettingValue>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] * 2 - processing_frequency_tolerance))
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", stimulation_frequencies[i] * 2 + processing_frequency_tolerance))
|
||||
cfg_file:write("<SettingValue>0.500000</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
|
||||
end
|
||||
|
||||
-- create configuration file for CSP Trainer
|
||||
cfg_filename = box:get_config("${Player_ScenarioDirectory}/configuration/regularized-csp-trainer.cfg")
|
||||
|
||||
box:log("Info", "Writing file '" .. cfg_filename .. "'")
|
||||
|
||||
cfg_file = assert(io.open(cfg_filename, "w"))
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(" <SettingValue>OVTK_StimulationId_ExperimentStop</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>${Player_ScenarioDirectory}/classifiers/csp-filters.cfg</SettingValue>\n")
|
||||
cfg_file:write(string.format(" <SettingValue>%d</SettingValue>\n", csp_filter_order))
|
||||
cfg_file:write(" <SettingValue>false</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>Chunk average</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>true</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>0.0</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>0.0</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:close()
|
||||
|
||||
-- create configuration file for time based epoching
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/time-based-epoching.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/time-based-epoching.cfg"), "w"))
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", processing_epoch_duration))
|
||||
cfg_file:write(string.format("<SettingValue>%g</SettingValue>\n", processing_epoch_interval))
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:close()
|
||||
|
||||
-- create the file writer configuration
|
||||
box:log("Info", box:get_config("Writing file '${Player_ScenarioDirectory}/configuration/file-writer.cfg'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/configuration/file-writer.cfg"), "w"))
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(string.format("<SettingValue>%s/eeg-data-[$core{date}-$core{time}].ov</SettingValue>\n", foldername))
|
||||
cfg_file:write("<SettingValue>false</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:close()
|
||||
|
||||
-- notify the scenario that the configuration process is complete
|
||||
box:send_stimulation(1, OVTK_StimulationId_TrainCompleted, box:get_current_time() + 0.2, 0)
|
||||
|
||||
end
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
vrpn_host = nil
|
||||
vrpn_port = nil
|
||||
screen_refresh_rate = nil
|
||||
window_width = nil
|
||||
window_height = nil
|
||||
fullscreen = nil
|
||||
|
||||
function initialize(box)
|
||||
screen_refresh_rate = box:get_setting(2)
|
||||
window_width = box:get_setting(3)
|
||||
window_height = box:get_setting(4)
|
||||
fullscreen = box:get_setting(5)
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
|
||||
box:log("Info", box:get_config("Generating '${Player_ScenarioDirectory}/appconf/application-configuration.conf'"))
|
||||
|
||||
cfg_file = assert(io.open(box:get_config("${Player_ScenarioDirectory}/appconf/application-configuration.conf"), "w"))
|
||||
|
||||
cfg_file:write("# This file was automatically generated!\n\n")
|
||||
cfg_file:write("# If you want to change the SSVEP configuration\n")
|
||||
cfg_file:write("# please use the provided ssvep-configuration scenario.\n")
|
||||
|
||||
cfg_file:write("SSVEP_ScreenRefreshRate = ", screen_refresh_rate, "\n")
|
||||
cfg_file:write("SSVEP_VRPNServerPort = 1337\n")
|
||||
cfg_file:write("SSVEP_VRPNHost = localhost\n")
|
||||
|
||||
-- cfg_file:close()
|
||||
|
||||
-- box:log("Info", box:get_config("Generating '${Player_ScenarioDirectory}/appconf/ogre-configuration.conf'"))
|
||||
|
||||
-- cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/appconf/ogre-configuration.conf"), "w")
|
||||
|
||||
-- cfg_file:write("# This file was automatically generated!\n\n")
|
||||
-- cfg_file:write("# If you want to change the SSVEP configuration\n")
|
||||
-- cfg_file:write("# please use the provided ssvep-configuration scenario.\n")
|
||||
|
||||
cfg_file:write("SSVEP_Ogre_LogToConsole = False\n")
|
||||
|
||||
cfg_file:write("SSVEP_Ogre_ScreenWidth = ", window_width, "\n")
|
||||
cfg_file:write("SSVEP_Ogre_ScreenHeight = ", window_height, "\n")
|
||||
cfg_file:write("SSVEP_Ogre_FullScreen = ", fullscreen, "\n")
|
||||
|
||||
cfg_file:close()
|
||||
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_TrainCompleted, box:get_current_time() + 0.2, 0)
|
||||
end
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
classes = nil
|
||||
|
||||
current_target = nil
|
||||
start_time = 0;
|
||||
stop_time = -1;
|
||||
|
||||
do_debug = false;
|
||||
|
||||
score = {}
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
classes = box:get_setting(2)
|
||||
|
||||
for j = 1, classes do
|
||||
score[j] = {}
|
||||
for i = 1, classes do
|
||||
score[j][i] = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
|
||||
correct = 0
|
||||
incorrect = 0
|
||||
|
||||
for j = 1, classes do
|
||||
|
||||
output = string.format("Target %d : ", j - 1)
|
||||
inClass = 0
|
||||
|
||||
for i = 1, classes do
|
||||
inClass = inClass + score[j][i]
|
||||
end
|
||||
|
||||
for i = 1, classes do
|
||||
output = output .. string.format("%d : %5.1f%%, ", i - 1, 100*score[j][i]/inClass)
|
||||
|
||||
if i == j then
|
||||
correct = correct + score[j][i]
|
||||
else
|
||||
incorrect = incorrect + score[j][i]
|
||||
end
|
||||
end
|
||||
|
||||
box:log("Info", string.format("%s total %d", output, inClass))
|
||||
end
|
||||
|
||||
box:log("Info", string.format("Correct %4d -> %5.1f%%", correct, 100*correct/(correct+incorrect)))
|
||||
box:log("Info", string.format("Incorrect %4d -> %5.1f%%", incorrect, 100*incorrect/(correct+incorrect)))
|
||||
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
finished = false
|
||||
|
||||
while not finished do
|
||||
|
||||
-- time = box:get_current_time()
|
||||
|
||||
while box:get_stimulation_count(1) > 0 do
|
||||
|
||||
s_code, s_date, s_duration = box:get_stimulation(1, 1)
|
||||
box:remove_stimulation(1, 1)
|
||||
|
||||
if s_code >= OVTK_StimulationId_Label_00 and s_code <= OVTK_StimulationId_Label_1F then
|
||||
if do_debug then box:log("Info", string.format("Received target %d at ", s_code) .. s_date) end
|
||||
current_target = s_code - OVTK_StimulationId_Label_00
|
||||
|
||||
elseif s_code == OVTK_StimulationId_VisualStimulationStart then
|
||||
if do_debug then box:log("Info", "Trial started at " .. s_date) end
|
||||
start_time = s_date
|
||||
-- We don't know the stop time yet, so for now accept anything in range [start_time, infty]
|
||||
stop_time = -1
|
||||
|
||||
elseif s_code == OVTK_StimulationId_VisualStimulationStop then
|
||||
if do_debug then box:log("Info", "Trial ended at " .. s_date) end
|
||||
stop_time = s_date
|
||||
|
||||
elseif s_code == OVTK_StimulationId_ExperimentStop then
|
||||
finished = true
|
||||
end
|
||||
end
|
||||
|
||||
while box:get_stimulation_count(2) > 0 do
|
||||
|
||||
s_code, s_date, s_duration = box:get_stimulation(2, 1)
|
||||
box:remove_stimulation(2, 1)
|
||||
|
||||
if do_debug then box:log("Info", string.format("Received prediction %d at ", s_code) .. s_date) end
|
||||
|
||||
if s_date >= start_time and (stop_time < 0 or s_date < stop_time) and (s_code >= OVTK_StimulationId_Label_00 and s_code <= OVTK_StimulationId_Label_1F) then
|
||||
|
||||
if do_debug then box:log("Info", string.format("Accepted prediction %d at ", s_code) .. s_date) end
|
||||
|
||||
real_target = current_target + 1
|
||||
prediction = s_code - OVTK_StimulationId_Label_00 + 1
|
||||
score[real_target][prediction] = score[real_target][prediction] + 1
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
buffer = {}
|
||||
|
||||
function initialize(box)
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
-- This script receives stimulations and lets pass only every other one
|
||||
-- for each stimulation code
|
||||
-- Useful to remove "key up" events of keyboard stimulator
|
||||
function process(box)
|
||||
|
||||
while (box:keep_processing()) do
|
||||
|
||||
for index = 1, box:get_stimulation_count(1) do
|
||||
|
||||
stimulation = box:get_stimulation(1, index)
|
||||
|
||||
if buffer[stimulation] == nil then
|
||||
box:send_stimulation(1, stimulation, box:get_current_time(), 0)
|
||||
buffer[stimulation] = 1
|
||||
else
|
||||
buffer[stimulation] = nil
|
||||
end
|
||||
|
||||
box:remove_stimulation(1, 1)
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
sequence = {}
|
||||
flickeringDelay = nil
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
s_sequence_types = box:get_setting(2)
|
||||
s_sequence_positions = box:get_setting(3)
|
||||
s_target_lockdown = box:get_setting(4)
|
||||
s_pilot_assist = box:get_setting(5)
|
||||
s_feedback = box:get_setting(6)
|
||||
s_onebyone = box:get_setting(7)
|
||||
s_analog_control = box:get_setting(8)
|
||||
s_log_level = box:get_setting(9)
|
||||
|
||||
box:log("Info", string.format("Target Types Sequence : [%s]\n", s_sequence_types))
|
||||
|
||||
for target in s_sequence_positions:gmatch("%d+") do
|
||||
table.insert(sequence, target)
|
||||
end
|
||||
|
||||
-- create the configuration file for the shooter application
|
||||
cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/appconf/shooter-configuration.conf"), "w")
|
||||
|
||||
cfg_file:write("SSVEP_EnemyOrder = ", s_sequence_types, "\n")
|
||||
cfg_file:write("SSVEP_TargetLockdown = ", s_target_lockdown, "\n")
|
||||
cfg_file:write("SSVEP_PilotAssist = ", s_pilot_assist, "\n")
|
||||
cfg_file:write("SSVEP_Feedback = ", s_feedback, "\n")
|
||||
cfg_file:write("SSVEP_OneByOne = ", s_onebyone, "\n")
|
||||
cfg_file:write("SSVEP_AnalogControl = ", s_analog_control, "\n")
|
||||
cfg_file:write("SSVEP_LogLevel = ", s_log_level, "\n")
|
||||
|
||||
cfg_file:close()
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
-- while targets are available, send a stimulation with new target
|
||||
-- position for each request
|
||||
|
||||
while box:keep_processing() do
|
||||
if box:get_stimulation_count(1) > 0 then
|
||||
|
||||
identifier, date, duration = box:get_stimulation(1, 1)
|
||||
|
||||
if identifier == OVTK_StimulationId_Target then
|
||||
current_time = box:get_current_time() + 1
|
||||
|
||||
-- if no targets are available, quit the game
|
||||
if # sequence == 0 then
|
||||
box:send_stimulation(1, OVTK_StimulationId_ExperimentStop, current_time, 0)
|
||||
break
|
||||
end
|
||||
|
||||
next_target = sequence[1]
|
||||
table.remove(sequence, 1)
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_Label_00 + next_target , current_time, 0)
|
||||
end
|
||||
|
||||
box:remove_stimulation(1, 1)
|
||||
end
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
delay = 1
|
||||
|
||||
function initialize(box)
|
||||
s_delay = box:get_setting(2);
|
||||
|
||||
io.write(string.format("Delay : [%s]\n", s_delay))
|
||||
|
||||
if (s_delay:find("^%d+$") ~= nil) then
|
||||
delay = tonumber(s_delay)
|
||||
else
|
||||
io.write("[ERROR] The parameter should be a numeric value\n")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
box:send_stimulation(1, 0x00008001, delay, 0)
|
||||
end
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
sequence = {}
|
||||
number_of_cycles = 0
|
||||
|
||||
stimulation_duration = 7
|
||||
break_duration = 2
|
||||
flickering_delay = 3.5
|
||||
epoching_delay = 1
|
||||
|
||||
function initialize(box)
|
||||
dofile(box:get_config("${Path_Data}") .. "/plugins/stimulation/lua-stimulator-stim-codes.lua")
|
||||
|
||||
-- load the goal sequence
|
||||
s_sequence = box:get_setting(2)
|
||||
|
||||
for target in s_sequence:gmatch("%d+") do
|
||||
table.insert(sequence, target)
|
||||
number_of_cycles = number_of_cycles + 1
|
||||
end
|
||||
|
||||
stimulation_duration = box:get_setting(3)
|
||||
break_duration = box:get_setting(4)
|
||||
flickering_delay = box:get_setting(5)
|
||||
epoching_delay = box:get_setting(6)
|
||||
|
||||
box:log("Info", string.format("Number of goals in sequence: [%d]", number_of_cycles))
|
||||
|
||||
if stimulation_duration-epoching_delay <= 0 then
|
||||
box:log("Error", "Stimulation duration - epoching delay is not greater than 0.")
|
||||
end
|
||||
|
||||
-- These specify how long and with what offset data will be collected after the flicker start
|
||||
-- for csp/classifier training. A positive epoching delay is to avoid the ERP effect due to stimulus onset
|
||||
cfg_file = io.open(box:get_config("${Player_ScenarioDirectory}/configuration/stimulation-based-epoching.cfg"), "w")
|
||||
|
||||
cfg_file:write("<OpenViBE-SettingsOverride>\n")
|
||||
cfg_file:write(" <SettingValue>", stimulation_duration-epoching_delay, "</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>", epoching_delay, "</SettingValue>\n")
|
||||
cfg_file:write(" <SettingValue>OVTK_StimulationId_VisualStimulationStart</SettingValue>\n")
|
||||
cfg_file:write("</OpenViBE-SettingsOverride>\n")
|
||||
|
||||
cfg_file:close()
|
||||
end
|
||||
|
||||
function uninitialize(box)
|
||||
end
|
||||
|
||||
function process(box)
|
||||
|
||||
while box:keep_processing() and box:get_stimulation_count(1) == 0 do
|
||||
box:sleep()
|
||||
end
|
||||
|
||||
current_time = box:get_current_time() + 1
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_ExperimentStart, current_time, 0)
|
||||
|
||||
current_time = current_time + 2
|
||||
|
||||
for i,target in ipairs(sequence) do
|
||||
box:log("Info", string.format("Goal no %d is %d at %d", i, target, current_time))
|
||||
-- mark goal
|
||||
box:send_stimulation(2, OVTK_StimulationId_LabelStart + target, current_time, 0)
|
||||
-- wait for Flickering_delay seconds
|
||||
current_time = current_time + flickering_delay
|
||||
-- start flickering
|
||||
box:send_stimulation(1, OVTK_StimulationId_VisualStimulationStart, current_time, 0)
|
||||
-- wait for Stimulation_duration seconds
|
||||
current_time = current_time + stimulation_duration
|
||||
-- unmark goal and stop flickering
|
||||
box:send_stimulation(1, OVTK_StimulationId_VisualStimulationStop, current_time, 0)
|
||||
-- wait for Break_duration seconds
|
||||
current_time = current_time + break_duration
|
||||
end
|
||||
|
||||
current_time = current_time + 2
|
||||
|
||||
box:send_stimulation(1, OVTK_StimulationId_ExperimentStop, current_time, 0)
|
||||
|
||||
box:sleep()
|
||||
end
|
||||
+1
@@ -0,0 +1 @@
|
||||
This folder contains signals recorded by the SSVEP scenarios.
|
||||
Reference in New Issue
Block a user