Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 播放MP3文件_C#_Winforms_Mp3 - Fatal编程技术网

C# 播放MP3文件

C# 播放MP3文件,c#,winforms,mp3,C#,Winforms,Mp3,我正在为一个项目创建一个简单的MP3播放器,我想让我的软件播放MP3声音。我有一个下拉组合框和一个播放按钮。我想要的是当按下播放按钮时播放的选定歌曲。(在此之后,我还将编写暂停、下一步等按钮的脚本 布局图: 以及组合框显示歌曲名称的当前代码: namespace Jukebox___Eksamensprojekt { public partial class Form1 : Form { public Form1() {

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

布局图:

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

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);
        }
    }
}

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

我在
WinForms
项目中使用过它,并取得了巨大成功。包中还有一些很棒的
WinForms
示例。最好的部分是它是开源的


您可以在

上找到项目这里有一个简单的方法来加载和选择组合框中的文件。首先,创建一个类来保存音频文件的名称和路径。这样,您可以在组合框中显示文件的名称,但该项也会(不可见地)保存路径

public class AudioItem
{
    public string Name {get;set;}
    public string Path {get;set;}
}
在窗体的Load事件中,从文件夹中获取文件,创建AudioItem类的实例,相应地设置属性并将其添加到ComboBox。Load事件的第一行将设置属性以显示在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
        }
    }
}

很好。继续。认真地说:问题是什么?我该怎么做?我该如何选择歌曲并让它们播放:)我知道可能会出现重复,但我发现的帖子对我的特定项目不起作用。我想要一个按钮来播放我在组合框中选择的歌曲。现在我所做的只是让名称显示在组合框中,而不是选择一个文件。为什么不呢?该链接有很多示例可供调用。如果所有这些示例都不起作用,那么一定会出现问题非常错误,但你没有说什么。谢谢你的回答,但我正在寻找一些具体的代码来指导我。好的线索是,NAudio是开源的,这意味着你可以掌握源代码,看看他们是如何做到的。在我看来,这个答案就是你所需要的。哦,下次我会尝试打开我的眼睛,看看他们是如何做到的注意下一次的“源代码”标签:D我会查看的,谢谢。从您的图片中可以看到,它们已经支持您所需的功能。我建议您利用库,并将您的编码工作更多地集中在您的业务代码上。这只是我的拙见:)好的,我只想指出我在这方面非常新,我以前从未处理过声音文件。我不知道你说的这些话该怎么说。我也不知道在诸如“WMPLib.WindowsMediaPlayer wplayer=new WMPLib.WindowsMediaPlayer();wplayer.URL=“My MP3 file.MP3”;wplayer.controls.play();”等网站上找到的代码应该放在哪里我不知道我是否完全离开了或者该做什么。这看起来很有希望!尽管我使用“cbSange”获得此错误:错误4“Jukebox\uuuuu Eksamensprojekt.Form1.AudioItem”不包含“cbSange”的定义,并且找不到接受类型为“Jukebox\uuuuuu Eksamensprojekt.Form1.AudioItem”的第一个参数的扩展方法“cbSange”(是否缺少using指令或程序集引用?)C:\Users\KROWNTHEINSANE\Documents\visualstudio 2012\Projects\Jukebox-Eksamensprojekt\Jukebox-Eksamensprojekt\Form1.cs 40 14 Jukebox-Eksamensprojekt在下一个代码中,我似乎在名称foldersCB和item中也出现了错误:/I有一些小错误并更正了,您能再试一次吗?:)尝试了它们,它修复了上一个代码中的错误。但我在cbSange中仍然遇到一个错误;)错误究竟发生在哪里?把代码贴在你的问题上,我来看看。
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
    }
}
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
        }
    }
}