WP XNA 5: Wygodne zarządzanie dźwiękiem (SoundProvider)

Gry w odróżnieniu do aplikacji „biznesowych” często wydają z siebie dźwięki i muzykę. W wytycznych certyfikacji na Windows Phone Marketplace znajdziemy zapisy, które regulują co w kwestii dźwięków jest wymagane z naszej strony. Poniżej przedstawię przydatną klasę SoundProvider, która uprości nam zarządzanie dźwiękiem.

Ten wpis jest częścią cyklu o moich przygodach w tworzeniu gier XNA dla Windows Phone.

WP Marketplace wymaga m.in od nas aby użytkownik mógł wyłączyć efekty dźwiękowe i  muzykę (dodatkowo można regulować poziom głośności muzyki).

Mój SoundProvider jest połączeniem repozytorium dźwięków i managera, który je odtwarza. I pewnie można by go rozdzielić na dwie klasy, bo w sumie robi 2 różne rzeczy. Ale w tym przykładzie niech zostanie tak jak jest, bo dźwieków mam mało do grania. Oczywiście w większym projekcie będzie można pomyśleć o jakimś refaktoringu.

SoundProvider zawiera szereg statycznych pół, które są typu SoundEffect (klasa z frameworka XNA), które są instancjami poszczególnych efektów dźwiękowych. Podobnie jak we wcześniej opisywanej klasie Texture musimy mieć możliwość załadowania dźwieków do pamięci. Metodę LoadSounds wywołujemy odpowiednio wcześniej.

using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;

namespace SpaceBridge
{
	public static class SoundProvider
	{
		public static SoundEffect AstronautMove;
		public static SoundEffect AstronautCrash;
		public static SoundEffect Score;

		public static SoundEffect ButtonPressed;

		public static void LoadSounds(ContentManager contentManager)
		{
			AstronautMove = contentManager.Load("Sounds/Move");
			AstronautCrash = contentManager.Load("Sounds/Crash");
			Score = contentManager.Load("Sounds/Score");

			ButtonPressed = contentManager.Load("Sounds/button_pressed");
		}

		public static void Play(SoundEffect sound)
		{
			Play(sound, Settings.Sound.Volume, 0f, 0f);
		}

		public static void Play(SoundEffect sound, float volume, float pitch, float pan)
		{
			if (Settings.Sound.Enabled)
				sound.Play(volume, pitch, pan);
		}
	}
}

Na końcu klasy widzimy metodę Play (jej 2 przeciążenia). Play pozwala na odtworzenie wskazanego w parametrze dźwięku, ale dodatkowo uwzględnia ustawienia dźwięku w naszej aplikacji. Klasa Settings (również wcześniej opisywana) przechowuje informację o tym, czy dźwięk jest włączony czy wyłączony. Poziom głośności dźwieku również pobierany jest z ustawień. Czyli mamy wygodny wrapper, który zajmuje się wszystkim co istotne.

Teraz kod wywołujący dźwięk jest bardzo prosty:

private void ChangeGameStateToLifeLost()
{
	SoundProvider.Play(SoundProvider.AstronautCrash);
	game.State = GameState.LifeLost;
}

Zachęcam do komentowania. Wszelkie uwagi, pytania, wasze rozwiązania czy znalezione u mnie błędy bardzo mile widziane 🙂

Advertisements

2 thoughts on “WP XNA 5: Wygodne zarządzanie dźwiękiem (SoundProvider)

  1. Pingback: WP XNA 0: Wstęp | Wojciech Poniatowski [PL]

  2. Pingback: dotnetomaniak.pl

Możliwość komentowania jest wyłączona.