ここでは、オーディオエンジンを初期化し、サウンドとウェーブバンクを読み込み、Cueオブジェクトを介して音声を再生する方法を説明します。
ノート:
この作例では、すでにXACTプロジェクト(.xapファイル)が作成してあるものとします。その方法を知りたいなら、How to: Add a Sound File to Your Game Using XACT?を参照してください。
この作例では、すでにXACTプロジェクト(.xapファイル)が作成してあるものとします。その方法を知りたいなら、How to: Add a Sound File to Your Game Using XACT?を参照してください。
音声を再生する方法
To play a sound
1. 保存してあるXACTプロジェクトファイル(.xap)ファイルを、XNA ゲームプロジェクトのディレクトリに移動します。(How to: Add a Sound File to Your Game Using XACT?を参照してください)。
1. 保存してあるXACTプロジェクトファイル(.xap)ファイルを、XNA ゲームプロジェクトのディレクトリに移動します。(How to: Add a Sound File to Your Game Using XACT?を参照してください)。
2. .xapファイルが参照しているWAVEファイルをXNAゲームプロジェクトのディレクトリに追加します。
3. ソリューションエクスプローラ上のプロジェクトのアイコンを右クリックします。
4.「Add」(「追加」かも)を選択し、次に「既存のアイテム」を選択します。
5. プロジェクトのディレクトリから、.xapファイルを選択します。.xapファイルがプロジェクトに追加されるはずです。デフォルトでは、それはコンテントパイプラインによって処理され、ゲームをビルドするときに自動的にウェーブバンクとサウンドバンクもビルドされます。
6. ゲームのコードを編集します。ゲームが始まったときに新しいAudioEngineオブジェクトを作成します。その際にコンストラクタの引数にXACTプロジェクトが出力したXACTグローバルセッティングファイルのファイル名を指定します。拡張子 .xgs を付けるのを忘れないでください。
7. XACTプロジェクト内の全てのウェーブバンクに対してWaveBankオブジェクトを作成します。コンストラクタにはAudioEngineとXACTプロジェクトが出力したXACTウェーブバンクのファイル名を渡してください。拡張子 .xwb を付けるのを忘れないでください。
8. XACTプロジェクト内の全てのサウンドバンクに対してSoundBankオブジェクトを作成します。コンストラクタにはAudioEngineとXACTプロジェクトが出力したXACTサウンドバンクのファイル名を渡してください。拡張子 .xsb を付けるのを忘れないでください。
9. オーディオエンジンがオーディオデータを処理するために、ゲームがUpdateされている間にAudioEngineのUpdateメソッドを実行してください。
10. SoundBankオブジェクトのPlayCueメソッドを実行します。引数に再生したいキューを指定します。
#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Storage;
#endregion
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
ContentManager content;
//オーディオAPIのコンポーネント
AudioEngine audioEngine;
WaveBank waveBank;
SoundBank soundBank;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
content = new ContentManager(Services);
}
protected override void Initialize()
{
audioEngine = new AudioEngine("TestSounds.xgs");
waveBank = new WaveBank(audioEngine, "TestWaveBank.xwb");
soundBank = new SoundBank(audioEngine, "TestSoundBank.xsb");
soundBank.PlayCue("kaboom");
base.Initialize();
}
protected override void LoadGraphicsContent(bool loadAllContent)
{
if (loadAllContent)
{
}
}
protected override void UnloadGraphicsContent(bool unloadAllContent)
{
if (unloadAllContent == true)
{
content.Unload();
}
}
protected override void Update(GameTime gameTime)
{
// Allows the default game to exit on Xbox 360 and Windows
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
audioEngine.Update();
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
}
Remarks:
再生されているCueインスタンスは、名前が同じであっても違うものです。ですから同じキューを同時に複数鳴らすことができますよ。
再生されているCueインスタンスは、名前が同じであっても違うものです。ですから同じキューを同時に複数鳴らすことができますよ。
affillogo.gif