using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Storage; using Microsoft.Xna.Framework.Content; namespace Pong { /// /// This is a game component that implements IUpdateable. /// public class AudioManager : Microsoft.Xna.Framework.GameComponent { private AudioEngine engine; private SoundBank sounds; private WaveBank waves; private Cue musicCue; public AudioManager(Game game, string settingsFile, string waveBankFile, string SoundBankFile) : base(game) { // TODO: Construct any child components here this.engine = new AudioEngine(settingsFile); this.waves = new WaveBank(this.engine, waveBankFile); this.sounds = new SoundBank(this.engine, SoundBankFile); } /// /// Allows the game component to perform any initialization it needs to before starting /// to run. This is where it can query for any required services and load content. /// public override void Initialize() { // TODO: Add your initialization code here base.Initialize(); } /// /// Allows the game component to update itself. /// /// Provides a snapshot of timing values. public override void Update(GameTime gameTime) { // TODO: Add your update code here base.Update(gameTime); } public Cue GetCue(string cueName) { return sounds.GetCue(cueName); } public void PlayCue(string cueName) { sounds.PlayCue(cueName); } public void PlayMusic(string cueName) { this.StopMusic(); this.musicCue = this.GetCue(cueName); this.musicCue.Play(); } public void StopMusic() { if (this.musicCue != null) { this.musicCue.Stop(AudioStopOptions.AsAuthored); this.musicCue.Dispose(); this.musicCue = null; } } protected override void Dispose(bool disposing) { try { if (disposing) { this.StopMusic(); if (this.sounds != null) { this.sounds.Dispose(); this.sounds = null; } if (this.waves != null) { this.waves.Dispose(); this.waves = null; } if (this.engine != null) { this.engine.Dispose(); this.engine = null; } } } finally { base.Dispose(disposing); } } } }