Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Music Player in C# Does Tot Play The Song I Added Later

I made an mp3 player in C#. If I select the songs at once, they automatically play one after the other, but when it comes to a song I added later, I get a "System.IndexOutOfRangeException" error. When I add music later, I want the song to play automatically one after the other, how can I do that?

    string[] yol, dosya;
    private void Btn_Muzik_Ekle_Click(object sender, EventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Multiselect = true;
        if (ofd.ShowDialog()==System.Windows.Forms.DialogResult.OK)
        {
            dosya = ofd.SafeFileNames;
            yol = ofd.FileNames;
            for (int x = 0; x < dosya.Length; x++)
            {
                Lb_Muzik_Listesi.Items.Add(dosya[x]);
            }
           
        }
    }


    private void Lb_Muzik_Listesi_SelectedIndexChanged(object sender, EventArgs e)
    {
        OynatmaEkranı.URL = yol[Lb_Muzik_Listesi.SelectedIndex]; //This Is Where I Got The Error
        OynatmaEkranı.Ctlcontrols.play();

        try
        {
            var file = TagLib.File.Create(yol[Lb_Muzik_Listesi.SelectedIndex]);
            var bin = (byte[])(file.Tag.Pictures[0].Data.Data);
            Pb_Muzik_Kapak.Image = Image.FromStream(new MemoryStream(bin));
        }
        catch 
        {
            
            
        }

    }


    private void Zamanlayıcı_Tick(object sender, EventArgs e) //Timer
    {
        if (OynatmaEkranı.playState==WMPLib.WMPPlayState.wmppsPlaying)
        {
            Pb_Muzik.Maximum=(int)OynatmaEkranı.Ctlcontrols.currentItem.duration;
            Pb_Muzik.Value = (int)OynatmaEkranı.Ctlcontrols.currentPosition;
            try
            {
                Lbl_Muzik_Sure.Text = OynatmaEkranı.Ctlcontrols.currentPositionString;
                Lbl_Muzik_Bitis.Text = OynatmaEkranı.Ctlcontrols.currentItem.durationString.ToString();
             

            }
            catch
            {


            }
        }
      
        if (Pb_Muzik.Value==Pb_Muzik.Maximum)
        {              
            if (Lb_Muzik_Listesi.SelectedIndex<Lb_Muzik_Listesi.Items.Count-1)
            {
                Lb_Muzik_Listesi.SelectedIndex = Lb_Muzik_Listesi.SelectedIndex + 1;
               
            }

        }
        
    }

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

You can avoid this problem managing your data in the ListBox. Create a class with your required info (the file and the name):

public class MuzikItem
{
    public MuzikItem(string file)
    {
        this.Text = System.IO.Path.GetFileNameWithoutExtension(file);
        this.Url = file;
    }

    public string Text { get; set; }
    public string Url { get; set; }

    public override string ToString()
    {
        // This is the text to show in ListBox
        return this.Text;
    }
}

Add items to the ListBox using this class:

foreach (var file in ofd.FileNames)
{
    var item = new MuzikItem(file);
    Lb_Muzik_Listesi.Items.Add(item);
}

And use it:

var item = Lb_Muzik_Listesi.SelectedItem as MuzikItem;
if (item != null)
{
    OynatmaEkranı.URL = item.Url;
    OynatmaEkranı.Ctlcontrols.play();

    try
    {
        var file = TagLib.File.Create(item.Url);
        var bin = (byte[])file.Tag.Pictures[0].Data.Data;
        Pb_Muzik_Kapak.Image = Image.FromStream(new MemoryStream(bin));
    }
    catch
    {
    }
}

You try to get the selected item as a MuzikItem (all your items are of this class so this return null only when no item is selected) and with this, you have the Url.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading