前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PsychoPy视频刺激和音频刺激

PsychoPy视频刺激和音频刺激

作者头像
脑机接口社区
发布2020-06-29 17:06:52
2.6K0
发布2020-06-29 17:06:52
举报
文章被收录于专栏:脑机接口脑机接口

PsychoPy


Rose小哥是个代码狂,个人喜欢编写代码来实现相关实验设计,因为编写代码来实现实验十分灵活。

PsychoPy安装与测试案例

PsychoPy文字刺激、图片刺激和光栅刺激

这篇主要介绍视频刺激、音频刺激。

视频刺激


1.打开Coder视图

2.如下图在Coder编辑器中,编写代码。

代码语言:javascript
复制
# -*- coding: utf-8 -*-
'''
视频刺激
'''
#导入工具
from psychopy import visual, core, event

"""
用visual.Window创建一个窗口/屏幕来创建想要呈现文字/图片等这些刺激。

visual.Window的参数解析:

size:屏幕分辨率的大小, size=(600,400)
color:表示屏幕颜色。(0,0,0)是RGB模式,取值范围是[-1,1],全为-1的话是纯黑色,全为1是白色。
当然也可以采用其他方式设置颜色,比如直接用颜色名:color='green'。
fullscr:True为全屏,默认值为False不全屏。

"""
DISPSIZE=(400,400)
win = visual.Window(fullscr = False, 
                    size = DISPSIZE,
                    color = (-1.0,-1.0,-1.0))

"""
文字刺激TextStim的参数:

win:呈现的屏幕。
text:文字内容。u'str',前面加u表示unicode编码,如果是中文的话则需要用u,英文则无需。
pos:位置。以屏幕中心(0,0)为坐标中心建一个坐标轴,(x,y)相当于坐标,右/上为正值,左/下为负值。
取值范围最好在(-1,1)中间,相当于占位的百分比。
color:颜色。
bold/italic:是字体的格式,加粗/倾斜。
"""
msg1 = visual.TextStim(win, text = u'视频刺激',
                               height = 0.12,
                               pos = (0.0,0.2),
                               bold = True,
                               italic = False,
                               color = 'pink')

#呈现文字刺激
"""
stimName.draw()用来绘制刺激内容。
win.flip()用来刷新屏幕。

括号里是秒数,可以是整数也可以是小数。使程序保持这个状态停留3秒.
core.wait(3)

说明:用core.wait(n)控制时间是比较粗糙的,误差比较大。
可以用core.clock()严格控制时间的刺激呈现。
"""
msg1.draw()
win.flip()
core.wait(3)

#视频刺激
video1 = visual.MovieStim(win, 'aa.mp4')
video1.size *= 0.7
#播放视频
"""
循环绘制视频帧
判断视频播放状态,如果未到视频最后,则继续循环。
"""
while video1.status != visual.FINISHED:
    video1.draw()
    win.flip()
    # 如果按Esc键则退出播放
    if event.getKeys(keyList = ['escape']):
        video1.pause()
        break
"""
关闭窗口,退出程序。
"""
win.close()
core.quit()

音频刺激


PsychoPy中并没有专门的音频刺激方法,在上面我们知道视频刺激有对应的方法MovieStim。我们可以通过利用MovieStim来实现音频刺激。

方法:将音频文件转换为视频文件即可。比如将mp3转换为avi或者mp4。

代码程序与上面视频刺激一样。

过程中遇到的奇葩问题


在使用PsychoPy来设计视频刺激实验时,遇到奇怪的问题:

在同一段代码在PsychoPy Coder视图中来运行出现的是下面的问题:

‘AVbin is required to decode compressed media’)

pyglet.media.riff.WAVEFormatException: AVbin is required to decode compressed media

而在Pycharm中出现的是下面的问题:

pyglet wave.Error: file does not start with RIFF id

经分析出现这两个问题的原因都是系统中缺少音视频的解码器。只不过PsychoPy Coder中默认采用的是AVbin来解码。而在Pycharm调用的是pyglet推荐的ffmpeg来解码。

两个问题的解决方法都是,安装需要的工具库来进行解码。

说明:这里的系统都是windows,其他系统类似。

针对在PsychoPy Coder出现的问题:

‘AVbin is required to decode compressed media’)

pyglet.media.riff.WAVEFormatException: AVbin is required to decode compressed media

解决方法:

根据系统要求下载并安装对应AVbin:

AVbin官网:http://avbin.github.io/AVbin/Download.html

针对在Pycharm中出现的问题:

pyglet wave.Error: file does not start with RIFF id

解决方法:

到ffmepg官网下载对应系统的对应版本:

ffmpeg官网:https://ffmpeg.zeranoe.com/builds/

由于本人安装的是shared版本,解压即可使用[但需要配置]。

配置:直接在系统环境变量中配置存放路径

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 脑机接口社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档