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 //------------------------------------------------------------------------------