我正在为一个项目创建一个简单的MP3播放器,我想让我的软件播放mp3声音。我有一个下拉组合框和一个播放按钮。我想要的是当按下播放按钮时要播放的所选歌曲。 (在此之后,我也将脚本暂停,下一步等按钮。
布局的Picutre:
组合框的当前代码显示歌曲名称:
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
}
}
}
}
}
答案 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
}
}
}