1

我是 C# 新手,目前我正在尝试使用 BASS 库制作音频播放器。现在我正在使用如下 INI 文件创建播放列表:

[songs]
1=c:\lamfao.mp3
2=c:\test.mp3
[total_songs]
total=2

一切都很好,但是加载这种类型的 INI 文件并在 ListView 中显示它会消耗大量时间。也没有办法从这个 INI 文件中删除一首歌。因此,我正在寻求有关在 C# 中加载和创建播放列表的帮助。我想做的是创建一个带有歌曲路径的播放列表,如果可能的话,还可以使用专辑、艺术家和流派等 ID3 信息。也像其他媒体播放器,例如 WinAMP 或 MediaMonkey,它们不花时间显示播放列表,这是如何实现的。我正在尝试使用 Type=Details 在 ListView 中显示播放列表。是否可以避免在播放列表中插入重复歌曲?

这是我用来读取 INI 文件的当前代码。

ListViewItem lvi;
ListViewItem.ListViewSubItem lvsi;
string name = "";
string album = "";
string artist = "";
string path = "";

if (File.Exists(CurrentPlaylistLocation))
{
this.progressBar1.Visible = true;
IniFile ini = new IniFile(CurrentPlaylistLocation); // INI Reading class in C# using Win32 API wrapper
string Total = ini.IniReadValue("Total_Files", "Total");
int items = Convert.ToInt32(Total);
this.progressBar1.Minimum = 0;
this.progressBar1.Maximum = items;
this.progressBar1.MarqueeAnimationSpeed = 100;
this.progressBar1.Style = ProgressBarStyle.Blocks;
int total = 0;
listView1.BeginUpdate();
for (int i = 1; i <= items; i++)
{
    path = ini.IniReadValue("songs", Convert.ToString(i));
    if(File.Exists(path))
    {
        // When user deletes a song from playlist, I add a .ignore in the last of song path
        // so, check if a song is deleted by user, if deleted then do not add it
        if (System.IO.Path.GetExtension(path).ToLower() != ".ignore")
        {
            PlayerEngine.GetTrackData(path, out name, out artist, out album); // Get META tag using Taglib sharp

            lvi = new ListViewItem();
            lvi.Text = name;

            lvsi = new ListViewItem.ListViewSubItem();
            lvsi.Text = album;
            lvi.SubItems.Add(lvsi);

            lvsi = new ListViewItem.ListViewSubItem();
            lvsi.Text = artist;
            lvi.SubItems.Add(lvsi);

            lvsi = new ListViewItem.ListViewSubItem();
            lvsi.Text = path;
            lvi.SubItems.Add(lvsi);

            this.listView1.BeginUpdate();
            this.listView1.Items.Add(lvi);
            this.listView1.EndUpdate();

            total++;
            this.progressBar1.Value = (i);
        }
    }
}
listView1.EndUpdate();
PlayerEngine.TotalTrackInTempPlaylist = listView1.Items.Count-1; // update the total number of songs loaded in player engine class
this.progressBar1.Visible = false;
MessageBox.Show("Playlist loading completed!");

感谢您

4

0 回答 0