C# 在c语言中创建、读取和管理音频播放列表

C# 在c语言中创建、读取和管理音频播放列表,c#,listview,audio,playlist,bass,C#,Listview,Audio,Playlist,Bass,我是C语言的新手,目前我正在尝试使用BASS库制作音频播放器。现在,我正在使用INI文件创建播放列表,如下所示: [songs] 1=c:\lamfao.mp3 2=c:\test.mp3 [total_songs] total=2 一切都很好,但是加载这种类型的INI文件并在ListView中显示它需要花费很多时间。此外,也无法从此INI文件中删除歌曲。因此,我正在寻找有关在C中加载和创建播放列表的帮助。我想做的是创建一个带有歌曲路径的播放列表,如果可能的话,还可以使用ID3信息,如唱片集、

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

[songs]
1=c:\lamfao.mp3
2=c:\test.mp3
[total_songs]
total=2
一切都很好,但是加载这种类型的INI文件并在ListView中显示它需要花费很多时间。此外,也无法从此INI文件中删除歌曲。因此,我正在寻找有关在C中加载和创建播放列表的帮助。我想做的是创建一个带有歌曲路径的播放列表,如果可能的话,还可以使用ID3信息,如唱片集、艺术家和流派。 也像其他媒体播放器一样,例如WinAMP或MediaMonkey,它们不花时间显示播放列表,这是如何实现的。我正在尝试在ListView中以Type=详细信息显示播放列表。 是否可以避免在播放列表中插入重复的歌曲

下面是我用来读取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!");

谢谢您

您正在使用WPF?如果是这样,请使用虚拟化:不,我使用的是Winforms、.NET 4.0谢谢。我建议您使用类似m3u的播放列表格式,而不是旧的ini格式。不过,这与你的问题无关。无论哪种方式,您都必须编写一些代码。读取/显示文本文件不会花费任何时间。如果是这样的话,你的代码一定是大错特错了。如果您想让我们指出任何错误,您必须向我们展示代码。好的,我已经用当前代码更新了我的问题,我正在使用该代码读取INI文件。这并不需要太多时间,但加载大约1300首歌曲大约需要10到15秒。