- Come inserire la musica in un videogioco creato con XNA -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario cognizioni basiche di C# e sul framework XNA
Le classi Song e MediaPlayer di XNA

RIPRODURRE MUSICA IN XNA
L'oggetto MediaPlayer per riprodurre MP3, WAV e WMA.

In questo tutorial ci occuperemo di una parte fondamentale di un videogioco che si rispetti: la musica. Grazie alla versione 3.0 del framework XNA gestire il suono risulta molto più semplice che in passato, principalmente per il supporto ad alcuni tra i formati audio compressi più diffusi, MP3 e WMA, mentre in precedenza era possibile utilizzare solamente file WAV (ovviamente ancora supportati). In questo tutorial ci baseremo sul progetto MuoviPallina.
Per prima cosa dobbiamo aggiungere il nostro file audio al progetto: nel Solution Explorer fare click destro su Content, Add, Existing Item..., quindi selezionare il file in questione. In questo modo durante la fase di build esso verrà convertito in formato XNB in modo da essere utilizzabile da parte di XNA. Ora dobbiamo caricarlo in memoria nel metodo Load della nostra classe Game:


namespace MuoviPallinaMusica
{
    public class PallinaGame : Microsoft.Xna.Framework.Game
    {
        // ...
        Song backgroundMusic;
        // ...


        protected override void LoadContent()
        {
            // ...
            backgroundMusic = this.Content.Load<Song>("eurodance");
            // ...
        }
        // ...
    }
}

Come si può vedere ci siamo serviti della classe Song che memorizza i dati della canzone insieme ad altre informazioni come artista, genere, titolo e così via.
Per avviare la riproduzione è sufficiente invece servirsi della classe MediaPlayer che, come suggerisce il nome, si occupa proprio di gestire la musica del videogioco, permettendo di riprodurla, sospenderla, riprenderla, passare alla traccia successiva e così via. All'inizio del gioco vogliamo che la musica venga riprodotta quindi effettuiamo un override di Game.BeginRun e invochiamo il metodo per MediaPlayer.Play:


protected override void BeginRun()
{
    // Avviamo la musica
    MediaPlayer.Play(backgroundMusic);

    base.BeginRun();
}

Nota: la classe MediaPlayer, sotto Windows, richiede che sia installato Windows Media Player, purtroppo.

In Update invece vogliamo inserire la possibilità di interrompere e far riprendere la musica premendo barra spaziatrice:


protected override void Update(GameTime gameTime)
{
    // ...

    if (Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.Space))
    { 
        // Alla pressione della barra spaziatrice invertiamo lo stato della musica
        if (MediaPlayer.State == MediaState.Paused)
            MediaPlayer.Resume();
        else
            MediaPlayer.Pause();
    }
    
    // ...
}

<< INDIETRO by VeNoM00