Skip to content
7 Februari 2011 / Jeffrey Hermanto Halimsetiawan

Memainkan Background Music pada Silverlight for Windows Phone


Suatu game tentu tidak lengkap rasanya apabila tidak dilengkapi dengan musik yang mendukung. Jika suatu game dikembangkan dengan Silverlight for Windows Phone, framework tersebut telah menyediakan kemudahan untuk memutar file musik berformat mp3 dan wma melalui kelas MediaElement. Sayangnya, MediaElement harus ditambahkan sebagai UIElement pada antarmuka sehingga musik akan diputar kembali dari awal kembali saat terjadi perpindahan PhoneApplicationPage ke PhoneApplicationPage lainnya. Selain itu, dua objek MediaElement pada antarmuka yang sama tidak dapat memainkan musik secara bersamaan sehingga background music dan sound effect dari game juga tidak dapat berjalan bersamaan. Oleh karena itu, beberapa kelas yang terdapat pada framework XNA  dalam Microsoft.Xna.Framework.dll dapat dimanfaatkan untuk memutar musik.

Kelas MediaPlayer dan Song dalam Microsoft.Xna.Framework.Media dapat dimanfaatkan untuk memutar musik berformat mp3 dengan cara sebagai berikut:

Song song = Song.FromUri(GameBgm, new Uri("Sounds/pdgbulan.mp3", UriKind.Relative)); 
MediaPlayer.IsRepeating = true; 
MediaPlayer.Play(song); 

Sedangkan kelas SoundEffect dalam Microsoft.Xna.Framework.Audio dapat dimanfaatkan untuk memainkan efek suara berformat wav dengan cara sebagai berikut:

SoundEffect se = SoundEffect.FromStream(TitleContainer.OpenStream("Sounds/click.wav")); 
se.Play(); 

Salah satu pendekatan sederhana yang dapat dilakukan untuk mengatur pemutaran background music dan sound effect adalah pembuatan suatu kelas singleton bernama SoundManager seperti di bawah ini:

/// <summary>
/// Author: Jeffrey Hermanto Halimsetiawan
/// </summary>
public class SoundManager
{
    #region Constant

    private const string NormalBgm = "gundhul";
    private const string GameBgm = "pdgbulan";

    #endregion

    #region Variable

    private bool _isMute;

    private static SoundManager _instance;

    private string _lastBgm = string.Empty;

    #endregion

    private SoundManager()
    {
        _isMute = false;
    }

    public bool IsMute 
    {
        get 
        {
            return _isMute;
        }
        set
        {
            _isMute = value;
            if (_isMute)
                MediaPlayer.Stop();
        }
    }

    public static SoundManager GetInstance()
    {
        if (_instance == null)
        {
            _instance = new SoundManager();
        }
        return _instance;
    }

    public void PlayBgm(PhoneApplicationPage page)
    {
        if (IsMute)
            return;

        Song song = null;
        if (page is GamePage)
        {
            song = Song.FromUri(GameBgm, new Uri("Sounds/pdgbulan.mp3", UriKind.Relative));
            if (_lastBgm != GameBgm)
            {
                PlaySong(song);
            }
            _lastBgm = GameBgm;
        }
        else
        {
            song = Song.FromUri(NormalBgm, new Uri("Sounds/gundhul.mp3", UriKind.Relative));
            if (_lastBgm != NormalBgm)
            {
                PlaySong(song);
            }
            _lastBgm = NormalBgm;
        }
            
    }

    private void PlaySong(Song song)
    {
        MediaPlayer.Stop();
        MediaPlayer.IsRepeating = true;
        MediaPlayer.Play(song);
    }

    /// <summary>
    /// Play WAVE File
    /// </summary>
    public void PlaySoundEffectClick()
    {
        if (IsMute)
            return;
        SoundEffect se = SoundEffect.FromStream(TitleContainer.OpenStream("Sounds/click.wav"));
        se.Play();
    }
}

Cara untuk menjalankan background music pada suatu PhoneApplicationPage adalah sebagai berikut:

 
SoundManager.GetInstance().PlayBgm(this);
 

Semoga Bermanfaat.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: