在这个数字化的时代,音乐收藏通常以数字格式存储在电脑或移动设备上。尽管市场上有许多现成的音乐播放软件,但有时候,可能想要一些更个性化的解决方案,比如编写自己的代码来自动创建播放列表。本文将介绍一个音乐播放列表生成器的制作过程,包括代码实现、界面设计以及学习心得。
在编写原始文章,关于如何使用简单的递归和LINQ轻松创建音乐播放列表之后,回顾了工作,并开始着手改进。在这个版本的代码中,特别想要改进的一点是,能够在文件夹树的每个分支级别创建播放列表。音乐会按照流派、艺术家、专辑的顺序组织,所以想要能够启动一个播放列表,比如包含所有摇滚音乐的“Rock”文件夹,以及树中的任何地方。
代码的主要工作是:
DataSet看起来像这样:
DataTables 用于存储收集的磁盘信息。发现类型化DataSet对于像这样的快速存储数据任务非常方便。它们易于设置,并且编码起来无缝。
为了在代码中增加一些结构,有一个单独的程序集提供所有查找音乐文件以及构建播放列表的工作。所有的工作任务都在PlaylistCreatorFP项目中完成,该项目有一个名为PCEngine的主类,包含主要方法。
在编码过程中,发现了一个有趣的小知识,即System.IO.Directory类有一个静态方法用于在给定路径中找到所有目录。这不是什么新信息,但没有意识到还有一个参数可以传递,它将为进行递归:
C# string[] dirs = Directory.GetDirectories(inPath, PCConstants.ALLFILES_SEARCH_PATTERN, SearchOption.AllDirectories);
太好了!不再需要内存密集型的手动递归进行磁盘遍历了!
其余的代码相当易读,所以不会在这里详细介绍。PCEngine类中的主要方法有SearchDisk(...)和CreatePlayLists(...)。其余的是支持这些方法的辅助方法,以及一个事件,用于将更新消息发送回主进程线程。
用户界面是另一个故事。在CodeProject文章中,可能有点过分了!用户界面是一个小型的WPF界面,允许用户输入一些关于在哪里开始查找音乐文件、如何命名生成的播放列表文件等的选择。这些都是简单的东西,只是为了使它成为一个更实用的程序。工作由System.ComponentModel.BackgroundWorker对象执行,以保持UI的流畅运行。此外,还有一个基类用于在WPF/XAML中扩展Window类。
在编写过程中,学到了: