Makale Özeti

System.Media namespace'i altında yeralan SoundPlayer class'ını inceleyeceğiz.

Makale

    Merhabalar,

    System.Media namespace'i ses dosyalarını çalmamızı ve işletim sisteminde default olarak bulunan ses dosyalarına erişmemizi sağlar. System.Media namespace'i üç class'tan oluşur. Bunlardan birincisi SoundPlayer class'ıdır. SoundPlayer class'ı bize .wav dosyalarını çalmamıza olanak sağlayan class'tır. İkinci class olan SystemSound class'ı işletim sisteminde yüklü olan sesleri çalmamızı sağlar. Sonuncu class olan SystemSounds class'ı ise Windows'daki belli event'ler sonucu çalan seslere erişim sağlar.

    Bu makalemde .wav dosyalarını çalmamızı sağlayan SoundPlayer class'ı üzerinde duracağız. SoundPlayer class'ı System.Media namespace'i altında yeralır ve aşağıdaki öğelerden meydana gelmiştir:

    SoundPlayer class'ında bulunan bu öğelerin açıklamaları aşağıdaki gibidir:

Property'ler
IsLoadCompleted (bool) .wav dosyasının başarıyla yüklenip yüklenmediğinin tutulduğu property'dir.
LoadTimeout (int) .wav dosyasının yüklenmesi gereken sürenin milisaniye cinsinden tutulduğu property'dir. Default değeri 10000'dir (10 saniye).
SoundLocation (string) .wav dosyasının path'inin tutulduğu property'dir.
Stream (Stream) .wav dosyasının yükleneceği Stream'in tutulduğu property'dir.
Tag (object) System.Media.SoundPlayer hakkında verinin tutulduğu property'dir.

 

Method'lar
Load .wav dosyasını yükler.
LoadAsync .wav dosyasını bir stream'den veya web kaynağından yeni bir thread'de yükler.
Play .wav dosyasını çalar, eğer daha önceden yüklenmemişse önce dosyayı yükler.
PlayLooping .wav dosyasını sürekli olarak çalar, eğer daha önceden yüklenmişse önce dosyayı yükler.
PlaySync .wav dosyasını mevcut thread'de çalar, eğer daha önceden yüklenmemişse önce dosyayı yükler.
Stop .wav dosyasının çalınmasını durdurur.

 

Event'ler
LoadCompleted .wav dosyası başarılı veya başarısız bir şekilde yüklendiğinde tetiklenir.
SoundLocationChanged SoundPlayer nesnesinin SoundLocation property'sine yeni bir değer atandığında tetiklenir.
StreamChanged SoundPlayer nesnesinin Stream property'sine yeni bir değer atandığında tetiklenir.

    Yukarıda listelenmiş olan property, metod, event'ler yardımıyla uygulamalarımızda istediğimiz zamanlarda .wav dosyalarını çalabiliriz. Şimdi örnek bir uygulamada SoundPlayer nesnesinin bu öğelerini inceleyelim.

    Uygulamamız bir windows uygulaması olacak ve açılışta belirlemiş olduğumuz .wav dosyasını çalacak, formun üstündeki butonlar yardımıyla da yüklediğimiz .wav dosyasında Play, Stop, PlayLooping metodlarını çalıştıracağız. İlk olarak formumuzu aşağıdaki gibi tasarlayalım:

    İlk olarak kodumun using statement'ları arasına System.Media'yı ekleyelim:

using System.Media;

    Şimdi uygulamamız açıldığında bir .wav dosyasının çalınmasını sağlayalım.Bunun için uygulamamızın Settings dosyasına AcilisSesi adında string tipinde bir property ekliyoruz. Değerine ise projemizin debug klasörünün altında yeralan Wavs klasöründeki CHIMES.WAV dosyasını atıyoruz:

    Sırada formun load'ında Chimes.wav dosyasını çaldırmak var:
 

private void frmSoundPlayer_Load(object sender, EventArgs e)
{
    System.Media.SoundPlayer sp = new SoundPlayer();
    sp.SoundLocation = Settings.Default.AcilisSesi;
    sp.Play();
}

    Kodda SoundPlayer class'ının bir instance'ını aldık ve SoundLocation property'sine Settings dosyasındaki AcilisSesi property'sinin değerini atadık. Ardından da SoundPlayer nesnesinin Play metodu ile .wav dosyasını çaldırdık.

    Şimdi kullanıcının çalmak istediği .wav dosyasını açmak için kullanacağı .wav dosyası aç butonunun click event'ine aşağıdaki kodu yazalım:

private void btnOpenSound_Click(object sender, EventArgs e)
{
    lblWavName.Text = "";
    ofdSound.Filter = ".wav dosyaları|*.wav|Tüm Dosyalar|*.*";
    ofdSound.ShowDialog();
    lblWavName.Text = ofdSound.FileName;
}

    Butona tıkladığımız zaman formumuza eklediğimiz OpenFileDialog (ofdSound) ile .wav dosyasının adını formumuzdaki label'a (lblWavName) atıyoruz. Çal, Durdur ve Loop buton'larının click event'lerinde bu label'daki değeri okuyarak SoundPlayer'ın SoundLocation property'sine atayacağız.

    Dosyanın adını da aldıktan sonra Çal ve Loop buton'larının kodlarını yazabiliriz:
 

private void btnPlay_Click(object sender, EventArgs e)
{
    if
(lblWavName.Text != "" && lblWavName.Text.ToLower().IndexOf(".wav") > 0)
    {
        SoundPlayer
sp = new SoundPlayer();
        sp.SoundLocation = lblWavName.Text;
        sp.Play();
    }
}

private
void btnLoop_Click(object sender, EventArgs e)
{
    if (lblWavName.Text != "" && lblWavName.Text.ToLower().IndexOf(".wav") > 0)
    {
        SoundPlayer
sp = new SoundPlayer();
        sp.SoundLocation = lblWavName.Text;
        sp.PlayLooping();
    }
}

    Çal ve Loop butonlarının click event'lerinde SoundPlayer nesnesinin instance'ını aldıktan sonra SoundLocation property'sine lblWavName'de yazan değeri atadık. Ardından da çal butonu için Play, Loop butonu için de PlayLooping metodlarını çağırdık. Son olarak sıra Durdur butonunun click event'ini yazmaya geldi. Burada da SoundPlayer nesnesinin Stop metodunu çağırarak çalmakta olan .wav dosyasını durdurabiliriz:
 

private void btnStop_Click(object sender, EventArgs e)
{
    SoundPlayer
sp = new SoundPlayer();
    sp.Stop();           
}


    Görüldüğü gibi System.Media namespace'i altında yeralan SoundPlayer nesnesi ile uygulamalarımıza .wav dosyalarını çalma özelliğini eklemek son derece kolay. Geliştirdiğimiz uygulamalarımızda kullanıcı uygulamayı ilk çalıştırdığında, uygulamadan çıkarken, bazı işlemleri yaparken gibi durumlarda bazı .wav dosyalarını çalarak uygulamamıza ek özellikler katabiliriz.

Işıl ORHANEL