サウンドをチャンネルで管理
2013-11-25


サウンドプレイヤーは最低限、同時再生の数だけ必要ですが、通常そんなものはたかがしれています。
システム側でプレイヤーをチャンネルとして管理、アプリ側はチャンネル番号を指定して再生などのサウンド処理を行うようにしてみます。


Sound.h
/******************
    サウンド管理
 ******************/
class SoundManager
{
        static SoundPlayer*             player;                         // プレイヤー

public :

        static void             init(void);                                     // 初期化
        static void             quit(void);                                     // 終了

        static void             play(int, const void*, u32, int _loop = 1, float _vol = 1.0f);                  // 再生
        static void             play(int);
        static void             prepare(int, const void*, u32, int _loop = 1, float _vol = 1.0f);               // 再生準備
        static void             play(void);                                                                                                                             // 全て再生
        static void             stop(int);                                      // 停止
        static void             stop(void);                                     // 全て停止
        static void             set_volume(int, float);         // 音量設定
        static void             set_master_volume(float);       // マスター音量設定
        static void             set_next(int, const void*, u32, int _loop = 1);                                                 // 連続再生設定
        static void             pause(int);                                     // 一時停止
        static void             pause(void);                            // 全て一時停止
        static void             pause_system(void);                     // システムによる一時停止
        static void             resume(int);                            // 再開
        static void             resume(void);                           // 全て再開
        static void             resume_system(void);            // システムによる再開
};

サウンド管理クラス sys::SoundManagerです。
メンバ関数は基本的に sys::SoundPlayerの関数の先頭の引数にチャンネル番号をくっつけたものとなっています。


Sound.cpp
SoundPlayer*    SoundManager::player = NULL;                    // プレイヤー

/************************
    サウンド管理初期化
 ************************/
void    SoundManager::init(void)
{
        SoundPlayer::init_engine();                                                     // サウンドエンジン初期化
        player = new SoundPlayer[SOUND_CHANNEL_MAX];            // プレイヤー
}

/**********
    終了
 **********/
void    SoundManager::quit(void)
{
        if ( player ) {
                delete[]        player;
                player = NULL;
        }
        SoundPlayer::quit_engine();                                                     // サウンドエンジン終了
}

初期化・終了処理です。
プレイヤーのインスタンスの確保・解放を行います。また、sys::SoundPlayerの初期化・終了処理もここで呼んでしまいます。
チャンネル数 SOUND_CHANNEL_MAXは、def.hで定義しています。


続きを読む

[Android プログラミング]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット