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. Yazacağımız uygulama media player ile
yaptığımız bazı işlemleri C# ile nasıl yapabileceğimize dair örnek oluşturacak.
İlk olarak formu tasarlayalım:

Formda bir tab control ve Media Player component'i bulunuyor. Her tab
control'ün içinde yapacağımız farklı türde işlemlere ait kontroller bulunuyor.
İlk tab ile başlayalım. Bu tab'da bulunan Dosya Aç butonu ile tek bir dosyayı,
Klasör Aç ile bir klasör içinde bulunan tüm müzik dosyalarını, Playlist Aç
butonu ile de kayıtlı bir playlist'teki müzik dosyalarını açacağız:
|
private
void btnOpenFile_Click(object
sender, EventArgs e)
{
openFileDialog1.ShowDialog();
axWindowsMediaPlayer1.URL = openFileDialog1.FileName;
//veya;
//WMPLib.IWMPMedia media =
axWindowsMediaPlayer1.newMedia(openFileDialog1.FileName);
//axWindowsMediaPlayer1.currentPlaylist.appendItem(media);
//axWindowsMediaPlayer1.Ctlcontrols.play();
}
private void btnOpenFolder_Click(object
sender, EventArgs e)
{
folderBrowserDialog1.ShowDialog();
foreach (string
fileName in
Directory.GetFiles(folderBrowserDialog1.SelectedPath))
{
IWMPMedia media =
axWindowsMediaPlayer1.newMedia(fileName);
axWindowsMediaPlayer1.currentPlaylist.appendItem(media);
}
axWindowsMediaPlayer1.Ctlcontrols.play();
}
private
void btnOpenPlayList_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.currentPlaylist =
axWindowsMediaPlayer1.mediaCollection.getByName("isilPlayList");
for (int i = 0; i <
axWindowsMediaPlayer1.currentPlaylist.count; i++)
{
listBox1.Items.Add(axWindowsMediaPlayer1.currentPlaylist.get_Item(i).name);
}
}
|
Bir medya dosyası açmak için formdaki
axWindowsMediaPlayer1 nesnesinin URL property'sine dosyanın adını yazmak yeterli
olacaktır. Bir klasörde bulunan birden fazla dosyayı açmak için de IWMPMedia
değişkeni tanımlanıp, axWindowsMediaPlayer1 nesnesinin newMedia fonksiyonu
çağırılabilir. Ardından da playlist'e eklenip, play metodu çağırılarak dosyalar
açılabilir. Bu yöntemi btnOpenFile butonunun click event'indeki comment out'lu
kısımdaki gibi tek bir dosya açarken de kullanabilirsiniz. Kayıtlı bir
playlist'i açmak içinse axWindowsMediaPlayer1 nesnesinin currentPlaylist
property'sine yine aynı nesnenin mediaCollection property'sinin getByName
metodunu çağırabilirsiniz. Aynı şekilde playlist yerine getByAlbum metodunu
kullanarak albüm ismine göre, getByGenre metodu ile müzik türüne göre playlist
oluşturabilirsiniz. btnOpenPlaylist butonunun click event'indeki for döngüsünde
playlist içindeki şarkıların isimleri formdaki listbox'ın içine dolduruluyor.
Playlist'teki şarkıların isimlerini axWindowsMediaPlayer1 nesnesinin
currentPlaylist property'sinin get_Item fonksiyonuna şarkının indeksini
parametre geçirerek alabiliriz. Bu fonksiyon bize IWMPMedia nesnesi döndürür. Bu
nesnenin name property'si ise şarkının ismidir. Kodu çalıştırıp, bilgisayarımda
kayıtlı olan isilPlayList'i açalım:

Form üzerindeki ikinci tab'da temel medya dosyası çalma, durdurma, ileri alma
işlemlerini yapacağız:
|
private
void btnStop_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop();
}
private void btnPlay_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.play();
}
private void btnPrevious_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.previous();
}
private void btnNext_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.next();
}
private void btnFastForward_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.fastForward();
}
private void btnReverse_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.fastReverse();
}
|
Kodda da görüldüğü gibi çalma, durdurma, duraklatma, ileri-geri sarma,
önceki-sonraki şarkıya geçme gibi işlemler axWindowsMediaPlayer nesnesinin
Ctlcontrols property'sinin metodları ile yapılabilir:

Üçüncü tab'da dosya attribute'larını okuma ve readonly olmayanları değiştirme
işlemlerini yapalım. Formda çalan şarkının bilgilerini getirecek olan bir buton,
şarkının saniye cinsinden süresinin, dakika:saniye formatında süresinin ve dosya
yolu bilgilerinin gösterildiği bir label ve tüm attribute'larının listelendiği
bir listview kontrolü olsun. En altta ise seçtiğimiz bir attribute'ın yeni
değerini girmemizi ve ayarlamamızı sağlayacak olan bir textbox ve buton olsun:

Media Bilgilerini Al butonunun kodu aşağıdaki gibidir:
|
private void
btnGetMediaInfo_Click(object sender,
EventArgs e)
{
IWMPMedia media = axWindowsMediaPlayer1.currentMedia;
lblMediaInfo.Text = "Süre (Saniye):
" + media.duration.ToString() + "\r\nSüre: "
+ media.durationString + "\r\nDosya Yolu: " +
media.sourceURL;
for (int i = 0; i <
media.attributeCount; i++)
{
ListViewItem lvi =
new ListViewItem();
ListViewItem.ListViewSubItem
lvi2 = new
ListViewItem.ListViewSubItem();
ListViewItem.ListViewSubItem
lvi3 = new
ListViewItem.ListViewSubItem();
lvi.Text = media.getAttributeName(i);
listView1.Items.Add(lvi);
lvi2.Text =
media.getItemInfo(lvi.Text);
lvi3.Text =
media.isReadOnlyItem(lvi.Text).ToString();
lvi.SubItems.Add(lvi2);
lvi.SubItems.Add(lvi3);
}
}
|
Kodda media adında bir IWMPMedia nesnesi tanımladıktan sonra lblMediaInfo
label'ının text'ine duration, durationString ve sourceURL property'lerinde
taşınan değerleri yazdırıyoruz. Ardından da media nesnesinin attribute'larını
for döngüsü içinde listview'a ekliyoruz. Listview'ın Text property'sine
attribute adını (getAttributeName), ilk subitem'ının text'ine bu attribute'ın
değerini (getItemInfo), son subitem'ın text'ine de bu attribute'ın readonly olup
olmadığı bilgisini yazdırıyoruz (isReadOnlyItem). Sırada Set butonunun kodu var:
|
private
void btnSet_Click(object
sender, EventArgs e)
{
IWMPMedia media = axWindowsMediaPlayer1.currentMedia;
if
(!media.isReadOnlyItem(listView1.SelectedItems[0].Text))
{
media.setItemInfo(listView1.SelectedItems[0].Text, txtAttributeValue.Text);
listView1.SelectedItems[0].SubItems[1].Text =
media.getItemInfo(listView1.SelectedItems[0].Text);
}
}
|
Set butonunda ise listview'da seçili item eğer readonly değilse,
txtAttributeValue textbox'ında yazılı değeri setItemInfo ile ilgili attribute'a
değer olarak atıyoruz. Ardından da listview'daki öğenin değerini yeniliyoruz.
Son tab'da ise media player'ı fullscreen gösterme, çalan şarkının kaçıncı
dakikasında olduğunu alma ve ses ayarlama işlemlerini yapacağız:

|
private
void btnFullScreen_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.fullScreen =
true;
}
private void btnPosition_Click(object
sender, EventArgs e)
{
MessageBox.Show(axWindowsMediaPlayer1.Ctlcontrols.currentPositionString);
}
private void btnVolume_Click(object
sender, EventArgs e)
{
axWindowsMediaPlayer1.settings.volume =
Convert.ToInt32(txtVolume.Text);
}
|
Görüldüğü gibi son tab'da da istediğimiz işlemleri
axWindowsMediaPlayer nesnesi ile çok basit bir şekilde gerçekleştirebiliyoruz.
Işıl Orhanel
http://www.isilorhanel.net
|