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