Class template basic_background_player
hamigaki::audio::basic_background_player —
basic_background_player
はhamigaki::iostreams::background_copy
をオーディオ操作用に改良したものである。
Synopsis
Description
basic_background_player
は次に示す3つの状態をとる。
-
空(empty)
- 再生対象となるSource/Sinkが設定されていない
-
再生中(playing)
- 再生操作のためスレッドが動作している
-
停止中(stopping)
- 再生が完了したか中断された
|
注意 |
多くの場合、Source/Sinkはコピーコンストラクタおよびコピー代入演算子によって複製されると、複製元と複製先でデバイスの状態を共有する。このような共有情報を複製元のデバイスを通して変更してはならない。 |
basic_background_player
construct/copy/destruct
-
basic_background_player();
-
template<typename Source, typename Sink>
basic_background_player(const Source& src, const Sink& sink,
std::streamsize buffer_size = boost::iostreams::default_device_buffer_size);
Effects: |
open(src, sink, buffer_size)
|
Postconditions: |
状態=停止中 |
-
~basic_background_player();
basic_background_player
modifiers
-
template<typename Source, typename Sink>
void open(const Source& src, const Sink& sink,
std::streamsize buffer_size = boost::iostreams::default_device_buffer_size);
Requires: |
状態=空 |
Effects: |
src から読み込んだデータをdest に書き出すスレッドを起動する。 |
Postconditions: |
状態=停止中 |
-
void close();
Requires: |
状態=停止中 |
Effects: |
basic_background_player の保持するSource/Sinkの対を破棄する。 |
Notes: |
再生中の場合は、Source/Sinkの対を破棄する前にstop() が呼び出される。 |
Postconditions: |
状態=空 |
-
void play();
Requires: |
状態=停止中 |
Effects: |
再生を開始する。 |
Postconditions: |
状態=再生中 |
-
void stop();
Requires: |
状態=再生中または停止中 |
Effects: |
copy() により作成されたスレッドをキャンセルし、その終了を待つ。 |
Notes: |
この関数はスレッドの終了を待つため、ブロックする。 |
Postconditions: |
状態=停止中 |
-
std::streampos
seek(boost::iostreams::stream_offset off, std::ios_base::seekdir way);
Requires: |
状態=停止中 |
Effects: |
入力デバイスsrc がInput-seekableならば、boost::iostreams::seek(src, off, way, std::ios_base::in) を呼び出す。 |
Returns: |
入力デバイスsrc がInput-seekableならば、入力ヘッドの位置。それ以外の場合は、-1。 |
basic_background_player
queries
-
bool operator!() const;
-
bool playing();
Returns: |
再生中かどうか |
Notes: |
この関数は、コピーが完了している場合はスレッドの終了を待つ。 |
Postconditions: |
true を返した場合、状態=再生中。それ以外の場合、状態=停止中 |
-
std::streampos tell();
Requires: |
状態=再生中または停止中 |
Returns: |
入力デバイスsrc がInput-seekableならば、入力ヘッドの位置。それ以外の場合は、-1。 |
Notes: |
コピーが完了あるいは中断された後も、次にclose() を呼ぶまで値は保持される。 |