音楽再生・停止:WindowsMediaPlayerの扱い方

この章ではBGM(mp3ファイル等)の再生・停止方法について解説します。
※SharpDXを使わないやり方なのですがゲーム作りで便利なためご紹介しています。

実行結果

今回のサンプルでは、WindowsMediaPlayer(以下、WMP)を使いBGMの再生・停止関数を用意します。 また使い方のサンプルとして、起動後にサンプルコードで実際にBGMを再生するアプリとなっています。

WMPを関連付け

必要なパッケージをインストール

  1. 「NuGet」を使った同じやり方で「WMPLib」をインストールします。

WMPの設定

  1. 音源を扱う変数を宣言します。
    // WindowsMediaPlayer関連
    WMPLib.WindowsMediaPlayer mediaPlayer = null;
    
  2. WMPの初期化を行います。
    try
    {
        mediaPlayer = new WMPLib.WindowsMediaPlayer();
        if (mediaPlayer != null)
        {
            mediaPlayer.settings.volume = (int)(100.0F);
        }
    }
    catch { MessageBox.Show("WindowsMediaPlayerの生成に失敗しました。", "エラー"); }
    

再生処理

  1. BGMの処理を関数として作ります。
    外部からBGMを好きに再生できるよう関数化して扱いやすくしておきます。
    /// 音楽の再生
    public void PlayBGM(string soundFileName)
    {
        // 再生中のBGMがある場合は再生を停止させる
        StopBGM();
        // サウンドデバイスが無い場合処理しない
        if (mediaPlayer == null) { return; }
        
        // 再生するファイルを指定する
        mediaPlayer.URL = soundFileName;
        // 繰り返し再生するか設定する
        // ※true:繰り返し再生ON、false:繰り返し再生OFF
        mediaPlayer.settings.setMode("loop", true);
        //再生する
        if (mediaPlayer.controls != null)
        {
            mediaPlayer.controls.play();
        }
    }
    

停止処理

  1. BGMの処理を関数として作ります。
    外部からBGMを好きに停止できるよう関数化して扱いやすくしておきます。
    /// 音楽の停止
    public void StopBGM()
    {
        // サウンドデバイスが無い場合処理しない
        if (mediaPlayer == null) { return; }
    
        // 再生しているオーディオを停止する
        if (mediaPlayer.controls != null)
        {
            mediaPlayer.controls.stop();
        }
    }
    

サンプル:BGMの再生処理

  1. BGM再生関数の使い方としてサンプル用のコードです。
  2. BGMとなるmp3音源を用意してexeが生成されるフォルダ内に格納しておきます。
    ※今回 BGMは、フリー音楽素材/魔王魂さんの素材「ファンタジー12」を使わせて頂きました。
  3. メインループ内で、BGM設定がされていない場合にだけBGMが再生されるような簡易的な処理となっています。
    ※ゲームなどで組み合わせる場合は、キーの入力や特定タイミングなどで同じように呼び出すようにしてください。
    // 何もBGMが設定されていなかった場合、設定して再生する
    if(mediaPlayer.URL == null || mediaPlayer.URL == "")
    {
        PlayBGM(@"bgm_maoudamashii_fantasy12.mp3");
    }
    
  4. 上記処理をメインループ処理に組み込んで呼び出します。

解放処理

  1. WMPの解放処理を行います。
    StopBGM();
    

コード

Program.cs

GameForm.cs