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;
}
}
}