>> ゲームプログラミング入門トップに戻る

メモリに読み込んだ音声データを削除する

今回はメモリに読み込んだ音声データを削除する方法を説明します。

LoadSoundMem関数で読み込んだ音声データは、
プログラム終了時に自動で削除されますが、手動で削除することもできます。
なぜそんなことをする必要があるのか?
たとえば、ゲームを作成していて、ステージ1だけでしか使わない音声があるとします。
ステージ2に進んでしまえば、もうその音声は不要になりますよね?
ですが、読み込んだままだとその音声データ分のメモリが無駄に使用されたままになっているわけです。
このままだとリソースの無駄ですので、不要になったときに削除してやることで、
無駄のないリソース管理が出来ます。

関数には、DeleteSoundMem関数を使います。
引数にはサウンドハンドルを指定します。
成功すると0、エラーだと-1が返ります。

削除したサウンドハンドルはもう使えなくなるのでご注意下さい。

以下はサンプルコードになります。

#include "DxLib.h"

// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
	ChangeWindowMode(TRUE);

	if( DxLib_Init() == -1 )		// DXライブラリ初期化処理
	{
		return -1 ;			// エラーが起きたら直ちに終了
	}
	
	char key[256];

	//サウンドハンドル取得。
	int sh;
	sh=LoadSoundMem("bom.wav");

	
	//描画先を裏画面に設定
	SetDrawScreen(DX_SCREEN_BACK);

	while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(key)==0){

		if(key[KEY_INPUT_RETURN]==1){
				PlaySoundMem(sh,DX_PLAYTYPE_BACK,TRUE);
		}
	}

	//音声データを削除。
	DeleteSoundMem(sh);

	DxLib_End() ;				// DXライブラリ使用の終了処理

	return 0 ;				// ソフトの終了 
}

終了直前に音声データを削除しています。
どうせその後のDxLib_End関数が実行された時点で解放されるので、
このコードはほとんど意味がありませんが、
もっと大規模なゲームを作成したときには必ず必要になってきますので、覚えておいたほうが便利です。


また、メモリに読み込んだ音声ファイルを一度に削除するInitSoundMemという関数もあります。
引数はなしです。0が返ると成功、-1が返るとエラーです。

ステージ1の音声だけ全部読み込んで、ステージ2に移るときにこの関数で全部削除し、
またステージ2で必要な分をまとめて読み込む、などという時に便利ですね。

サウンド周りの講座は以上になります。
他にも細かい関数はたくさんあるので、リファレンス等を参照して下さい。

>> ゲームプログラミング入門トップに戻る