【发布时间】:2014-06-05 15:27:18
【问题描述】:
我是 PsychoPy 的新手,我正在使用 Builder。我对 Python 编码一点也不熟悉。
我有持续时间可变的音频刺激。在每次试验中,我希望第二个刺激在第一个刺激结束后 500 毫秒或 1500 毫秒开始。有没有办法在 Builder 中做到这一点?如果我必须在 Coder 上做,我应该怎么做?
非常感谢!
【问题讨论】:
我是 PsychoPy 的新手,我正在使用 Builder。我对 Python 编码一点也不熟悉。
我有持续时间可变的音频刺激。在每次试验中,我希望第二个刺激在第一个刺激结束后 500 毫秒或 1500 毫秒开始。有没有办法在 Builder 中做到这一点?如果我必须在 Coder 上做,我应该怎么做?
非常感谢!
【问题讨论】:
当然。将 500 毫秒和 1500 毫秒视为您另外循环的两个不同条件。这两个条件以不同的持续时间交叉。
在你的条件文件中,你有不同的持续时间(或者你当然可以使用随机函数来做到这一点),为每个持续时间添加两行和一列“soa”(或任何你想称之为的)有两个值 500ms 和 1500ms。在构建器界面中,您可以选择呈现顺序是顺序的、在块内随机还是在所有试验中完全随机(不仅仅是在块内)。此外,如果您不希望它平衡(例如 20% 1500 毫秒和 80% 500 毫秒),您可以添加适当数量的行来实现这种平衡(五分之一是 1500 毫秒)。
几乎所有的演示都以这种方式处理试验,因此请查看 Builder --> Demos,单击循环,看看它是如何完成的。另外,请阅读relevant section of the online documentation 并查看a video tutorial also incorporating it。
【讨论】:
具体来说,当您在 Builder 中添加声音组件时,您只需在“开始(时间)”字段中添加一个表达式,该表达式考虑了第一个声音刺激的持续时间和本次试验的 ISI。
因此,如果您按照 Jonas 的建议在条件文件中有一个 ISI 列(假设它称为“ISI”)和第一个听觉刺激的声音组件(例如,称为“sound1”),那么您可以把它放在第二个声音刺激的 Start 字段中:
$sound1.getDuration() + ISI
$ 符号表示该行将被解释为 Python 代码表达式,而不是文字持续时间。
这假设 sound1 在试验开始时开始。如果它开始了,比如进入试验 1 秒,那么只需在表达式中添加一个常量:
$1.0 + sound1.getDuration() + ISI
您的 ISI 列应包含以秒为单位的值。如果您更喜欢毫秒,请执行以下操作:
$sound1.getDuration() + ISI/1000.0
【讨论】: