PsychPortAudio('Stop')
[startTime endPositionSecs xruns estStopTime] = PsychPortAudio('Stop', pahandle [, waitForEndOfPlayback=0] [, blockUntilStopped=1] [, repetitions] [, stopTime]);
PortAudioデバイスを停止します。'pahandle' は停止するデバイスのハンドルです。
'waitForEndOfPlayback' が1に設定されていると、この関数は再生が終わるまで待機します。これは再生時間をあらかじめ決めている場合にのみ意味があります。つまり、無限に再生を繰り返し、かつ 'stopTime' が指定されていない場合にはこのフラグは無視されます。(なぜならフリーズしてしまうから)
録音中のセッションでも、同様に無視されます。
'waitForEndOfPlayback' が0に設定されていると(デフォルト)再生が終了するのを待たずに、中断します。このコマンドを呼び出したあとも数ミリ秒は再生が継続するかもしれません。
2に設定されていると、再生(と録音)を可能な限り早く停止します。その結果、変な音が出るかもしれません。この中断は、ふつうのstopより早いかもしれないし、そうでないかもしれません。これはハードウェアに依存しますが、なるべく早く停止するように動作します。
最悪な状況では、内部バッファーに蓄えられたサウンドデータを再生し続けようとするでしょう。その結果、音を停止させるためのlatency は、可能な限り素早く再生するときのlatency と同じになるかもしれません。
例えば第二世代のIntel MacBook Pro は最適化された条件下(buffersize = 64, frequency=96000, OS/X 10.4.10。他のサウンドアプリは動作していない)で、停止の遅れが約5-6ms ほどあるようです。
3に設定されると、ただちに再生を停止しようとはしません。これは、再生回数、または 'stopTime' を指定しているときに、再生が終了するまで待機したいときに使用します。また待機時間なしで、'repetitions' または 'stopTime' の値を変更することが可能です。
'blockUntilStopped' は音の処理が本当に停止するまで、この関数が待機すべきかどうかを定義します。(これは1に設定されているときの動作で、デフォルトです)もしくはゼロに設定されているときは、停止のスケジュールを組むだけで、できるだけ早くreturn(プログラムが次の行にうつるということ)します。
'waitForEndOfPlayback' が1に設定されているときは、'blockUntilStopped' は意味がなく、停止が完了するまで常にブロック(待機?)します。
'stopTime' によって指定された時間に、再生が停止します。同様に 'repetitions' で指定された回数を繰り返したあと、再生が停止します。これらは、PsychPortAudio('Start') やPsychPortAudio('RescheduleStart') によって事前に設定されていた値を書き換えます。
--- 返り値について ---
'startTime' は、停止されたストリームが、再生または録音を実際に開始した時間の見積もりを返します。
これは、waiting モードで動作しているときは、start コマンドの返り値と同じ値になります。
'endPositionSecs' は最後の再生または録音の位置です。単位は秒。
'xruns' はバッファーオーバーラン、またはバッファーアンダーランの数です。
不具合のない条件下では、この値はゼロになるべきですが、ゼロだからといって不具合がなかったことを意味しているわけではありません。不具合の見落としがあり得ます。
'estStopTime' 再生が停止したと思われる時間の推定値。
以上の返り値は、'blockUntilStopped' がゼロに設定されているときは、未定義になります。