PsychoPy入門_03_視訊和音訊的呈現

weixin_34050427發表於2016-10-14

不靠譜PsychoPy入門教程目錄:

  1. PsychoPy入門00安裝

  2. PsychoPy入門01文字和圖片的呈現

  3. PsychoPy入門02按鍵等待&反應時

  4. PsychoPy入門03視訊和音訊的呈現

  5. PsychoPy入門04等級評定

  6. PsychoPy入門05迴圈和隨機

  7. PsychoPy入門06資料記錄

  8. PsychoPy入門07滑鼠的使用

  9. 用PsychoPy做視覺搜尋任務實驗


誒,這次說一下視訊和音訊的呈現。(這部分可用性較差,隨意參看一下吧。)

把上一篇中的程式碼拿過來,刪去圖片部分,把文字呈現時間改回兩秒。我們的開始程式碼是這樣的:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

#示例3
'''
    視訊和音訊的呈現
'''
#載入所需要的庫
from psychopy import visual, core, event

#建立視窗
win = visual.Window(fullscr = False, 
                    size = (1000,600),
                    color = (-1.0,-1.0,-1.0))

#文字
text_1 = visual.TextStim(win, text = u'示例3',
                               height = 0.12,
                               pos = (0.0,0.2),
                               bold = True,
                               italic = False,
                               color = 'pink')

text_2 = visual.TextStim(win, text = u'',
                               height = 0.1,
                               pos = (0.0,-0.2),
                               bold = True,
                               italic = False,
                               color = 'violet')
text_2.text= u'視訊和音訊'

#呈現文字刺激
text_1.draw()
text_2.draw()
win.flip()
core.wait(2)

win.close()
core.quit()

呈現刺激的方法呢基本上都差不多,先建個刺激,然後draw()。視訊和文字圖片的差別在於它有變化,需要連續呈現。直接來看程式碼吧。

#視訊刺激
mov_1 = visual.MovieStim(win, 'mov_1.avi')
mov_1.size *= 0.7
#播放視訊
while mov_1.status != visual.FINISHED:
    mov_1.draw()
    win.flip()
    if event.getKeys(keyList = ['escape']):
        mov_1.pause()
        break

這裡用來呈現視訊的是visual.MovieStim(),括號裡是它的各項引數。引數的含義和設定方法參見官網手冊movieStim()。剛去瞄了一眼,官網把這一項刪掉了,為啥呢?

不過程式還可以跑,接著說一下吧。視訊和指令碼放在同一資料夾下。視訊格式最好轉成常用的格式。

視訊的呈現用到一個while迴圈,沒有結束之前持續播放。在迴圈裡設定一個退出鍵,這個是必須的,不然跳不出來。我用了escape鍵,就是左上角那個ESC。

音訊的話並沒有一個專門的函式,如果確實需要播放音訊,就把mp3格式轉為avi格式來播放。方法跟上面視訊呈現完全一樣。


整體程式碼如下:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

#示例3
'''
    視訊和音訊的呈現
'''

#載入所需要的庫
from psychopy import visual, core, event

#建立視窗
win = visual.Window(fullscr = False, size = (1000,600),
                    color = (-1.0,-1.0,-1.0))

#文字
text_1 = visual.TextStim(win, text = u'示例3', height = 0.12, pos = (0.0,0.2), color = 'pink')
text_2 = visual.TextStim(win, text = u'', height = 0.1, pos = (0.0,-0.2), color = 'skyblue')
text_2.text= u'視訊和音訊'

#呈現文字刺激
text_1.draw()
text_2.draw()
win.flip()
core.wait(2)

#視訊刺激
mov_1 = visual.MovieStim(win, 'mov_1.avi')
mov_1.size *= 0.7
#播放視訊
while mov_1.status != visual.FINISHED:
    mov_1.draw()
    win.flip()
    if event.getKeys(keyList = ['escape']):
        mov_1.pause()
        break
#音訊刺激
mov_2 = visual.MovieStim(win, 'audio.avi' )
mov_text = visual.TextStim(win, text = u'音訊播放中')

while mov_2.status != visual.FINISHED:
    mov_2.draw()
    mov_text.draw()
    win.flip()
    if event.getKeys(keyList = ['escape']):
        break

win.close()
core.quit()

有什麼疑問或建議請在下方評論。

相關文章