Screen('Flip')

[VBLTimestamp StimulusOnsetTime FlipTimestamp Missed Beampos] = Screen('Flip', windowPtr [, when] [, dontclear] [, dontsync] [, multiflip]);

Flipコマンドは、垂直帰線(vertical retrace)に同期して、フロントディスプレイ(画面に見えているスクリーン?)とバックディスプレイ(画面に見ていないスクリーン?)を入れ替えます。またそのときの時間を返します。

引数windowPtrはオンスクリーンウィンドウを示すポインタで、windowPtrで指定されるウィンドウに描画されている内容がflpのタイミングで画面に呈示されます。

引数whenで、いつflipするかを指定します。whenが0のとき(これがデフォルトです)次に画面を切り替えることができるタイミングでflipします。

このあたりの説明はブラウン管ディスプレイ(CRT)の動作が分かっていないと理解しにくいと思います。大雑把に説明すると、パソコンの画面は高速のパラパラ漫画のようになっていて、画面を書き換えるタイミングというのが物理的に決まっているのです。パラパラのスピードはリフレッシュレートと呼ばれます。例えばリフレッシュレートが60Hzであれば、1秒間に60回パソコンの画面は切り替わっています。パラパラ漫画の1枚を、1フレームと呼びます。1フレームの呈示時間は1000 ms / 60 Hz = 約16.7 ms となります。つまりリフレッシュレートが60Hzであれば、16.7 ms 毎にしか画面を書き換えられないのです。Flipコマンドを呼び出したときに、物理的に書き換えられるタイミングであるとは限らないので、書き換えられるときを待ってFlipするということです。

引数whenが0よりも大きい値のときは、whenで指定した時間が過ぎて最も早く訪れた画面切り替えのタイミングでflipします。

例えばリフレッシュレートが60Hzの場合を考えてみましょう。flipできるタイミングは

0 ms, 16.7 ms, 33.4 ms, 50.1 ms, 66.8 ms ・・・と続いていきます。

ここでwhen=30であれば、33.4 ms のときに呈示するということです。

引数dontclearが1のときは、framebufferが消えません。これはどういうことかというと、flip前に画面に呈示されていたものに追加する形で刺激を呈示するということです。デフォルトではdontclearは0で、flipが行われるたびにframebufferを背景色で塗りつぶします。

引数dontclearが2のときは(ここは管理人もよく分かっていません)flipの後にframebufferには何も行いません。バッファのセットアップ作業はプログラム作成者に委ねられます。framebufferはflip後に不安定な状態になっています。

( A value of 2 will prevent Flip from doing anything to the framebuffer after flip. This leaves the job of setting up the buffer to you - the framebuffer is in an undefined state after flip. )

引数dontsyncが0のとき(デフォルト)は、Flipは垂直帰線に同期するため、Matlabの実行はFlipが生じるまで停止します。

引数dontsyncが1のときは、垂直帰線に同期しますが、Flipが生じるのを待ちません。(たぶんプログラムがそのまま次の行を実行するということかな・・・)Flipコマンドはすぐに戻り値を返しますが、それらの値は不正確でしょう。

引数dontsyncが2のときは、垂直帰線の同期を待たずに、すぐに刺激を(中途半端に)呈示します。(たぶんアニメーションのプログラムなどではチカチカするでしょう)

引数multiflipのデフォルトの値は0です。

引数multiflipの値が0より大きい場合は、すべてのオンスクリーンウィンドウをflipします。これは複数のディスプレイを使っているとき(multidisplay stereo setups or haploscopes)に重要になります。

You need to (somehow) synchronize all attached displays for this to operate tear-free.

Flipは、実際にflipしたときの時間をVBLTimestamp(これは高精度です。単位は秒です)で返します。

また、StimulusOnsetTimeは、刺激が呈示され始めた時間?(Stimulus-onset time)を返します。

Beamposは、時間測定が行われたときのmonitor scanning beamの場所です。(正確さを測るテストに使用できるでしょう)

FlipTimestamp はFlipの実行が終わった時間です。Flipの実行にどれぐらいの時間がかかったかは、FlipTimestamp からVBLTimestamp を引くことで分かります。これを知ることで、(例えば、EEGやfMRIのようなデータ収集装置の triggering や、音を再生させる場合のような)Matlabの実行を 帰線(retrace)に同期させるときのタイミングエラーが分かるでしょう。

Missedは、プログラマが要求しているタイミングで刺激を呈示できたかどうかを示します。

Missedがマイナスの値であれば、デッドライン以内であったことを意味します。

Missedがプラスの値であれば、デッドラインをオーバーしてしまったことを意味します。

デッドラインミスを絶対確実に自動検出できるとは限らない。自動検出は大部分の実験のセットアップにおいて公正に動くべきだけれども、それはfalse positivesもfalse negativesも報告し得る。もしプログラマが時間制御に神経質であれば、テストを実行するために、与えられたタイムスタンプか、付け加えられた方法を使ってください。

(この段落の意味はよく分かりません)

The automatic detection of deadline-miss is not fool-proof - it can report false positives and also false negatives, although it should work fairly well with most experimental setups. If you are picky about timing, please use the provided timestamps or additional methods to exercise your own tests.