Click here to Skip to main content
15,896,111 members
Articles / Programming Languages / C#

Media Player With MCI

Rate me:
Please Sign up or sign in to vote.
4.23/5 (10 votes)
15 Feb 2011CPOL2 min read 40.8K   4.1K   17  
A media player with winmm.DLL (MCI). Includes radio, search playlist, nd line up playlist (optional) features.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;
using System.Net.Sockets;
using Microsoft.Win32;
using Microsoft.VisualBasic.Devices;
using System.Collections;

namespace Mp3Player
{
    class Player
    {
        //Global Variables And Importing winmm.DLL
        #region Global Değişken Ve DLL
        [DllImport("winmm.dll")]
        private static extern long mciSendString(string strKomut, StringBuilder strDonenDeger, int mediaUzunluk, IntPtr hwndCallback);
        Random sayi = new Random();
        public Form mp3 = new Form();
        string komut;
        bool selected;
        int saniye, dakika;
        StringBuilder donendeger = new StringBuilder();
        public string artist = null;
        public string album = null;
        public string year = null;
        public bool siraalindi = false;
        public ArrayList siralical = new ArrayList();
        public int sirasi=0;
        public int calsirasi = 0;
        public ToolStripMenuItem rastgelech = new ToolStripMenuItem();
        public ToolStripMenuItem snrakisarki = new ToolStripMenuItem();
        public ToolStripMenuItem srkitkrr = new ToolStripMenuItem();
        public ToolStripMenuItem lstetkrr = new ToolStripMenuItem();
        public ListView lst;
        public Timer tck = new Timer();
        public bool play;
        public int yer = 0;
        public OpenFileDialog op;
        public int sira;
        public int sonraki;
        public TrackBar trcsarkiyer2;
        public int onceki;
        public Label lblcalan;
        #endregion
        //Time Functions
        #region Zaman
        public string Saniye_Dakika(int milisaniye)
        {
            saniye = milisaniye / 1000;
            dakika = saniye / 60;
            return String.Format("{0}", (float)dakika) + ":" + String.Format("{0}", (float)(saniye % 60));
        }
        public string SarkiuzunlukYaz()
        {
            komut = "status Sarki length";
            mciSendString(komut, donendeger, donendeger.Capacity, IntPtr.Zero);
            return string.Format(Saniye_Dakika(Convert.ToInt32(donendeger.ToString())));
        }

        public int SarkiUzunlukMiliSaniye(int sira)
        {
            Open(lst.Items[sira].SubItems[1].Text);
            komut = "status Sarki length";
            mciSendString(komut, donendeger, donendeger.Capacity, IntPtr.Zero);
            return Convert.ToInt32(donendeger.ToString());
        }
        public int CalinanSaniye()
        {
            komut = "status Sarki position";
            mciSendString(komut, donendeger, donendeger.Capacity, IntPtr.Zero);
            return Convert.ToInt32(donendeger.ToString());
        }

        public bool Sonkontrol(int sira)
        {
            Open(lst.Items[sira].SubItems[1].Text);
            if (Saniye_Dakika(CalinanSaniye()) == SarkiuzunlukYaz() && sonraki != lst.Items.Count)
            {
                Stop();
                if (rastgelech.Checked == true)
                {
                    sonraki = Rastgele();
                }
                if (snrakisarki.Checked == true)
                {
                    Play(sonraki);
                    lblcalan.Text = lst.Items[sonraki].Text;
                    mp3.Text = lst.Items[sonraki].Text;
                    sonraki++;
                    onceki++;
                }
                if (srkitkrr.Checked == true)
                {
                    Play(sira);
                    lblcalan.Text = lst.Items[sira].Text;
                    mp3.Text = lst.Items[sira].Text;
                }
                return true;
            }
            else if (lstetkrr.Checked == true && sonraki == lst.Items.Count && Saniye_Dakika(CalinanSaniye()) == SarkiuzunlukYaz())
            {
                sonraki = 0;
                Stop();
                Play(sonraki);
                lblcalan.Text = lst.Items[sonraki].Text;
                mp3.Text = lst.Items[sonraki].Text;
                sonraki++;
                onceki++;
                return true;
            }
            else
            {
                return false;
            }
        }

        public string ToplamZaman()
        {
            int tplmsure = 0;
            for (int i = 0; i < lst.Items.Count; i++)
            {
                tplmsure = tplmsure + SarkiUzunlukMiliSaniye(i);
            }
            return string.Format(Saniye_Dakika(tplmsure));
        }

        public int KalanSaniye()
        {
            int calnn = CalinanSaniye();
            int tmmi = SarkiUzunlukMiliSaniye(sira);
            return tmmi - calnn;
        }
        #endregion
        //Buttons
        #region Butonlar
        public void Play(int sira)
        {
            Stop();
            Open(lst.Items[sira].SubItems[1].Text);
            trcsarkiyer2.Maximum = SarkiUzunlukMiliSaniye(sira);
            komut = "play Sarki";
            mciSendString(komut, null, 0, IntPtr.Zero);
            play = true;

        }

        public void PlayScroll()
        {
            komut = "play Sarki";
            mciSendString(komut, null, 0, IntPtr.Zero);
            play = true;
        }

        public void Cal()
        {
            if (sira < lst.Items.Count)
            {
                if (Caliyomu(sira))
                {
                    Stop();
                }
                for (int i = 0; i < lst.Items.Count; i++)
                {
                    if (lst.Items[i].Selected == true)
                    {
                        sira = i;
                        onceki = i - 1;
                        sonraki = i + 1;
                        lblcalan.Text = lst.Items[i].Text;
                        mp3.Text = lst.Items[i].Text;
                        selected = true;
                    }
                }
                if (selected == false)
                {
                    MessageBox.Show("Şarkı Seçmediniz.");
                }
                else
                {
                    Play(sira);
                }
                tck.Start();
            }
            else
                MessageBox.Show("LISTE BOS");
        }
        public void Stop()
        {
            komut = "close Sarki";
            mciSendString(komut, null, 0, IntPtr.Zero);
            play = false;
        }

        public void Pause()
        {
            komut = "pause Sarki";
            mciSendString(komut, null, 0, IntPtr.Zero);
            play = false;
        }

        public void Resume(int sira)
        {
            komut = "resume Sarki";
            mciSendString(komut, null, 0, IntPtr.Zero);
            play = true;
        }

        public void Open(string Yol)
        {
            komut = "open \"" + Yol + "\" type mpegvideo alias Sarki";
            mciSendString(komut, null, 0, IntPtr.Zero);
        }

        public void Onceki()
        {
            if (onceki > 0)
            {
                if (Caliyomu(sira))
                {
                   Stop();
                }
                if (rastgelech.Checked == true)
                {
                    onceki = Rastgele();
                }
                Play(onceki);
                lblcalan.Text = lst.Items[onceki].Text;
                mp3.Text = lst.Items[onceki].Text;
                onceki--;
                sonraki--;
                tck.Start();
            }
            else
            {
                MessageBox.Show("Zaten Liste Başındasınız.");
            }
        }

        public void Sonraki()
        {
            if (sonraki != lst.Items.Count)
            {
                if (Caliyomu(sira))
                {
                    Stop();
                }
                if (rastgelech.Checked == true)
                {
                    sonraki = Rastgele();
                }
            }
            else
            {
                if (lstetkrr.Checked == true)
                {
                    Stop();
                    sonraki = 0;
                }
                else
                {
                    MessageBox.Show("LISTE SONU");
                    goto son;
                }
            }
            lblcalan.Text = lst.Items[sonraki].Text;
            mp3.Text = lst.Items[sonraki].Text;
            Play(sonraki);
            sonraki++;
            onceki++;
            tck.Start();
        son:
            return;
        }
        #endregion
        //Sound IsPlaying Etc. Functions
        #region Ses Ve ŞarkıÖzellik
        public void SesAyarla(int Ses)
        {
            if (Ses >= 0 && Ses <= 1000)
            {
                komut = "setaudio Sarki volume to " + Ses.ToString();
                mciSendString(komut, null, 0, IntPtr.Zero);
            }
        }

        public void SarkiYeriniAyarla(int milisaniye)
        {
            komut = "seek Sarki to " + milisaniye.ToString();
            mciSendString(komut, null, 0, IntPtr.Zero);
        }

        public bool Caliyomu(int a)
        {
            Open(lst.Items[a].SubItems[1].Text);
            komut = "status Sarki mode";
            mciSendString(komut, donendeger, 128, IntPtr.Zero);
            if (donendeger.Length == 7 && donendeger.ToString().Substring(0, 7) == "playing")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public int Rastgele()
        {
            int a = sayi.Next(0, lst.Items.Count);
            return a;
        }
        #endregion
        //File And Directory Process Functions
        #region Dizin Ve Dosya Islem
        public void Dizini_Liste_Ekle(string yol)
        {
            string[] dosyalar = Directory.GetFiles(yol);
            for (int i = 0; i < dosyalar.Length; i++)
            {
                FileInfo fl = new FileInfo(dosyalar[i]);
                lst.Items.Add(fl.Name);
                lst.Items[yer].SubItems.Add(fl.FullName);
                yer++;
            }
        }

        public void Dosya_Ekle()
        {
            lst.Items.Add(op.SafeFileName);
            lst.Items[yer].SubItems.Add(op.FileName);
            yer++;
        }

        public void Dialog()
        {
            DialogResult result = new DialogResult();
            result = op.ShowDialog();
            if (op.FileName != "" && result == DialogResult.OK)
            {
                Dosya_Ekle();
            }
        }
        #endregion
        //Let's Get Mp3 Tags
        #region Mp3 ID3V1
        public void Mp3Oku(string yol)
        {
            FileInfo fi = new FileInfo(yol);
            FileStream fs;
           
            fs = File.OpenRead(yol);
            if (fs.Length > 128)
            {
                char[] buffer = new char[128];

                fs.Seek(fs.Length - 128, SeekOrigin.Begin);

                for (int i = 0; i < 128; i++)
                    buffer[i] = (char)fs.ReadByte();

                String tag = new String(buffer);

                if (tag.Substring(0, 3).Equals("TAG"))
                {
                    artist = tag.Substring(33, 30).Trim();
                    album = tag.Substring(63, 30).Trim();
                    year = tag.Substring(93, 4).Trim();
                }
            }
            fs.Close();
        }
        #endregion
        //Check Internet Connection
        #region InternetBaglanti
        public bool Bagkontrol()
        {
            bool snc=false;
            try 
	{	   
            TcpClient kontrol = new TcpClient("www.google.com",80);
            kontrol.Client.Close();
            snc=true;     
	}
	catch 
	{
		
		snc=false;
	}
            if (snc == true)
            {
                return true;
            }
            else
                return false;
        }
        #endregion
        //On Form Load Enter Registry Entries
        #region Registry
        public void RegisterMpl()
        {
            RegistryKey kokdizin = Registry.ClassesRoot;
            RegistryKey dosyatipi = kokdizin.OpenSubKey(".mpl");
            string yol = Application.StartupPath + "\\Mp3Player.exe";
            if (dosyatipi==null)
            {
                RegistryKey yni;
                yni = kokdizin.CreateSubKey(".mpl");
                yni.SetValue("","mpl.info");
                RegistryKey acklama = kokdizin.CreateSubKey("mpl.info");
                acklama.SetValue("","MP3 Player Dosyası");
                RegistryKey shell = acklama.CreateSubKey("shell"); ;//Open,Run vb İşlemler..
                RegistryKey open = shell.CreateSubKey("open");
                open.SetValue("","&Open Mp3 Player");
                yni = open.CreateSubKey("command");
                yni.SetValue("",yol+" %1");
                yni = acklama.CreateSubKey("DefaultIcon");
                yni.SetValue("", yol+",0");
            }
        }

        public void RegiserRdy()
        {
            RegistryKey kokdizin = Registry.ClassesRoot;
            RegistryKey dosyatipi = kokdizin.OpenSubKey(".rdy");
            string yol = Application.StartupPath + "\\Mp3Player.exe";
            if (dosyatipi == null)
            {
                RegistryKey yni;
                yni = kokdizin.CreateSubKey(".rdy");
                yni.SetValue("", "rdy.info");
                RegistryKey acklama = kokdizin.CreateSubKey("rdy.info");
                acklama.SetValue("", "Mp3 Player Radyo Dosyası");
                RegistryKey shell = acklama.CreateSubKey("shell"); ;//Open,Run vb İşlemler..
                RegistryKey open = shell.CreateSubKey("open");
                open.SetValue("", "&Open Mp3 Player");
                yni = open.CreateSubKey("command");
                yni.SetValue("", yol + " %1");
                yni = acklama.CreateSubKey("DefaultIcon");
                yni.SetValue("", yol + ",0");
            }
        }
        #endregion
        //Functions To Listen Media Files in a row
        #region Siraya Koy
        public void SiraAl(int secilenindex)
        {
            if (SiraIcindeYok(secilenindex))
            {
                siralical.Add(secilenindex);
                sirasi++;
                lst.Items[secilenindex].Text = lst.Items[secilenindex].Text + " " + "(" + (sirasi) + ")";
                siraalindi = true;
            }
            else
            {
                siraalindi = false;
                return;
            }
        }

        public void SiraTemizle()
        {
            for (int i = 0; i < siralical.Count; i++)
            {
                FileInfo fi = new FileInfo(lst.Items[(int)siralical[i]].SubItems[1].Text);
                lst.Items[(int)siralical[i]].Text = fi.Name;
            }
            siralical.Clear();
        }

        public void CalmaBasla()
        {
            if (calsirasi!=siralical.Count)
            {
                if (Caliyomu((int)siralical[calsirasi]))
                {
                    Stop();
                }
                lst.Items[(int)siralical[calsirasi]].Selected = true;
                lblcalan.Text = lst.Items[(int)siralical[calsirasi]].Text;
                mp3.Text = lst.Items[(int)siralical[calsirasi]].Text;
                Play((int)siralical[calsirasi]);
            }
        }

        public bool SiraliCalSonKontrol()
        {
            if (calsirasi != siralical.Count)
            {
                Open(lst.Items[(int)siralical[calsirasi]].SubItems[1].Text);
                if (Saniye_Dakika(CalinanSaniye()) == SarkiuzunlukYaz() && (int)siralical[calsirasi] != lst.Items.Count)
                {
                    Stop();
                    calsirasi++;
                    CalmaBasla();
                    return true;
                }
                else return false;
            }
            else
            {
                return true;
            }
        }

        public bool SiraIcindeYok(int secilenindex2)
        {
            for (int i = 0; i < siralical.Count; i++)
            {
                if (secilenindex2==(int)siralical[i])
                {
                    return false;
                }
            }
            return true ;
        }
        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Team Leader
Turkey Turkey
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions