/* * CWaveReaderクラスを定義するためのファイルです。 * Author: AKIYAMA Kouhei * Created: 2002-09-25 */ #ifndef SSLIB2_WAVE_READER_H_INCLUDED #define SSLIB2_WAVE_READER_H_INCLUDED namespace sslib2 { /** * WAVEデータを読み込むためのインタフェースを規定するクラスです。 */ class CWaveReader { public: /** * オブジェクトを解体します。必要ならCloseを呼び出します。 */ virtual ~CWaveReader(){} /** * 全てのリソースを解放し、次にまたオープンできる状態にします。 */ virtual void Close(void) = 0; /** * オープン状態かどうかを返します。 */ virtual bool IsOpen(void) const = 0; /** * 指定したバイト数だけpcmデータを読み込みます。 * エラーが発生するか、終端に達するまでsizeで指定したバイト数だけ読み込めます。 */ virtual bool Read(void *dst, unsigned long size, unsigned long *read) = 0; /** * 次にReadを呼んだときに取り出せるpcmデータの位置をサンプル数で指定します。 */ virtual bool Seek(unsigned long sample) = 0; /** * 次にReadを呼んだときに取り出せるpcmデータの位置をサンプル数で返します。 */ virtual unsigned long Tell(void) const = 0; /** * リーダーが終端に達しているかどうかを返します。 * つまりSeekしない限りこれ以上Readを呼んでもデータが出てこないときtrueを返します。 */ virtual bool IsTerminated(void) const = 0; //情報取得操作 /** * Readで読み込めるデータの形式を返します。 * 少なくともWAVE_FORMAT_PCM形式であることは保証します。 */ virtual PCMWAVEFORMAT GetFormat(void) const = 0; /** * 全体のサンプル数を返します。 */ virtual unsigned long GetTotal(void) const = 0; /** * デフォルトループイン地点を先頭からのサンプル数で返します。 */ virtual unsigned long GetLoopIn(void) const = 0; /** * デフォルトループアウト地点を先頭からのサンプル数で返します。 * このメソッドで返した地点はループ範囲に含まれません。ループ範囲は半開区間[loopin, loopout)です。 */ virtual unsigned long GetLoopOut(void) const = 0; /** * デフォルトループ数を返します。0はループしないことを、-1は無限を意味します。 */ virtual int GetLoopCount(void) const = 0; /** * デフォルトでストリーム再生するかどうかを返します。 */ virtual bool GetStreamFlag(void) const = 0; //ヘルパー関数(インタフェースには影響ありません) /** * GetStreamFlagのデフォルトの実装です。サイズによって自動判別します。 */ inline bool DefaultGetStreamFlag(void) const { if(GetTotal() > 44100*3){ // 44KHzで3秒分に相当するサンプル数以上ならストリーム再生する return true; } else{ return false; } } }; } #endif