効果音を鳴らす

XNA で効果音を鳴らします。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. XNA でキーの操作で効果音を鳴らします。
    効果音を鳴らすには XACT(Microsoft Cross-Platform Audio Creation Tool) を使います。
    次のページを参照して XNA プロジェクトの準備をして下さい。
    BackMusic を演奏
  2. Windows エクスプローラで Wave File を先ほど作成した Content\Audio\Waves\ にコピーします。
    XNA Game Studio 2.0 のサンプルプログラム Spacewar を作成すると、そのプロジェクトに沢山のコンテンツが格納されます。
    今回は Spacewar のプロジェクトから、次のファイルをコピーして使用することにします。
    \MySpacewarWin1\Content\Audio\Waves\Ships\engine_2.wav
    \MySpacewarWin1\Content\Audio\Waves\Weapons\hyperspace_activate.wav
    Spacewar を作成することが出来ない場合は、適当な wave file を調達してきて下さい。
    その場合、全ての wave file が演奏できるとは限らないことを留意して下さい。
  3. XACT プロジェクトを起動します。
    XACT は XNA とは独立したプロジェクトになっていて、連携してゲームプログラムを作成します。
    1. XACT プロジェクトの基本的な説明は BackMusic を演奏 を参照して下さい。
    2. wave file を挿入します。
      ツリーから[Wave Bank]をクリックして、メニューから[Wave Banks][Insert Wave File(s)]を選択して、 プロジェクトに格納した二個の wave file を選択すると、Wave バンクに wave file が表示されます。
      メニューから[Window][Tile Horizontally]を選択すると Wave Bank と Sound Bank が上下に並べて表示されます。
      Wave Bank に表示された二個の wave を Cue Name に Drag & Drop します。

    3. engine_2 は Enter キーを押し続けている間、繰り返し演奏します。
      繰り返し演奏する場合は、次の設定をして下さい。
      engine_2 をクリックすると、サウンド バンクの右上のパネルにツリー構造が表示されます。
      サウンド バンクの右上のパネルで、[Play Wave]をクリックします。
      XACT ウィンドウの左下にプロパティのセットが一覧表示されます。
      Looping の Infinite をチェックします。

    4. XACT のプロジェクトを保存して終了します。
  4. Visual C# 2008 Express Edition に戻り、プロジェクトを開きます。
    ソリューション エクスプローラで Content\Audio フォルダーを右クリックします。
    [追加][既存の項目]から MySound.xap を選択すると XACT で設定した WAVE と関連付けられます。
    MySound.xap は XACT プロジェクトで保存した名前です。

  5. Game1.cs を修正します。
    spriteBatch の次の行に、Sound 関係の領域を定義します。
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
    
            AudioEngine audioEngine;
            WaveBank waveBank;
            SoundBank soundBank;
            Cue engineSound = null; 
        
  6. Initialize() 関数で Sound の初期化を行います。
    MySound.xgs は XACT プロジェクトで保存した名前です。
    waveBank, soundBank は、そのまま記述して下さい。
            protected override void Initialize()
            {
                // TODO: Add your initialization logic here
                base.Window.Title = "XNA Game Studio";
                audioEngine = new AudioEngine( "Content\\Audio\\MySound.xgs" ); 
                waveBank = new WaveBank( audioEngine, "Content\\Audio\\Wave Bank.xwb" ); 
                soundBank = new SoundBank( audioEngine, "Content\\Audio\\Sound Bank.xsb" ); 
    
                base.Initialize();
            }
        
  7. Update() 関数で Sound を演奏します。
    Space キーで hyperspace_activate.wav を鳴らします。
    この方法は爆発音のように一度だけ鳴らす場合に適しています。
    Enter キーを押し続けると engine_2 を繰り返し演奏します。
    この方法は効果音を連続して鳴らす場合に適しています。
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==
                    ButtonState.Pressed  ||
                    Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit();
    
                // TODO: Add your update logic here
                //Space キーで hyperspace_activate.wav を鳴らします。
                if (Keyboard.GetState().IsKeyDown(Keys.Space))
                    soundBank.PlayCue("hyperspace_activate");
                //Enter キーを押し続けると engine_2 を繰り返し演奏します。
                if (Keyboard.GetState().IsKeyDown(Keys.Enter))
                {
                    if (engineSound == null)
                    {
                        engineSound = soundBank.GetCue("engine_2");
                        engineSound.Play();
                    }
                    else if (engineSound.IsPaused)
                    {
                        engineSound.Resume();
                    }
                }
                else
                {
                    if (engineSound != null && engineSound.IsPlaying)
                    {
                        engineSound.Pause();
                    }
                }
    
                base.Update(gameTime);
            }
        
  8. 手順は長いのですが、実際に操作すればすぐ要領をつかめます。
    音声の無いゲームプログラムなんて「気のぬけたビール」みたいなものです。 (^_^;)
    頑張って音声を組み込んで下さい。

前田稔(Maeda Minoru)の超初心者のプログラム入門

超初心者のプログラム入門(XNA(C#) game program)