MEDİA PLAYER YAPMA C# KODU

Media Player Gün içinde müzik dinlemek, film veya video izlemek için veya kod yazarken dış etkenlerden etkilenmemek için en çok kullandığımız medya çalıcısı. Peki ya media player'ın özelliklerini uygulamamıza eklemek istersek ne yapmalıyız? Özellikle addin'ler yazarak media player'ı sıklıkla kullandığımız Microsoft uygulamalarının içinden yönetebiliriz.  Bu yazımda bu işlem için kullanacağımız COM bileşeninin metodları, eventları ve property'lerinin neler olduğuna ve nasıl kullanıldığına değinmeye çalışacağım.


Yazacağımız örnek uygulamamızda Media Player component'ini kullanabilmek için ilk olarak toolbox'a ekleyelim.Toolbox'a sağ tıkladığımızda açılan Choose Toolbox Items ekranındaki COM Components sekmesinde yer alan öğelerden Windows Media Player'ı seçiyoruz:


Toolbox'a Media Player component'i eklendiğinde sürükleyip forma bırakarak kullanmaya başlayabiliriz. Forma eklediğimiz kontrol bir axWindowsMediaPlayer nesnesi olacaktır. axWindowsMediaPlayer nesnesi, uygulamalarımızda Media Player kullanabilmemiz için bize property, metod ve event'leri sunan temel nesnedir. 


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using WMPLib;
namespace MediaPlayerProje
{
   
public partial class Form1 : Form
    {
       
public Form1()
        {
            InitializeComponent();
        }
       
//ilk olarak projemize aşağıdaki namespace i ekliyoruz.
        //using WMPLib;
        //Daha sonra ToolBox da sağ tıklayıp Choose Items diyoruz.Ekrana gelen pencereden şarkı ve video oynatmamızı sağlayan Media Player componentini ekleyeceğiz.Bunun için gelen pencereden COM Components sekmesine tıklıyoruz  ve listeden Windows Media Player'ı işaretleyip OK diyoruz.ToolBox'ımıza media player nesnesi geldikten sonra formumuza sürükleyip bırakıyoruz.
        //ToolBox'dan Dialogs bölümünden de bir tane OpenFileDialog sürükleyip bırakıyoruz formumuza
        private void btnMediaListeAc_Click(object sender, EventArgs e)
        {
            //Şarkı Seç butonuna basınca eklediğimiz OpenFileDialog nesnesinin showDialog() metoduyla açıyoruz.
            openFileDialog1.ShowDialog();
            //OpenFile'dan seçtiğimiz müzik dosyasını  openfileDialog'un  FileName metoduyla dosya yolunu alıyoruz ve formumuza eklediğimiz  Windows Media Player componentini kullanıyoruz. eklenen componentin adı axWindowsMediaPlayer1 oldugundan bunun metoduna  propertsine openFile'dan gelen dosya yolunu atıyoruz ve şarkımız çalmaya başlıyor !
            axWindowsMediaPlayer1.URL = openFileDialog1.FileName;
            //Aşagıda void ParcaBilgisiGetir() olarak tanımladığımız metodu burada click olayında çagırıyoruz.Yani openFileDialog'dan seçtiğimiz parçayı url olarak media player nesnesine atıyoruz ve bu metotla o anda player'da çalan parçanın media bilgilerine ulaşıyoruz.
            ParcaBilgisiGetir();
        }
        private void btnPlay_Click(object sender, EventArgs e)
        {
           
//playerımıza play özelliği eklemekte oldukça basit.eklenen componentin Ctlcontrols propertsinin play metodu bize URL olarak verdiğimiz parçayı oynatmasını saglıyor.
            axWindowsMediaPlayer1.Ctlcontrols.play();
        }

       
//Birtane Label ekleyelim. Ve bundan son parçanın bilgilerini label'ye yazdırmak için bir metot yazıyoruz ve bu metodu daha sonra Liste Aç butonunun click olayından çagıracagız.Metot olmadanda direk bu kodu yazabilirdik ama biraz daha esneklik katalım her ne kadar ufakcık bir projede olsa.Hemde el alışkanlıgı olur herşeyi biryere yazmamak konusunda :) . Metodumuzun adı ParcaBilgisiGetir olacak.
        void ParcaBilgisiGetir()
        {
          
//Çalan parçanın media bilgilerini bir labela yazdırmak için ise (ileride ayrıntılı olarak ele alacagımız şimdilik adını duymamız yetecektir) IWMPMedia interface inden bir nesne yaratıp bu nesnenin o sırada çalan media'nın bilgilerine ulaşmamızı saglar.
            //media adında nesnemiz hazır.
            IWMPMedia media = axWindowsMediaPlayer1.currentMedia;
            label2.Text = "Parça adı : " + media.name;
            //Sadece parça adını getirmek değil bu media nesnesini amacı.
            // media.durationString  = parça uzunlugunu getirir
            //media.sourceURL = çalan parçanın dosya yolunu bulur getirir.Diğer property ve metotlarıda inceleyebilirsiniz
        }
        private void btnStop_Click(object sender, EventArgs e)
        {
           
//mediaplayer nesnemizda çalan parçayı stop metoduyla durduruyoruz.
            axWindowsMediaPlayer1.Ctlcontrols.stop();
        }
        //------------Video Oynatma---------------//
        //Video oynatmak için anaformumuzdan video aç butonuna basıp açılan formdan filmi seçicez ve tam ekran olarak video oynatacagız.Görevimiz bu şimdilik.Bunun için Uygulamamıza bir form eklememiz lazım.Bunun için Solution Explorer'dan(eger ekranda yoksa View menüsünden Solution Explorer seçin) uygulamamızın üstüne sag tıklıyoruz (bendeki MediaPlayerProje) Add/Windows Form diyoruz.Açılan pencereden Name özelliğinden eklenecek olan formun adını giriyoruz.(ben frmVideoOynatma.cs olarak ayarladım) ve ok diyoruz.Artık yeni formumuz Solution Explorer'da gözükecektir.Üzerine çift tıklarsan tasarım açamasına geçeriz.
        // daha sonra ana formumuzda bulunan video aç butonuna ekleyeceğimiz formun nesnesini yaratığ show metodunu kullanuyoruz.
        private void btnVideoFormAc_Click(object sender, EventArgs e)
        {
           
//C#'da herşey birer nesne oldugu için formumuzunda nesnesini yaratıyoruz ve hafızada oluşturmuş oluyoruz.
            frmVideoOynatma formVideo = new frmVideoOynatma();
            formVideo.Show();
           
//daha sonra oluşturudugumuz formVideo nesnemizin Show metoduyla yeni formumuzu ekranda göstermiş oluyoruz.
        }
        //Bundan sonraki işlemlerimiz frmVideoOynatma formunda olacagından açıklama satırları ve kodlarımız aşağıdaki bölümdedir.
    }
}
 
--------Form1  Bitiş----------
 ~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~ 
--------frmVideoOynatma Başlangıç---------- 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MediaPlayerProje
{
   
public partial class frmVideoOynatma : Form
    {
       
public frmVideoOynatma()
        {
            InitializeComponent();
        }
       
//ilkönce ToolBox'dan Dialog bölümünden film seçmek için kullanacagımız bir openFileDialog ekleyelim formumuza.
        //videomuzu tam ekran oynatmak için  Properties'den Formumuzun Text özelliğini siliyoruz.ControlBox özelliğini False Yapıyoruz.WindowState özelliğinide Maximized yapıyoruz ki form açıldığında tam ekran açılsın.
        //Daha sonra Formumuza bir mediaPlayer componenti ekliyoruz ve üzerine sağ tıklayıp Properties'den Sıgdırmak için genişleti checkbox'ını işaretliyoruz.Mod Seçin bölümünden de None yapıyoruz.Sonra Properties penceresinden Dock özelliğini Fill yapıyoruz ki formu kaplasın.
        //Bu işlemden sonra formumuza ToolBox'dan Containers bölümünden bir tane flowLayoutPanel seçip formun üstüne bırakıyoruz.Bununda sağ tarafda properties den Dock özelligini bottom yapıyoruz.Açıldıgında formun altına dayalı gelecek.
        //Eklemiş oldugumuz flowLayoutPanel'in üstüne 4 tane buton ekliyoruz.Bunların amacı Film Aç,Play,Stop ve video formunu kapatan Kapat isimli butonlar.
        //Formumuza bir tane Timer ekliyoruz ToolBox'un Component bölümünden.Timer nesnesini seçip Properties bölümünden Interval degerini 3000 yapıyoruz .Görsellik katıcaz birazdan :) 3 saniye geçtiğinde flowLayoutPanel yok olacak doğal olarak butonlarımızda içinde oldugundan kaybolacak.Bunlar kayboldugunda başka buton çıkacak ve kibar bir şekilde aşagıda duracak tekrar tıklanıldıgında play , stop vs'in bulundugu bölüm geri gelece.
        //Bu görsellik için bir buton ekliyoruz ve Sag tarafdan Properties Bölümünden Dock özelliğini Bottom yapıyruz böylece flowlayoutPanel'in hemen üstüne yapışmış bir hal alıyor.Buton'un Text özelliğini <> yapmayıda unutmayalım.
        //Şimdi ilk olarak form'dan alt tarafta bulunan timer1 nesnesine çift tıklayalım ve codlarımızı yavaş yavaş yazalım.
        //ilkönce bir metot yazalım ve bu yok olma işlemi gerektiği yerlerde sadece metodun ismiyle çagıralım kod kalabalıgı olmasın.Bu metodu çagırdımız zaman timer çalışmaya başlayacak ve 3 saniye doldugunda timer1_tick olayındaki işlem gerçekleşecek.Yani Timer1'e istediginiz yerde Start() dedikten sonra timer1_Tick'de belirttiginiz işlemler gerçekleşecektir.
        void FlowPanelGizle()
        {
            timer1.Start();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
           
//Timer1'in interval degerini properties'den 3000 olarak vermiştik..Milisaniye cinsinden deger aldıgından 3 saniye üzerinden işlem yapar.10000 deseydik 10 saniye olurdu.Şimdi o verdigimi deger yani 3 saniye doldugnda alta bulunan flowlayout paneli yok edelim.
            flowLayoutPanel1.Visible = false;
        }
        //butondan filmimizi seçiyoruz ve yok olma işlemi için metodu çagırıyoruz.Şarkı çalmayla aynı görevimiz bir nevi...
        private void btnVFilmAc_Click(object sender, EventArgs e)
        {
           
//openfile'den seçtigimiz dosyayı yine URL olarak mediaplayer'a atıyoruz.
            openFileDialog1.ShowDialog();
            axWindowsMediaPlayer1.URL = openFileDialog1.FileName;
            //ve film seçildikten 3 saniye sonra menü kaybolması için yukarıda oluşturdugumuz metodun ismini çagırıyoruz.
            FlowPanelGizle();
           
//ve filmimiz oynamaya başlıyor :)
        }
        private void btnVPlay_Click(object sender, EventArgs e)
        {
           
//şarkı çalarkenki aynı özellikleri kullanıcazgız play ve stop işlemleri için.
            axWindowsMediaPlayer1.Ctlcontrols.play();
            //play'e basınca zaman metodumuzu tekrar çagırıyorz.
            FlowPanelGizle();
        }
        private void btnVStop_Click(object sender, EventArgs e)
        {
           
//buda o anda oynayan filmi durdurmamızı saglıyor.
            axWindowsMediaPlayer1.Ctlcontrols.stop();
            //stop'a basınca zaman metodumuzu tekrar çagırıyorz.
            FlowPanelGizle();
        }
        private void btnVCikis_Click(object sender, EventArgs e)
        {
           
//ve açık olan video formumuzu kapatıyoruz.
            this.Close();
        }
        private void button1_Click(object sender, EventArgs e)
        {
           
//daha sonra o kaybolan menümüzün gelmesi için tekrar flowlayout'un visible özelligini true yapıyoruz.
            flowLayoutPanel1.Visible = true;
        }
    }

1 yorum:

  1. Müzik listesine çift tıklayınca şarkının çalmasını nasıl yapabilirim
    private void lstMuzik_MouseDoubleClick(object sender, MouseEventArgs e)
    {
    int index = this.lstMuzik.IndexFromPoint(e.Location);
    if (index != System.Windows.Forms.ListBox.NoMatches)
    {
    axWindowsMediaPlayer1.Show(lstMuzik.SelectedItem.ToString());
    }
    }

    YanıtlaSil