クソゲーを作りながらMicrosoftの統合ゲーム開発環境「XNA Game Studio 3.0」を学習するWikiです。



注意


ここに掲載されているのは古い情報となります。SoundEffect.Playを使ったほうが簡単にBGMを再生できます。

shot.mp3ファイルをプロジェクトにドラッグ&ドロップして下記のコードで再生します。

 SoundEffect seShot;
 seShot = content.Load<SoundEffect>("shot")
 seShot.Play();

内容


XNAで効果音を鳴らすには・・・

XACTで、

1. XACT(Microsoft Cross-Platform Audio Creation Tool)を使って.xapファイルを作成
2. .xapファイルをVisual Studio 2008のコンテンツとして追加(こうすることでVisual Studio 2008のビルドとXACTのビルドが連動される)
3. .xapにWave BankとSound Bankを追加
4. .xapに追加したWave Bankに効果音として鳴らしたい.wavファイルを追加(Insert Wave File(s)...)
5. 追加した.wavファイルをSound BankのCueとして割り当てる
6. .xapを保存

プログラムで、

1. コンテンツとして追加した.xapをAudioEngineとして読み込む
2. AudioEngineからWaveBankを生成
3. AudioEngineからSoundBankを生成
4. 生成したSoundBankからCueを取得
5. CueをCue.Playで再生

※説明と実際の行番号がずれてしまっているところがあります

http://msdn.microsoft.com/en-us/library/bb203879.a...
http://msdn.microsoft.com/en-us/library/bb195053.a...
上記を参考にします。

1. XACTを使って.xapファイルを作成

  • 1. スタート→Microsoft XNA Game Studio 3.0→Tools→Microsoft Cross-Platform Audio Creation Tool (XACT)を起動する。
  • 2. File→New ProjectでNew Project Pathダイアログが開くので、(この後すぐに消すので)適当な場所にAudioという名前のプロジェクトを作成する。


  • 3. XACTを閉じる。

2. プロジェクトへ.xapを追加

  • 1. ソリューションエクスプローラの「Content」を右クリック→追加→新しいフォルダで・・・



「Audio」という画像用フォルダを作成。


  • 2. 上記で追加した「Audio」フォルダを右クリック→追加→既存の項目...で・・・



先ほど作成した空の.xapをを選択する。



Asset Nameは Audio となっている。

3. XACTで効果音として鳴らしたい.wavファイルを追加

  • 1. 先ほどプロジェクトに追加してコピーができた方の.xapをXACTで開く。

color(blue){このファイルは例えば C:\Documents and Settings\ユーザ名\My Documents\Visual Studio 2008\Projects\WindowsGame1\WindowsGame1\Content\Audio\Audio.xap にある。}
  • 2. Wave Banks→New Wave Bankで新しいWave Bankを追加。


  • 3. Sound Banks→New Sound Bankで新しいSound Bankを追加。


  • 4. ウィンドウが重なっているのでWindow→Tile Horizontallyで縦に並べて表示。


  • 5. Wave Banks→Insert Wave File(s)...で、



効果音として鳴らしたい.wavファイルを全て選択。



Wave Bankウィンドウに3つの.wavが追加された。



なお、ここで追加された.wavの情報は.xapプロジェクトでは「相対パスのみ」保存されているため、元の.wavファイルを削除したり移動したりするとエラーの原因となる。このためVisual Studio 2008のプロジェクトと一緒に元の.wavを管理したい場合は、Visual Studio 2008のプロジェクト内に.wav用フォルダを作成して、その中の.wavをInsert Wave File(s)...で追加すると良い。
  • 6. 追加された3つの.wavを全て選択して、Sound BankウィンドウのCue Nameの方へドラッグ&ドロップ。



このときSound Bankウィンドウが小さいとCue Nameが見えないことがあるので、予めCue Nameが見えるようにしておく。

Sound BankウィンドウのSound NameとCue Nameにそれぞれ3つが追加された。


  • 7. File→Save Projectで保存する。

4. 効果音を読み込む

  • 1. Game1.csの24行目辺りにAudioEngine、WaveBank、SoundBankを格納するメンバ変数を追加します。



        AudioEngine audioEngine;
        WaveBank waveBank;
        SoundBank soundBank;
  • 2. 59行目辺りにAudioEngine、WaveBank、SoundBankを読み込む処理を書きます。



            audioEngine = new AudioEngine("Content\\Audio\\Audio.xgs");
            waveBank = new WaveBank(audioEngine, "Content\\Audio\\Wave Bank.xwb");
            soundBank = new SoundBank(audioEngine, "Content\\Audio\\Sound Bank.xsb");
            audioEngine.Update();

5. 効果音を鳴らす

  • 1. Game1.csの27行目辺りにCキーが押されっぱなしかどうかを判定するメンバ変数を追加します。



        bool pressingC = false;
  • 2. 96行目辺りにCキーが押されたら効果音を再生する処理を書きます。



            if (ks[Keys.C] == KeyState.Down && !pressingC)
            {
                pressingC = true;
                Cue cue = soundBank.GetCue("SHOT");
                cue.Play();
            }
            else if (ks[Keys.C] == KeyState.Up)
            {
                pressingC = false;
            }
            audioEngine.Update();

6. F5キーで実行。


Cキーを押すとフォッと音が鳴った。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます