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;
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;
{
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();
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;
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();
}
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();
}
{
//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;
{
//Ç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
}
// 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();
}
{
//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.
}
//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;
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.
{
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();
}
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;
}
{
//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;
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 :)
}
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();
{
//ş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();
}
FlowPanelGizle();
}
private void btnVStop_Click(object sender, EventArgs e)
{
//buda o anda oynayan filmi durdurmamızı saglıyor.
axWindowsMediaPlayer1.Ctlcontrols.stop();
{
//buda o anda oynayan filmi durdurmamızı saglıyor.
axWindowsMediaPlayer1.Ctlcontrols.stop();
//stop'a basınca zaman metodumuzu tekrar çagırıyorz.
FlowPanelGizle();
}
FlowPanelGizle();
}
private void btnVCikis_Click(object sender, EventArgs e)
{
//ve açık olan video formumuzu kapatıyoruz.
this.Close();
}
{
//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;
}
}
}
{
//daha sonra o kaybolan menümüzün gelmesi için tekrar flowlayout'un visible özelligini true yapıyoruz.
flowLayoutPanel1.Visible = true;
}
}
}
Müzik listesine çift tıklayınca şarkının çalmasını nasıl yapabilirim
YanıtlaSilprivate 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());
}
}