ホームへ戻る

 2.7章 効果音を鳴らす

 グラフィック系の関数をある程度扱ったので、次はサウンド系の関数を勉強してみましょう。

サウンドも、グラフィックと考え方はほとんど同じです。読み込み関数を使って素材をロードし、識別番号が返ってきますから、識別番号を使って音を鳴らします。

サウンド素材をロードし、識別番号を返す関数は LoadSoundMem関数 です。LoadSoundMem関数 のリファレンスを確認 してみましょう。

宣言 int LoadSoundMem( char *FileName ) ;

概略 音声ファイル(WAV.MP3.Ogg)をメモリに読みこむ

引数 FileName : メモリに読みこむ音声ファイルのファイル名文字列のポインタ


引数にはファイルパスを指定します。指定出来るファイルの種類は Wav, Mp3, Ogg の3種類です。

サウンドファイルについての詳しい説明は 補足資料3章 音楽ファイルの種類(Wav, Mp3, Ogg)をご覧ください。

以下に簡単に説明します。

Wav は無圧縮の音楽ファイルです。フォーマットにもよりますが、だいたい1分10[MB]位になり、トンでもない容量を必要とします。

Mp3 は圧縮した音楽ファイルです。ビットレート等によりますが、80kbpsでだいたい1分0.5[MB]位になります。但しMp3には
特許が存在します。そこでOggの出番になります。

Ogg はMp3と同等の圧縮が可能な
フリーの圧縮形式です。Oggに特許は存在しませんからゲームに同梱しても問題ありません。

さて、話を戻しましょう。

LoadSoundMem関数 にはこの3種類のファイルが指定出来ます。

ロードして返って来た識別番号は PlaySoundMem関数 で再生出来ます。PlaySoundMem関数 のリファレンスを確認 してみましょう。

宣言 int PlaySoundMem( int SoundHandle , int PlayType ) ;

概略 メモリに読みこんだ音声データを再生する

引数 SoundHanle : 再生する音の識別番号(サウンドハンドル)
PlayType  : 再生形式
         DX_PLAYTYPE_NORMAL : ノーマル再生
         DX_PLAYTYPE_BACK  : バックグラウンド再生
         DX_PLAYTYPE_LOOP  : ループ再生


(あまり使用しない引数は省略してあります)

第一引数には先ほど取得した識別番号を指定します。

第二引数には再生形式を指定します。ノーマル再生は普通使用しません。ノーマル再生は関数を呼ぶと鳴り終わるまで処理が止まります。

普通効果音の再生にはバックグラウンド再生を指定します。BGMなどループする必要がある時はループ再生を指定します。

では、サンプルプログラムで、効果音を再生して試してみましょう。


#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

        int Handle, Count=0;
        Handle = LoadSoundMem("サウンド/1up.wav"); // サウンド/1up.wavをロードし、識別番号をHandleに格納

        // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){

                if( Count % 120 == 0 ){ // 2秒に一度
                        PlaySoundMem( Handle, DX_PLAYTYPE_BACK ); // 効果音を再生する
                }

                Count++;

        }

        DxLib_End(); // DXライブラリ終了処理
        return 0;
} 
 
 

実行結果


2秒に一度1upの効果音を鳴らすプログラムです。

前に説明した通り、while文は1秒間に60回の速さでループしています。

よってCountのインクリメントは1秒間に60の速さです。

増加しているカウンタを120で割った余りが0の時鳴らせば2秒に一度成らせることになるのであのような実行結果になっています。

→分からないことがあれば掲示板で質問して下さい


- Remical Soft -