轻点几下即可管理您的 iTunes 资料库!
该项目连同建议的使用方式,将使您能够整理 iTunes 资料库并使其为 iPod 同步做好准备,同时利用一个带有取消按钮的可重用进度窗口。
引言
我想发表这篇文章有两个原因。其中之一是为将大型 iTunes 资料库同步到容量不太大的 iPod 的问题提供解决方案。另一个是介绍一个可重用的进度窗口窗体,该窗体可以取消其被调用的进程,并在进程完成后强制关闭。
如果您正在阅读本文,那么您很可能也是一个庞大的 MP3 歌曲库的受害者,其中一部分您甚至从未播放过!更糟糕的是,您购买的 iPod 只能存储其中一部分歌曲,所以您不能简单地将所有歌曲都放入 iPod。
现在您要么必须手动同步 iPod,要么坐下来清理 iTunes 资料库中不需要的歌曲。我做不到,因为我通常是有目的地上电脑的,而且这个目的通常比整理我的 MP3 文件更重要。
以下是我清理 iTunes 资料库的方法。
一次性执行
- 首先删除重复项(即,指向同一物理 MP3 文件的多个资料库条目)。
- 删除文件丢失的资料库条目。
在 iPod 或电脑上收听时执行
- 找到要删除的歌曲了吗?将其评为 1 星。
- 找到要仅保留在电脑上,而不在 iPod 上的歌曲了吗?将其评为 2 星。
- 找到要保留在 iPod 上的歌曲了吗?根据您的喜爱程度,将其评为 3 到 5 星。
在 iPod 同步之前执行
- 准备一个单独的播放列表用于同步到 iPod。将所有评为 3 星及以上的歌曲放入其中。根据 iPod 的容量,随机选择歌曲放入播放列表以填满 iPod(这可能非常耗时)。
幸运的是,iTunes 已将 iTunes SDK 作为 COM 组件提供,因此我们可以从 .NET 代码中操作资料库。而这正是本项目的宗旨。除歌曲评分外,上述所有步骤均由本项目处理。
主屏幕
运行应用程序时,它将显示您 iTunes 资料库中的歌曲数量。
让我们来看看这些按钮的功能,从我们可能一次性使用的按钮开始。
删除文件丢失的条目
此按钮启动一个进程,该进程将删除所有文件丢失的资料库条目。这些曲目通常是由于在 Windows 资源管理器中移动文件而产生的。
删除重复项
此按钮删除资料库中指向同一物理 MP3 文件的多个曲目条目。
明星!创建收藏夹播放列表
我编写此应用程序就是为了这个按钮。以下是它创建的播放列表:
- 您的 iPod!:此播放列表包含您评分 3 星及以上的歌曲,以及一些未评分的随机歌曲,以填满您的 iPod。
- 您的收藏夹!:所有评分 3 星及以上的曲目都将在此播放列表中。
- 其余!:所有未评分的文件都将在此播放列表中。
单击此按钮后,系统将询问您的 iPod 容量。
然后它将开始删除它将创建的播放列表中的条目,以便刷新它们。
然后它将开始向播放列表中填充歌曲。
之后,它将填满您的 iPod!播放列表中的剩余空间。
现在您可以同步您的 iPod 和上述播放列表(并且可以选择性地与 iTunes 的自动播放列表“我的评分最高”同步,因为其中的所有文件都已包含在您的 iPod!和您的收藏夹!播放列表中),这样您的 iPod 就可以使用了!
我的建议是,在使用创建收藏夹播放列表按钮之前先同步您的 iPod,这样在创建播放列表时就会考虑到最新评分的歌曲。
进度窗口及其用法
窗体的核心是以下代码。一旦启动,它会绑定到两个事件:UpdateProgressBar
和 StatusDone
。这些事件在名为 MLibrary
的模块中声明。
Public Event UpdateStatus(ByRef Cancel As Boolean, ByVal CurrentNumber As Integer)
Public Event StatusDone(ByVal ForceClose As Boolean)
Private mbCancel As Boolean = False
Public Shared Sub Start(ByVal Headline As String, ByVal Total As Integer)
Dim oStatus As New frmStatus
oStatus.lblHeadline.Text = Headline
oStatus.Text = Headline
oStatus.pb.Maximum = Total
oStatus.Show()
AddHandler MLibrary.UpdateStatus, AddressOf oStatus.UpdateProgress
AddHandler MLibrary.StatusDone, AddressOf oStatus.StatusDone
End Sub
Private Sub UpdateProgress(ByRef Cancel As Boolean, _
ByVal CurrentNumber As Integer)
pb.Value = CurrentNumber
lblStatusText.Text = CurrentNumber & " of " & pb.Maximum
Application.DoEvents()
btnOk.Enabled = CurrentNumber = pb.Maximum
btnCancel.Enabled = Not btnOk.Enabled
Cancel = mbCancel
If Cancel Then Me.Close()
End Sub
Private Sub StatusDone(ByVal ForceQuit As Boolean)
If ForceQuit Then
btnOk_Click(Nothing, Nothing)
Else
btnOk.Enabled = True
btnCancel.Enabled = False
End If
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnCancel.Click
mbCancel = True
End Sub
Private Sub btnOk_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnOk.Click
RemoveHandler MLibrary.UpdateStatus, AddressOf Me.UpdateProgress
RemoveHandler MLibrary.StatusDone, AddressOf Me.StatusDone
Me.Close()
Me.Dispose()
End Sub
以下是代码的使用方式。让我们以查找文件丢失的曲目为例:
Dim iCounter As Integer = 0
For Each oTrack As IITTrack In moTunes.LibraryPlaylist.Tracks
If oTrack.Kind = ITTrackKind.ITTrackKindFile Then
Dim oFileTrack As IITFileOrCDTrack = oTrack
If oFileTrack.Location = "" Then
' Add to the list of tracks to be deleted
alTracksToBeDeleted.Add(oFileTrack)
End If
End If
iCounter += 1
Dim bCancel As Boolean = False
RaiseEvent UpdateStatus(bCancel, iCounter)
Application.DoEvents()
If bCancel Then Exit For
Next
RaiseEvent StatusDone(alTracksToBeDeleted.Count > 0)
上面的代码非常容易理解。在每次迭代中,我们都会引发 UpdateStatus
事件。完成时,我们引发 StatusDone
事件,并带有一个可选参数,用于在用户干预的情况下关闭窗体。
如果您对如何使用此窗体或如何使用 iTunes 资料库管理器有任何疑问,请告诉我。