Post Page Advertisement [Top]

          Son gunlerde arkdaşlarım tarafından da sıkca yapılan bir  uygulama olan mp3 player yada media player uygulamasu suan oldukça moda .Bende c# ‘a giriş için bu basit uygulamadan başlamak istedim.Bu uygulamanın aslında çok daha gorsel açıdan iyi ve daha kolay halini yapmak da mumkun,bunun için VS da Com Componentsi kullanarak formunuzun istenilen yerine tek tıkla media player ekleyebilirsiniz,fakat işin özünün öğrenilmesi açısından ilk anlatacagım uygulamamnın daha faydalı olacagını düşünüyorum.
Bu uygulama winmm.dll API sini kullanarak media dosyaları uzerinde işlem yapmamızı sağlar.( winmm.dll is a module for the Windows Multimedia API, which contains low-level audio and joystick functions.) Windows Multimedia API. Bunun için bazı string komutlar oluşturup bu dll’den faydalanacagız.Ayrıca media ortamlarını pause etmek,vb. işlemler için  birde timer’e ihtiyacımız olacak.İlk olarak form tasarımından başalayalım.
Forma bir panel yerleştirelim,(siyah transparent kısım için) ve bck colrunu Active Caption Text yapalım.

Transparent bir gorunum elde etmek için formnun Properties kısmında Opacity değerini %100 den %85 ‘e düşürelim.Daha sonra bir text box,player listesi için bir list box ve dort tane buton ekleyelim,timeri de eklemeyi unutmayalım,forma istediğiniz gorunumu verebilirsiniz.






Şimdi kodlamaya geçerbilirz. Ekleyecegimiz extra bir kutuphane var o da
using System.Runtime.InteropServices;
 kutuphanesi bunu ekledikten sonra dll’yi import etmeye gelecek sıra bunun için aşagıdaki kodları kullanmalıyız.





string CommandString;
        [DllImport("winmm.dll")]
        private static extern long mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, int hwndCallback);
Bu sayede command string ler kullanabilecegiz,close mp3,open mp3 gibi.Kullanacagımız media ortamını açmak için OpenFileDialog bileşeninden yararlanacagız.Bir ortam dosyası açmak için.



private void btnbrowse_Click(object sender, EventArgs e)
        {
           
            ofd.Filter = "Mp3 files |*.wav;*.mp3;*.mpg;*.dat;*.avi;*.wmv";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                txtpath.Text = ofd.FileName;
                CommandString = "close Mp3File";
                mciSendString(CommandString, null, 0, 0);
                timer1.Enabled = false;
                CommandString = "open " + "\"" + ofd.FileName + "\"" + " type MPEGVideo alias Mp3File";
                mciSendString(CommandString, null, 0, 0);



Ofd.Filter media dosyasının hangi turden olabilecegeni karar verir,biz burada goruldüğü üzere  *.wav;*.mp3;*.mpg;*.dat;*.avi;*.wmv" uzantılı media içeriklerini seçtik.Txtpath ise textboxumuzda mediyanın pathını gosteren kısımdır.Ayrıca her CommandString den sonra bir mciSendString gonderilir. Burada timerin ilk başta enable=false edilmesinin sebebi herhangi bir media içeriği çaldıgında diğer bir ortamın açılmasına izin vermek için ilk olarak o an da çalan içeriği durdurmak amaçlıdır. Open ve dosyanın adı commandstring ile istenilen içerik açılır.browse butonuna ait aşagıdaki kod parçası ise çalma listesi içindir.


files[counter] = ofd.SafeFileNames[0]; // Save only the names
                paths[counter] = ofd.FileNames[0]; // Save the full paths
                listBox1.Items.Add(files[counter]); // Add songs to the listbox
                    counter++;

Çok basit bir yolla çalma listesi ekleyebilirz,ben bunu için parçaların ismini ve pathını bir dizide tutum ve list boxa ismlerini yazdırdım ,Mouse ile uzerine tıklanınca ise çalmasını sağladım, bu konuya geçmeden once playden bahsetmek daha doğru olacak.Playın ana işlevi aşagıdaki gibidir.

CommandString = "play Mp3File";
                mciSendString(CommandString, null, 0, 0);

                timer1.Enabled = true;
Eğer ofd.filename =””; yani henüz hiçbir içerik açılmamış ve kullanıcı playe basmış ise kullnıcıya ortam açma hizmeti için browse ile aynı mantıkta birkod yazabiliriz.

if (ofd.FileName == "")
            {
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    ofd.Filter = "MP3 Files|*.wav;*.mp3;*.mpg;*.dat;*.avi;*.wmv";
                    CommandString = "open " + "\"" + ofd.FileName + "\"" + " type MPEGVideo alias Mp3File";
                    mciSendString(CommandString, null, 0, 0);
                    txtpath.Text = ofd.FileName;
                    files[counter] = ofd.SafeFileNames[0]; // Save only the names
                    paths[counter] = ofd.FileNames[0]; // Save the full paths
                    listBox1.Items.Add(files[counter]); // Add songs to the listbox
                    counter++;
                    CommandString = "play Mp3File";
                    mciSendString(CommandString, null, 0, 0);
                    timer1.Enabled = true;
                   
                }
            } 

Buton stop ve buton pause de oldukça basit uygulamalar ve projenin download linkinde bulabilirsiniz.
Diğer önemli bir husus olan timer ve list box da media lara tıklanınca ne olacagı ise aşagıdaki şekildedir.
Yukarda bahsettiğim kodlar form uzerinde oluşturduğumuz butonlara basılarak açılan metodlar iken,bu metodu açmak için listboxa çift tıklıyoruz.

txtpath.Text = ofd.FileName;
            CommandString = "close Mp3File";
            mciSendString(CommandString, null, 0, 0);
            timer1.Enabled = false;

            txtpath.Text = paths[(listBox1.SelectedIndex)];
            CommandString = "open " + "\"" + paths[listBox1.SelectedIndex].ToString() + "\"" + " type MPEGVideo alias Mp3File";
            mciSendString(CommandString, null, 0, 0);

Browsedeki mantıkla yine o anda çalan parça varsa kapatıp yeni ortamı açıyoruz burada ortam pathını ise artık ofd.filenamden değilde,parçaların pathlarını tutan listeden alıyoruz. paths[listBox1.SelectedIndex].

CommandString = "Status Mp3File position";
            mciSendString(CommandString, buffer, 128, 0);
            second = int.Parse(buffer.ToString());
            second = second / 1000;
            minutes = second / 60;
            second = second % 60;
            lbltime.Text = minutes.ToString("00") + ":" + second.ToString("00");
Timer metodunda ise daha onceden tanımladığımız  StringBuilder buffer = new StringBuilder(128);
Değişkeni ile media içeriginin o andaki pozisyonunu buluruz,bu sayede media içeriğine kaldığımız yerden devam edebiliriz.128 ise sistemin 32 bitlik işaretli sayılar ile çalışmasından gelir.Bu şekilde uygulamamızı bitirmiş oluyoruz bu uygulamayı  http://www.c-sharpcorner.com sitesinden alarak geliştirdim bu uygulama aslında daha basitti,bir listbox ekleyerek çalma listsi oluşturdum,sadece mp3 çalrdı,değişik uzntılarıda desteklemesini sağladım ve stop butonu ekledim.Gönlüm visualizer de eklemek isterdi ileriki  bir zamnda belki ekerlim.Visualizer aslında hepimizin vazgeçilmezlerinden olan fakat ismine pek aşina olmadığımız bir yapı.

 Visualizer için foruer transformu ve daha birçok işlem gerekli.fakat bir media playerde boyle gorsel oğeler olmazsa olmaz bence ornegin yaptığımız ugulamada gozunuz boyle bir yapı arayacaktır.gelelim Com bileşnleri ile tek tıkla media player oluşturmaya bunu için Visual Studio da Tools->Choose ToolBox İtem secenegine tıklayarak COM Components sekmesine geliyoruz.
 Media Player secenegine tik atıp okey dedikten sonta toolbox  menumuzde artık media player
 bileşenlerini görebiliriz.






Bu bileşeni forma tutup tıkladığımızda bir visualizerinde çıktığını görüyoruz.



Projenin tam halini buradan  indirebilir geliştirebilirsiniz,iyi çalışmalar.

Hiç yorum yok:

Yorum Gönder

Bottom Ad [Post Page]