最終更新: xna_game_studio 2009年02月12日(木) 01:24:08履歴
ここに掲載されているのは古い情報となります。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. 先ほどプロジェクトに追加してコピーができた方の.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で保存する。
- 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();
- 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();
コメントをかく