【问题标题】:Psychopy Sounds played from a csv file blend together (time measured in frames)从 csv 文件播放的 Psychopy 声音混合在一起(以帧为单位测量时间)
【发布时间】:2018-04-25 16:16:02
【问题描述】:

在我准备的实验中,声音从 csv 文件播放,时间以帧为单位测量。鉴于每个声音持续 300 毫秒,这等于 18 帧。

from psychopy import data
from psychopy import core, visual, gui, data, event
from psychopy.tools.filetools import fromFile, toFile
import numpy, random, csv, time
from psychopy import logging, prefs
prefs.general['audioLib'] = ['pyo']  # Set the Audio Library [pyo (highest performer, check it), sounddevice (looks promessing, check it) or pygame (not good with timing)]
prefs.general['audioDriver']=['coreaudio']
from psychopy import sound


win = visual.Window([400,300], monitor="testMonitor", units="cm", fullscr=False)
stimuli = []
datafile = open("audioStim.csv", "rb")
reader = csv.reader(datafile, delimiter=";")
for row in reader:
    stimuli.append(row[0])
    #print (stimuli)
datafile.close()

clock = core.Clock()
for stimulus in stimuli:
    #print (stimuli)
    for frameN in range(18):
        #print clock.getTime()
        sound_stimulus = sound.Sound(stimulus)
        sound_stimulus.play()
        win.callOnFlip(clock.reset)
        win.flip()



## Closing Section
win.close()
core.quit()

在运行实验时,声音似乎相互融合。它们听起来并不离散。 结果有点问题,这是 Psychopy 的问题(声音这么短时质量不好?)还是代码的问题?

感谢您的宝贵时间! 非常欢迎任何其他改进代码的建议或建议。

【问题讨论】:

    标签: csv audio frames psychopy


    【解决方案1】:

    您的代码开始在每一帧上播放声音,即每秒 60 次。这样做:

    for stimulus in stimuli:
        #print (stimuli)
        for frameN in range(18):
            #print clock.getTime()
            win.flip()
            if frameN == 0:
                sound_stimulus = sound.Sound(stimulus)
                sound_stimulus.play()
                clock.reset()  # Time zero is stimulus onset
    

    我在这里做了两件事。首先,我只在翻转开始时启动sound_stimulus.play()clock.reset() - 而不是在后续更新时。其次,我在win.flip 之后开始播放声音,以便它定时翻转。如果您在翻转之前播放,声音可以在 16.7 毫秒间隔内的任何位置开始播放(但可能仅适用于第一次尝试)。

    顺便说一句,由于您并没有真正使用变量sound_stimulus,您可以进一步简化代码:

            if frameN == 0:
                sound.Sound(stimulus).play()
    

    【讨论】:

    • @lookingforanswers。伟大的!如果它解决了您的问题,请记得点击右侧的“接受答案”,以帮助未来的用户找到答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多