Bugünkü makalemizde C# dilini kullanarak uygulalarımızda ses dosyalarını nasıl çalabileceğimizi anlatacağız. .NET Framework kütüphanesi içinde uygulamalarınız içerisinde ses dosyalarını kullanabileceğiniz sınıflar mevcuttur. Bu sınıflar "System.Media" namespace i içersinde yer almaktadır. System.Media namespace'i üç sınıftan meydana gelir. Bunlar "SoundPlayer, SystemSound ve SystemSounds" sınıflarıdır.
SoundPlayer : *.wav dosyalarını çalmak için kullanılır.
SystemSound : Windows işletim sistemine ait temel ses dosyalarını temsil eder ve çalıştırır.
SystemSounds : SystemSound sınıfı için referans niteliğinde olup sistem olayları için atanan ses dosyalarını temsil eder ve çalıştırır.
System.Media namespace ve sınıfları kullanılarak sadece *.wav dosyaları çalıştırılabilir. Diğer dosya türlerini çalıştırabilmek için uygulamaya Windows Media Player Control'un eklenmesi gereklidir. Bu makalede *.wav dosyalarının nasıl çalıştırabileceğini anlatacağım diğer dosya türleri için ayrıca anlatacağım.
Uygulamalarınızda ses dosyalarını 2 şekilde kullabilirsiniz.
1.Yol : Ses dosyasının yolunu program içerisinde kullanarak
2.Yol : Resource dosyalarından faydalanarak.
1.Yol uygulamaların boyutu ve esnekliği açısından daha verimli olabilir ama dosya adresi değiştiğinde doğal olarak çalışmayacaktır. Bununla birlikte 2.Yol ses dosyaları uygulama içine entegre edildiğinden dosyanın belirtilen yolda olmaması gibi bir durum söz konusu değildir fakat uygulama dosyasının boyutunu büyütür. Bununla birlikte eğer kullanıcılarınıza birtakım işlemler için ses dosyası seçmesini istiyorsanız fakat bu seçilen dosyaya erişilemiyorsa varsayılan olarak başka bir ses dosyasının çalışmasını istiyorsanız 2.Yolu kullanabilirsiniz.
Dilerseniz basit bir uygulama hazırlayalım. bu uygulamada kullanıcıdan bir ses dosyası seçmesini istiyoruz. Eğer belirtilen dosya mevcutsa ve erişilebiliyorsa (Klasör izinleri buna engel olabilir.) kullanıcının seçtiği dosya aksi taktirde bizim belirlediğimiz bir ses dosyası çalsın. Öncelikle uygulamada kullanacağımız bileşenleri formumuza ekleylim. Bunun için forma
Bileşen Adı
1 TextBox ==> txtDosya
3 Button ==> btnOynat, btnDurdur, btnGozat
1 OpenFileDialog ==> dlgDosyaAc
1 Label ==> lblBaslik
ekleyin ve isimleri gördüğünüz gibi değiştirin. Şimdi bu bileşenlerin ayarlarını yapalım. Bunu bir fonksiyon olarak yazalım. Dilerseniz bunları tasarım ekranında da yapabilirsiniz yaptığım ayarları daha iyi görebilmeniz açısından bu yolu seçtim. BileşenAyarlar() adıyla bir fonksiyon oluşturuyorum ve içerisine şu kodları ekliyorum.
private void BilesenAyarlar()
{
//Form Ayarları
this.CancelButton = btnDurdur;
this.Size = new System.Drawing.Size(370, 110);
this.Text = "Wav Dosyaları";
//lblBaslik bileşen ayarları
lblBaslik.Text = "Çalınacak wav dosyasının yolu :";
lblBaslik.Location = new System.Drawing.Point(9, 9);
//txtDosya bileşen ayarları
txtDosya.Text = "";
txtDosya.Location = new System.Drawing.Point(12, 26);
txtDosya.Size = new System.Drawing.Size(285,20);
//btnGozat bileşen ayarları
btnGozat.Text = "Gözat";
btnGozat.Location = new System.Drawing.Point(298, 24);
btnGozat.Size = new System.Drawing.Size(59, 23);
//btnOynat bileşen ayarları
btnOynat.Text = "Oynat";
btnOynat.Enabled = false;
btnOynat.Location = new System.Drawing.Point(179, 52);
btnOynat.Size = new System.Drawing.Size(59, 23);
//btnDurdur bileşen ayarları
btnDurdur.Text = "Durdur";
btnDurdur.Location = new System.Drawing.Point(238, 52);
btnDurdur.Size = new System.Drawing.Size(59, 23);
//dlgDosyaAc bileşen ayarları
dlgDosyaAc.CheckFileExists = false;
dlgDosyaAc.CheckPathExists = false;
dlgDosyaAc.FileName = "";
dlgDosyaAc.Filter = "Ses Dosyaları(*.wav)|*.wav|Tüm Dosyalar|*.*";
dlgDosyaAc.Title = "Dosya Aç";
}
daha sonra bu fonksiyonu uygulamanın yapıcı fonksiyonunun içinde InitializeComponent() satırından hemen sonra yazıyoruz. Yapıcı fonkiyon şu halde olmalı.
public Form1()
{
InitializeComponent();
BilesenAyarlar();
}
Uygulamayı derleyip çalıştırdığınızda görünüm şu şekilde olacaktır.
Görünüm olarak sorun olmadığına göre uygulamayı kapatıp Visual Studio IDE ekranına dönebiliriz.
Burada Solution Explorer projemize üzerinde farenin sağ tuşuna basıp Properties menüsünü seçiyoruz. Açılan pencerede "Resources" tabına geçiyoruz üst kısımdaki menülerde en soldaki menünün sağındaki ok işaretine basıp "Audio" seçeneğini seçiyoruz ve "AddResource" butonuna basarak uygulamada kullanılacak bir wav dosyası seçiyoruz. Ben burda "Windows\Media" klasöründen "Windows_Critical_Stop.wav" dosyasını seçiyorum. Bu dosya kullanıcının belirttiği yolda ses dosyası bulunmazsa oynatılacak. Dosyamızı seçtikten sonra kaydedip bu pencereyi kapatabiliriz.
Şimdi uygulamamızın çalışması esnasında kullanılacak nesnelerimizi tanımlıyoruz. İhtiyacımız olanlar kullanıcının seçeceği dosyanın yolunu tutacak string bir değişken, Belirtilen yolun geçerliliğini kontrol edecek FileInfo türünden bir değişken (Dosya işlemleri için ayrıca bir makale hazırlayacağım), ses dosyalarını çalacak SoundPlayer türünden bir değişken. Değişkenlerimizi class seviyesinde tanımlıyoruz.
SoundPlayer ses = new SoundPlayer();
string dosyayolu="";
FileInfo dosya;
Kullanıcının "Gözat" butonuna bastığında Dosya Aç diyalog penceresinin görünmesini sağlıyoruz. btnGozat nesnesinin "Click" olayını şu şekilde düzenliyoruz. OpenFileDialog nesnesi ile ilgili makale daha önce
http://olcayguzel.blogspot.com/2011/05/openfiledialog-savefiledialog-kullanm.html adresinde yayınlanmıştı.
private void btnGozat_Click(object sender, EventArgs e)
{
if (dlgDosyaAc.ShowDialog() == DialogResult.OK)
{
txtDosya.Text = dlgDosyaAc.FileName;
}
}
BileşenAyarlar() fonksiyonunu incelediğinizde btnOynat nesnesinin Enabled özelliğini false olarak ayarlamıştık. Şimdi kullanıcı bir dosya seçtiğine daha doğrusu txtDosya nesnesinin içeriği artık boş olmadığına göre bu butonu aktifleştirebiliriz. Bu işlemi yapmak için txtDosya nesnesinin "TextChanged" olayını şu şekilde düzenliyoruz.
private void txtDosya_TextChanged(object sender, EventArgs e)
{
btnOynat.Enabled = txtDosya.Text.Trim().Length > 0 ? true : false;
}
Trim() fonksiyonunu kullanmamızın sebebi txtDosya nesnesinin içeriğinde geçerli bir karakter olmasını sağlamaktır. Burada txtDosya nesnesinin Text özelliğindeki değer yani textbox nesnesinin üzerindeki metnin baş ve son kısmındaki boşluk karakterleri atılıyor ve karakter sayısının sıfırdan büyük olup olmadığı kontrol ediliyor. Eğer sıfırdan büyükse btnOynat nesnesinin Enabled özelliğine true değilse false değeri atanıyor. Artık kullanıcı bize çalınacak bir dosya adı verdiğine göre ses dosyasını çalma işine dönebiliriz. Kullanıcı seçtiği dosyayı oynatmak için "Oynat" butonuna bastığında çalma işlemi için hazırlıklar başlayacak. Öncelikle belirtilen dosyanın gerçekten var olup olmadığını kontrol etmeliyiz. Bunun için FileInfo sınıfının Exists() fonksiyonundan faydalanıyoruz. btnOynat bileşeninin "Click" olayını şu şekilde düzenliyoruz.
private void btnOynat_Click(object sender, EventArgs e)
{
dosyayolu = txtDosya.Text;
dosya = new FileInfo(dosyayolu);
if (dosya.Exists)
{
ses = new SoundPlayer();
ses.SoundLocation = dosya.FullName;
ses.PlayLooping();
}
else
{
ses = new SoundPlayer();
ses.Stream = Properties.Resources.Windows_Critical_Stop;
ses.Play();
}
}
Burada kısım kısım açıklayalım
1- txtDosya bileşeninin değerini dosyayolu değişkenine aktardık
2- dosyayolu değişkenini kullanarak belirtilen adres ve isimdeki dosyayla işlem yapabilmek için dosya nesnesini oluşturduk.
3- if komutu ve FileInfo sınıfının Exists() fonksiyonunu kullanarak belirtilen dosyanın gerçekten varolup olmadığını kontrol ettik.
Eğer dosya gerçekten varsa if komutundan sonraki satırlar çalışacak aksi halde else kısmı çalışacak yani bizim varsayılan olarak çalmayı planladığımız dosya çalışacak. Peki ya kullanıcının belirttiği dosya gerçekten var ama ses dosyası değilse örneğin bir *.pdf dosyası seçmişse bunu nasıl kontrol edeceğiz. Bunu yapmak için if komutumuzu biraz değiştirmemiz yeterli olacaktır yeni koşulumuz şu şekilde.
if (dosya.Exists && dosya.Extension==".wav") Uygulamamızı çalıştırdığınızda seçilen dosya eğer *.wav dosyası ise sürekli çaldığını göreceksiniz. Eğer dosyanın bir kere çaldıktan sonra durmasını tekrar Oynat butonuna basana kadar çalmasını istemiyorsanız "ses.PlayLooping();" satırlarını "ses.Play()" şeklinde değiştirmeniz yeterli olacaktır. Burada "Durdur" butonunun çalışmasını göstermek amacıyla "PlayLooping()" fonksiyonunu kullandım.
Şimdi sıra geldi "btnDurdur" butonuna basıldığında çalan ses dosyasının durdurmaya. Bunun için btnDurdur bileşeninin "Click" olayını şu şekilde düzenliyoruz.
private void btnDurdur_Click(object sender, EventArgs e)
{
ses.Stop();
}
Uygulamamızı derleyip çalıştırıyoruz ve gördüğünüz gibi sorunsuz bir şekilde çalışıyor.



Hiç yorum yok:
Yorum Gönder