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