csv - 从 csv 文件播放的 Psychopy 声音混合在一起(以帧为单位测量时间)
问题描述
在我准备的实验中,声音是从 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 的问题(声音这么短时质量不好?)还是代码的问题?
感谢您的时间!非常欢迎任何其他改进代码的建议或建议。
解决方案
您的代码开始在每一帧上播放声音,即每秒 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()
and clock.reset()
- 而不是在后续更新时。其次,我在 AFTER 之后启动了声音win.flip
,以便它定时到翻转。如果您在翻转之前播放,声音可以在 16.7 毫秒间隔内的任何位置开始(但可能仅适用于第一次尝试)。
顺便说一句,由于您并没有真正使用 variable sound_stimulus
,因此您可以进一步简化代码:
if frameN == 0:
sound.Sound(stimulus).play()
推荐阅读
- c++ - 如何对 C++ 进行编程以从 txt 文件中读取一定数量的行?
- amazon-web-services - AWS STS 担任角色:获取会话令牌
- python - 如何从数据框中绘制直方图
- java - Spring Boot:POST提交将null保存在数据库中
- python - 根据包含整数和两个整数列表的列值对 pandas df 进行排序
- google-apps-script - 如何使用 Drive API v3 将文件添加到我的云端硬盘?
- google-sheets - Equally divide a list of names in Google Sheets
- node.js - 后端未连接到前端、heroku 和浪涌
- css - 删除黑色背景 vimeo 播放器 iframe
- python - Spyder4如何打开代码中调用的文件