Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

SoundCache.h

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------
00002 // Lamp : Open source game middleware
00003 // Copyright (C) 2004  Junpei Ohtani ( Email : junpee@users.sourceforge.jp )
00004 //
00005 // This library is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU Lesser General Public
00007 // License as published by the Free Software Foundation; either
00008 // version 2.1 of the License, or (at your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // Lesser General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public
00016 // License along with this library; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //------------------------------------------------------------------------------
00019 
00020 /** @file
00021  * サウンドキャッシュヘッダ
00022  * @author Junpee
00023  */
00024 
00025 #ifndef SOUND_CACHE_H_
00026 #define SOUND_CACHE_H_
00027 
00028 #include <Core/Container/ArrayList.h>
00029 #include <Core/Container/HashMap.h>
00030 #include <Sound/System/Sound.h>
00031 
00032 namespace Lamp{
00033 
00034 class TextReader;
00035 
00036 //------------------------------------------------------------------------------
00037 /**
00038  * サウンドキャッシュ
00039  *
00040  * 静的サウンドをキャッシングするためのクラス。ストリームは恩恵が無いので
00041  * 現在非対応。ストリームに対するclone()が上手くいくようになれば対応を考える。
00042  * SoundCache.cppのrev1.5あたりにストリームキャッシュの実装有り。
00043  */
00044 class SoundCache{
00045 public:
00046     //--------------------------------------------------------------------------
00047     // 生成、破棄
00048     //--------------------------------------------------------------------------
00049     /**
00050      * コンストラクタ
00051      * @param basePath ベースパス
00052      * @param extension 「.」付き拡張子(例 : ".wav" ".ogg")
00053      * @param focus フォーカス
00054      * @param defaultMaxMixingCount デフォルト最大ミキシング数
00055      */
00056     SoundCache(const String& basePath = "", const String& extension = "",
00057         Sound::Focus focus = Sound::focusNormal,
00058         int defaultMaxMixingCount = 16);
00059 
00060     /**
00061      * デストラクタ
00062      */
00063     virtual ~SoundCache();
00064 
00065     //--------------------------------------------------------------------------
00066     // サウンドのロード
00067     //--------------------------------------------------------------------------
00068     /**
00069      * 静的サウンドのロード
00070      * @param name サウンド名
00071      * @param loop ループするならtrue
00072      * @param priority 優先度を32767〜-32768の間で指定
00073      * @param maxMixingCount 最大ミキシング数、0ならデフォルトを使用する
00074      * @return 成功すればtrueを返す
00075      */
00076     virtual bool loadStaticSound(const String& name, bool loop = false,
00077         int priority = Sound::priorityDefault, int maxMixingCount = 0);
00078 
00079     /**
00080      * 静的3Dサウンドのロード
00081      * @param name サウンド名
00082      * @param minimumDistance 最小距離
00083      * @param maximumDistance 最大距離
00084      * @param loop ループするならtrue
00085      * @param priority 優先度を32767〜-32768の間で指定
00086      * @param maxMixingCount 最大ミキシング数、0ならデフォルトを使用する
00087      * @return 成功すればtrueを返す
00088      */
00089     virtual bool loadStaticSound3D(const String& name, bool loop = false,
00090         int priority = Sound::priorityDefault,
00091         float minimumDistance = DS3D_DEFAULTMINDISTANCE,
00092         float maximumDistance = DS3D_DEFAULTMAXDISTANCE,
00093         int maxMixingCount = 0);
00094 
00095     /**
00096      * サウンドのアンロード
00097      * @param name サウンド名
00098      * @return 成功すればtrueを返す
00099      */
00100     virtual bool unloadSound(const String& name);
00101 
00102     /**
00103      * 全サウンドのアンロード
00104      */
00105     virtual void unloadAll();
00106 
00107     //--------------------------------------------------------------------------
00108     // サウンドリスト
00109     //--------------------------------------------------------------------------
00110     /**
00111      * サウンドリストのロード
00112      * @param filePath ベースパスからの相対ファイルパス
00113      * @return 成功すればtrue
00114      */
00115     virtual bool loadSoundList(const String& filePath);
00116 
00117     /**
00118      * サウンドリストのロード
00119      * @param textReader テキストリーダ
00120      * @return 成功すればtrue
00121      */
00122     virtual bool loadSoundList(TextReader* textReader);
00123 
00124     //--------------------------------------------------------------------------
00125     // サウンドの再生
00126     //--------------------------------------------------------------------------
00127     /**
00128      * サウンドの再生
00129      *
00130      * ループサウンドの場合は返り値のポインタを保存して自前でstop()を呼んでください。
00131      * ループサウンドで無い場合は返り値のポインタへのアクセスは、呼び出した時点で
00132      * のみ行い、その後は使用しないで下さい。もし、ループしていないサウンドに対して
00133      * 再生終了までのアクセスが必要なのであれば、getSound(),releaseSound()を
00134      * 使用してください。
00135      * @param name 名前
00136      * @param volume ボリュームを1.fから0.fの間で指定する
00137      * @param frequency 周波数を100から100000の間で指定する、0ならオリジナル周波数
00138      * @return 再生したサウンド、失敗ならNULL。
00139      */
00140     virtual Sound* playSound(const String& name, float volume = 1.f,
00141         int frequency = 0);
00142 
00143     /**
00144      * ステレオサウンドの再生
00145      *
00146      * ループサウンドの場合は返り値のポインタを保存して自前でstop()を呼んでください。
00147      * ループサウンドで無い場合は返り値のポインタへのアクセスは、呼び出した時点で
00148      * のみ行い、その後は使用しないで下さい。もし、ループしていないサウンドに対して
00149      * 再生終了までのアクセスが必要なのであれば、getSound(),releaseSound()を
00150      * 使用してください。
00151      * @param name 名前
00152      * @param volume ボリュームを1.fから0.fの間で指定する
00153      * @param frequency 周波数を100から100000の間で指定する、0ならオリジナル周波数
00154      * @param pan パンを-1.f(左)から1.f(右)の間で指定する
00155      * @return 再生したサウンド、失敗ならNULL。
00156      */
00157     virtual StereoSound* playStereoSound(const String& name, float volume = 1.f,
00158         int frequency = 0, float pan = 0.f);
00159 
00160     /**
00161      * 3Dサウンドの再生
00162      *
00163      * ループサウンドの場合は返り値のポインタを保存して自前でstop()を呼んでください。
00164      * ループサウンドで無い場合は返り値のポインタへのアクセスは、呼び出した時点で
00165      * のみ行い、その後は使用しないで下さい。もし、ループしていないサウンドに対して
00166      * 再生終了までのアクセスが必要なのであれば、getSound(),releaseSound()を
00167      * 使用してください。
00168      * @param name 名前
00169      * @param volume ボリュームを1.fから0.fの間で指定する
00170      * @param frequency 周波数を100から100000の間で指定する、0ならオリジナル周波数
00171      * @param position 再生位置を指定する
00172      * @return 再生したサウンド、失敗ならNULL。
00173      */
00174     virtual Sound3D* playSound3D(const String& name, float volume = 1.f,
00175         int frequency = 0, const Vector3& position = Vector3::zero);
00176 
00177     //--------------------------------------------------------------------------
00178     // サウンドの取得、解放
00179     //--------------------------------------------------------------------------
00180     /**
00181      * サウンドの取得
00182      *
00183      * サウンドの所有権を得る。所有権を得ている間、サウンドは再利用されない。
00184      * 使用後はreleaseSound()で返却する必要がある。
00185      * @param name 名前
00186      * @param resetFlag リセットフラグ
00187      * @return 取得したサウンド、失敗ならNULL。
00188      */
00189     virtual Sound* getSound(const String& name,
00190         Sound::Reset resetFlag = Sound::resetRuntime);
00191 
00192     /**
00193      * ステレオサウンドの取得
00194      *
00195      * サウンドの所有権を得る。所有権を得ている間、サウンドは再利用されない。
00196      * 使用後はreleaseSound()で返却する必要がある。
00197      * @param name 名前
00198      * @param resetFlag リセットフラグ
00199      * @return 取得したサウンド、失敗ならNULL。
00200      */
00201     virtual StereoSound* getStereoSound(const String& name,
00202         Sound::Reset resetFlag = Sound::resetRuntime);
00203 
00204     /**
00205      * 3Dサウンドの取得
00206      *
00207      * サウンドの所有権を得る。所有権を得ている間、サウンドは再利用されない。
00208      * 使用後はreleaseSound()で返却する必要がある。
00209      * @param name 名前
00210      * @param resetFlag リセットフラグ
00211      * @return 取得したサウンド、失敗ならNULL。
00212      */
00213     virtual Sound3D* getSound3D(const String& name,
00214         Sound::Reset resetFlag = Sound::resetRuntime);
00215 
00216     /**
00217      * サウンドの解放
00218      *
00219      * getSound()で所有権を得たサウンドを解放する。
00220      * @param sound 解放するサウンド
00221      */
00222     virtual void releaseSound(Sound* sound);
00223 
00224     //--------------------------------------------------------------------------
00225     // その他
00226     //--------------------------------------------------------------------------
00227     /**
00228      * 全サウンドの再生を一時停止する
00229      */
00230     virtual void suspendAll();
00231 
00232     /**
00233      * 全サウンドの再生を再開する
00234      */
00235     virtual void resumeAll();
00236 
00237     //--------------------------------------------------------------------------
00238     /**
00239      * 文字列への変換
00240      * @return 文字列
00241      */
00242     virtual String toString() const;
00243 
00244 protected:
00245     //--------------------------------------------------------------------------
00246     /**
00247      * キャッシュ作成
00248      * @param name 名前
00249      * @param sound キャッシュを作成するサウンド
00250      * @param maxMixingCount 最大ミキシング数
00251      */
00252     virtual void createCache(
00253         const String& name, Sound* sound, int maxMixingCount);
00254 
00255     //--------------------------------------------------------------------------
00256     // サウンド配列
00257     //--------------------------------------------------------------------------
00258     /**
00259      * サウンド配列
00260      */
00261     class SoundArray{
00262     public:
00263         /**
00264          * コンストラクタ
00265          * @param sound 初期化サウンド
00266          * @param maxMixingCount 最大ミキシング数
00267          */
00268         SoundArray(Sound* sound, int maxMixingCount);
00269 
00270         /**
00271          * デストラクタ
00272          */
00273         virtual ~SoundArray();
00274 
00275         /**
00276          * フリーサウンド取得
00277          * @return フリーサウンド、無ければNULLを返す
00278          */
00279         Sound* getFreeSound();
00280 
00281         /**
00282          * サウンド数の取得
00283          * @return サウンド数
00284          */
00285         virtual int getSoundCount() const{ return sounds_.getCount(); }
00286 
00287         /**
00288          * サウンドの取得
00289          * @param index サウンドインデックス
00290          * @return サウンド
00291          */
00292         virtual Sound* getSound(int index){ return sounds_[index]; }
00293 
00294         /**
00295          * 文字列への変換
00296          * @return 文字列
00297          */
00298         virtual String toString() const;
00299 
00300     protected:
00301         /// サウンド配列
00302         ArrayList<Sound*> sounds_;
00303         /// 最大ミキシング数
00304         int maxMixingCount_;
00305 
00306     };
00307 
00308     //--------------------------------------------------------------------------
00309     // メンバ変数
00310     //--------------------------------------------------------------------------
00311     /// キャッシュ
00312     HashMap<String, SoundArray*> cache_;
00313     /// リスト
00314     ArrayList<SoundArray*> list_;
00315     /// ベースパス
00316     String basePath_;
00317     /// 拡張子
00318     String extension_;
00319     /// フォーカス
00320     Sound::Focus focus_;
00321     /// デフォルト最大ミキシング数
00322     int defaultMaxMixingCount_;
00323 
00324 private:
00325     // コピーコンストラクタの隠蔽
00326     SoundCache(const SoundCache& copy);
00327 
00328     // 代入コピーの隠蔽
00329     void operator =(const SoundCache& copy);
00330 
00331 };
00332 
00333 //------------------------------------------------------------------------------
00334 } // End of namespace Lamp
00335 #endif // End of SOUND_CACHE_H_
00336 //------------------------------------------------------------------------------

Generated on Wed Mar 16 10:29:36 2005 for Lamp by doxygen 1.3.2