Makale Özeti

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.

Makale

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

Örnek uygulamayı buradan indirebilirsiniz.