画像の短時間提示と時間制御を検証するプログラム
心理学実験では画像などの提示時間や提示間の時間間隔を制御する必要があります。Windowsで,提示制御を確実に行えるかどうかを検証するためのプログラムを作成しました。このプログラム発展させれば,心理学の実験プログラムを作成できるでしょう。
星野祐司
立命館大学総合心理学部

DirectXを用いたプログラム
- CSharpDX11D2N.zip(2022年2月3日)
- ダウンロードしたzipファイルを右クリックして「プロパティ」を開き,「全般」のタブで「許可する」にチェックを入れ手から展開すると,Windowsからの警告が現れなくなります。
- zipファイルの展開後,CSharpDX11D2N.exeフォルダー内のCSharpDX11D2N.exeを実行すると,設定画面が表示されます。
- ファイルサイズが大きいので起動に少し時間がかかります。
- マルチモニターに対応しています。設定画面を表示させたいモニターに移動させてOKボタンをクリックすれば,そのモニターに画像が表示されます。
- Visual Studio Community 2022とC#,.NET 6,SharpDX 4.2を使用してプログラムを作成しました。
- SharpDXは .NET環境でDirectXを利用するためのライブラリーです。
- ソースファイルは必要に応じて修正してください。
実行例
- CSharpDX11D2.exeを実行すると,まず設定画面が表示されます。

- OKボタンをクリックすると,ユリの画像を縦に3分割した画像を左から順に表示します。モニターの解像度やリフレッシュレートはWindowsの設定をそのまま使用します。

- 液晶ディスプレイ(BenQ XL2411Z)に画像が表示されている様子を確認するためにデジタルカメラ(Nikon 1 V2)を使って,連続して撮影した 6枚の画像を示します。
- BenQ XL2411Zはゲーム用液晶モニターです。設定は,リフレッシュレートが60 Hz,Blur ReductionがOFF,AMAがOFF,Instant ModeがON でした。
- Nikon 1 V2の連写機能(60 fps)を使ってモニターを撮影しました。各画像の露光時間は 1/250 秒です。
- モニターにユリの3分割画像を 1周期(1/60秒)ごとに表示させました(画像B,C,D)。
- カメラのグリップ側を上にして縦置きで撮影しました。画像のほぼ半分が表示された時点でカメラのシャッターが切れています。画像の端が左上から右下方向に斜めになっているのは,カメラのシャッターが画面に向かって左側から右側へ移動したためです。
- 設定画面でファイル名を入力すれば,経過時間(ms)の記録がテキストファイルの形式で残ります。
full screen, vsync, priority.highest, beep ON, LED OFF, space_bar key, refresh rate = 60
No. 1
0, 16
1, 17
2, 17
3, 16
No. 2
0, 16
1, 17
2, 17
3, 16
- 3行目 スペースキーを押してから1番目の画像提示処理が完了するまでの経過時間
- 4行目 1番目の画像提示処理が完了してから 2番目の画像提示処理が完了するまでの経過時間
- 5行目 2番目の画像提示処理が完了してから 3番目の画像提示処理が完了するまでの経過時間
- 6行目 3番目の画像提示処理が完了してから,空白画面の提示処理が完了するまでの経過時間
プログラムの概要
- 経過時間の計測
- キー入力
- キー入力処理と経過時間の計測を組み合わせれば,反応時間の計測ができます。
- 垂直同期
- Windows はバファ―上にイメージのデータを保存し,モニターに対応するバファ―を切り替えて,画像を表示させます。このような仕組みは,スワップチェーンと呼ばれます。
- モニターのリフレッシュに合わせてバッファーを切り替える垂直同期をプログラムで検出できれば,モニターへの表示に合わせて進行するプログラムの作成が可能になります。
- 垂直同期を検出するために,Direct3D 11とDXGIを用いています。
- 画像
- テキスト
- 音
- LED
- 画像や音の提示処理をプログラムが実行してから,モニターやスピーカーから実際に信号が現れるまでには遅れをともなう可能性があります。
- LEDを付けた ArduinoをPCにシリアルポートを経由で接続すれば,LEDの発光と画像や音の提示をビデオカメラかデジタルカメラで撮影することで,そのような遅れを確認できます。
2022年 2月 2日
2020年 5月 3日
2014年11月20日