播放MP3文件

时间:2014-04-03 06:37:19

标签: c# winforms mp3

我正在为一个项目创建一个简单的MP3播放器,我想让我的软件播放mp3声音。我有一个下拉组合框和一个播放按钮。我想要的是当按下播放按钮时要播放的所选歌曲。 (在此之后,我也将脚本暂停,下一步等按钮。

布局的Picutre:

enter image description here

组合框的当前代码显示歌曲名称:

namespace Jukebox___Eksamensprojekt
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void cbSange_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] files = System.IO.Directory.GetFiles(@"C:\Programmer\Jukebox\Songs"); //Henstiller til mappen med sange

            for (int i = 0; i < files.Length; i++)
            {
                int temp = 28; //Kan ændre på tallet for at redigere hvad outputtet bliver i comboboxen
                files[i] = files[i].Substring(temp, (files[i].Length - temp)); //Sørger for jeg kun får sangnavn som output
            }

            this.cbSange.Items.AddRange(files);
        }
    }
}
编辑:具体问题是,我有一个ComboBox,我在其中选择文件(在代码中显示),我也得到了图片上显示的播放按钮。我想要的是,当点击播放按钮时,将播放选定的歌曲。

EDIT。 包含cbSange错误的完整代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Jukebox___Eksamensprojekt
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        public class AudioItem
        {
            public string Name { get; set; }
            public string Path { get; set; }

            private void Form1_Load(object sender, EventArgs e)
            {
                this.cbSange.DisplayMember = "Name";

                var path = @"C:\Programmer\Jukebox\Songs";
                var files = System.IO.Directory.GetFiles(path);

                foreach (var file in files)
                {
                    var item = new AudioItem
                    {
                        Name = System.IO.Path.GetFileNameWithoutExtension(file),
                        Path = file
                    };
                    this.cbSange.Items.Add(item);
                }
            }

            private void cbSongs_SelectedIndexChanged(object sender, EventArgs e)
            {

                var selectedItem = cbSange.SelectedItem;
                if (selectedItem != null)
                {
                    var audioItem = (AudioItem)selectedItem;
                    var filePath = audioItem.Path;
                    //Use 'filePath' to open the file
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

NAudio是.NET的音频和midi库。它有一些很棒的功能,如播放,音量控制和可视化,如果你需要它。

我已在WinForms项目中使用它并取得了巨大成功。它们在包装内也有一些很棒的WinForms样品。最好的部分是它是开源的。

您可以在CodePlex

上找到该项目

答案 1 :(得分:0)

这是一种在ComboBox中加载和选择文件的简便方法。首先,创建一个类来保存音频文件的名称和路径。这样您就可以在ComboBox中显示文件的名称,但该项目也将(无形地)保存路径。

public class AudioItem
{
    public string Name {get;set;}
    public string Path {get;set;}
}

在Form的Load事件中,从文件夹中获取文件,创建AudioItem类的实例,相应地设置属性并将它们添加到ComboBox。 Load事件中的第一行将设置要在ComboBox中显示的属性,否则它将为每个项显示类似AudioItem的内容(它是一个类,而不是字符串)。

private void Form1_Load(object sender, EventArgs e)
{
    this.cbSange.DisplayMember = "Name";

    var path = @"C:\Programmer\Jukebox\Songs";
    var files = System.IO.Directory.GetFiles(path);

    foreach(var file in files)
    {
        var item = new AudioItem
        {
            Name = System.IO.Path.GetFileNameWithoutExtension(file),
            Path = file
        };
        this.cbSange.Items.Add(item);
    }
}

当ComboBox的选定索引发生更改时,将获取该项目并将其转换为可以轻松获取路径的AudioItem。此路径可用于打开和播放文件。

private void cbSange_SelectedIndexChanged(object sender, EventArgs e)
{
    var selectedItem = cbSange.SelectedItem;
    if(selectedItem != null)
    {
        var audioItem = (AudioItem)selectedItem ;
        var filePath = audioItem.Path;
        //Use 'filePath' to open the file
    }
}

没有直接内置支持在.NET中播放mp3文件所以我建议你使用这里提到的一个建议:NAudio,DirectX,WindowsMediaPlayer,......

希望这有帮助!

更新

你的代码混淆了,它应该是这样的:

public class AudioItem
{
    public string Name { get; set; }
    public string Path { get; set; }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.cbSange.DisplayMember = "Name";
        var path = @"C:\Programmer\Jukebox\Songs";
        var files = System.IO.Directory.GetFiles(path);

        foreach (var file in files)
        {
            var item = new AudioItem
            {
                Name = System.IO.Path.GetFileNameWithoutExtension(file),
                Path = file
            };
            this.cbSange.Items.Add(item);
        }
    }

    private void cbSongs_SelectedIndexChanged(object sender, EventArgs e)
    {
        var selectedItem = cbSange.SelectedItem;
        if (selectedItem != null)
        {
            var audioItem = (AudioItem)selectedItem;
            var filePath = audioItem.Path;
            //Use 'filePath' to open the file
        }
    }
}