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