C03.SDL_Mixer
SDL_Mixerを使用したサウンドの再生方法を紹介します。

準備
SDL_Mixerを使用するための準備をします。
SDL_mixer.libをリンクしてください。
SDL_mixer.hをインクルードしてください。
#ifdef WIN32
#include <windows.h>
#pragma comment(lib, "Irrlicht.lib")
//SDL用設定
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#pragma comment(lib, "SDL_mixer.lib")
//C/C++→コード生成→ランタイムライブラリ→マルチスレッドDLLに変更
#endif
#include <SDL/SDL.h>
#include <SDL/SDL_syswm.h>//SysWMinfo使用
#include <SDL/SDL_mixer.h>
|
初期化
SDL_Mixerを使用する場合は、事前にSDL_Init()を実行しておきます。
(ここでは、createDeviceSDL()で初期化をしているので記述していません。)
※Mix_OpenAudioでバッファサイズを指定する場合、サイズが低いと
音が汚くなるので余裕をもって設定しましょう。
//事前にSDL_Init()を実行すること
// open 44.1KHz, signed 16bit, system byte order,
// stereo audio, using 4096 byte chunks
if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 4096) == -1)
return 1;
|
効果音・BGMの読み込み
ファイル名を指定して、それぞれの形式で呼び出します。
//効果音ファイルを読み込む
Mix_Chunk *sample;
sample = Mix_LoadWAV("data/sound/choice.wav");
//BGMファイルを読み込む
Mix_Music *music;
music = Mix_LoadMUS("data/sound/be01.wav");
|
効果音・BGMの再生
メインループ内で呼び出す場合は、BGMが再生されていない場合は再生する、
というように1クッション必要になります。
while(device->run())
{
driver->beginScene(true, true, 0xFF6060FF);
//キー処理
keyFunc(device);
//効果音再生
//Mix_PlayChannel(-1, sample, 0);
//BGM再生
if(Mix_PlayingMusic() == 0)
Mix_PlayMusic(music,-1);
//シーンの描画
smgr->drawAll();
driver->endScene();
}
|
終了処理
演奏している効果音やBGMを停止・開放し、AUDIOを閉じます。
//終了処理
Mix_HaltMusic();//演奏停止
Mix_FreeChunk(sample);
Mix_FreeMusic(music);
Mix_CloseAudio();
|

IrrKlangと比較して
SDL_MixerはSDLを使用しなくい場合でも、SDL_Init()を呼び出す必要があります。
そのため、使用するDLLが多くなってしまいます。
効果音を再生する場合も、チャネル数分しか再生できず、
多くの効果音を再生させなければならない場合は、管理が大変になりそうです。
また、古いライブラリでもあるので、新しいライブラリのIrrKlangの方が
使いやすいかと思います。
ただし、PS3LinuxでもSDLが使用できるため、そのことを考えると
SDL_Mixerを使用しておくのもいいかもしれません。
|
ダウンロード
今回作成したファイル一式です。
宿題
1.マウスやキーボードを押したら効果音が鳴るようにしてみましょう。
|
|