はじめに
前の記事でRaspberry Pi 4 (Raspi4)にGNU Octave上でPsychtoolbox (PTB)を動作させるための準備をしました。この記事では Raspi4 + Octave + PTBの環境で心理実験のために最低限の動作をするか確認します。
基本的な動作確認
ScreenのOpen
まずはPTBで最も重要なScreen関数の動作確認です。下記のスクリプトを実行し、真っ白な実験画面がフルスクリーンで5秒間表示されたあと、自動的に実験画面が閉じれば成功です。
clear;
clc;
scrnNum = max(Screen('Screens'));
mainWindow = Screen('OpenWindow', scrnNum, [255 255 255]);
WaitSecs(5);
Screen('CloseAll');
画像の表示
画像素材サイト「いらすとや」の画像をjpgに変換した画像が画面中央に5秒間表するプログラムです。下記の画像をseikou_banzai_man.jpgとしてダウンロードし、displayJapaneseCharacter.mと同じ階層に置かれている想定で作成したプログラムです。
clear;
clc;
scrnNum = max(Screen('Screens'));
mainWindow = Screen('OpenWindow', scrnNum, [255 255 255]);
img = imread('./seikou_banzai_man.jpg');
tex = Screen('MakeTexture', mainWindow, img);
Screen('DrawTexture', mainWindow, tex);
Screen('Flip', mainWindow);
WaitSecs(5);
Screen('CloseAll');

フルスクリーンの白背景に目的の画像が5秒間表示され、その後に自動的に実験画面が閉じれば成功です。
音声の再生
YouTube等でもよく聞く無料音声ファイルを再生してみます。音源ファイルは下記のURLからダウンロードしました。
playSound.mと同じ階層にeye-catch.mp3が置かれている想定で作成されたプログラムです。真っ白の画面で音楽(約15秒)が再生されれば成功です。
clear;
clc;
InitializePsychSound;
pahandle = PsychPortAudio('Open', [], [], 0, [], 2);
scrnNum = max(Screen('Screens'));
mainWindow = Screen('OpenWindow', scrnNum, [255 255 255]);
snd = './eye-catch.mp3';
[sndData, ~] = audioread(snd);
sndData = transpose(sndData);
PsychPortAudio('FillBuffer', pahandle, sndData);
Screen('Flip', mainWindow);
PsychPortAudio('Start', pahandle, 1);
PsychPortAudio('Stop', pahandle, 1);
PsychPortAudio('Close', pahandle);
Screen('CloseAll');
動画の再生
次は動画の再生です。著作権フリーのビデオクリップがダウンロードできるPixabayから素材を入手しました。10から1へのカウントダウンの動画(約10秒)です。
https://pixabay.com/ja/videos/秒読み-十-九-八-時間-558/
上記URLからダウンロードした「558-137190717_medium.mp4」がplayMovie.mと同じ階層にある想定で作成したプログラムです。
clear;
clc;
InitializePsychSound;
pahandle = PsychPortAudio('Open', [], [], 0, [], 2);
scrnNum = max(Screen('Screens'));
mainWindow = Screen('OpenWindow', scrnNum, [255 255 255]);
movie = '558-137190717_medium.mp4';
moviePath = strcat(pwd,'/', movie);
moviePtr = Screen('OpenMovie', mainWindow, moviePath);
Screen('PlayMovie', moviePtr, 1, 0, 1);
while true
tex = Screen('GetMovieImage', mainWindow, moviePtr);
if tex <= 0
break;
end
Screen('DrawTexture', mainWindow, tex);
Screen('Flip', mainWindow);
Screen('Close', tex);
end
Screen('PlayMovie', moviePtr, 0);
Screen('CloseMovie', moviePtr);
Screen('CloseAll')
日本語文字の表示は?
私の研究分野ではPTBを使って日本語文字を表示する必要があり、過去にはUbuntu上でのOctave + PTBで日本語文字を表示する方法についての記事も書きました。しかし、当該記事の内容はRaspi + Octave + PTBの環境ではまったくうまく動きませんでした・・・。色々と苦労して何とか日本語文字を表示する方法を整えたので次の記事で紹介します。