在 C# 中读取 M4A 标签






4.50/5 (9投票s)
如何读取 M4A 文件信息,例如作者和歌曲标题。
引言
我遇到一个问题,iTunes 好心地将我的所有音乐文件重命名为四个字符的文件名。对于 MP3 文件来说这很好,因为 Windows shell 会显示歌曲名称,但是 M4A 文件呢?我不知道歌曲是什么。因此,我开始寻找一种方法来重命名每首歌曲并将其复制到文件共享。MP3 文件很容易处理。我四处寻找关于 M4A 文件的解决方法。然后,在搜索了数小时后,我找到了那个让我走上正轨的宝贵信息。“**将 QuickTime 控件库添加到您的 Visual Studio 项目中**”,有人在某个论坛深处这么说。啊哈!!我为什么没想到呢?!但这并不那么简单。
让我试着解释一下。
背景(无效的方法)
我首先将 *QTControl.dll* 引用添加到我的项目中,并像这样创建了一个实例……
//Create Quicktime Control
QTControl m_qtCtrl = new QTControl();
//Get handle on the File you want
m_qtCtrl.URL = filePath;
现在,控件拥有文件的句柄,我们应该能够使用控件的 Movie 对象从文件中提取信息。Movie 基本上是您传递给 URL 的任何文件,顺便说一句,它可以是 URL 或文件路径。Movie 可以是 JPG、M4A、Mov 或 QuickTime 可以读取的任何其他文件。
//Create new Movie Object
QTOLibrary.QTMovie mov = new QTOLibrary.QTMovie();
您可以整天尝试这个,而 `mov` 将为 null
!!!对于像我这样的学习计算机编程的人来说,这非常令人沮丧。所以,让我们继续讨论我最终想通的方法。
使用代码(对我有用的方法)
似乎要使用 QTControlLib,您必须在窗体中托管控件。
- 首先,将 *QTOControl.dll* 添加到 Visual Studio 中的**工具箱**。
- 然后,将控件拖到您的窗体上。然后我将其 `Visible` 属性设置为 false,因为我不需要视频播放器。但这对于未来的项目也很有用。
- 这样做会在您的窗体上创建一个新的托管控件,名为 `axQTControl1`。返回您的窗体的代码并传递文件路径。
//Get a handle on the file axQTControl.URL = filePath;
现在,当您创建此控件的 movie 对象的实例时,它将不会是 null
!!
//Create new movie object
QTOLibrary.QTMovie mov = new QTOLibrary.QTMovie();
mov = axQTControl1.Movie;
`mov` 包含您期望它拥有的所有信息!!我这样获取它的信息并继续使用它
//Get the file props
string artistName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationArtist);
string albumName = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationAlbum);
string songTitle = mov.get_Annotation((int)QTAnnotationsEnum.qtAnnotationFullName);
就是这样!
关注点
源代码或多或少只是示例。这也是我的第一个 C# 项目。耶!!我一直在做 VB.NET 大约一年了。所以投票时手下留情。
正如我在引言中开始解释的那样,我的目的是获取艺术家姓名和歌曲名称,并将其复制到某个文件夹(*file-share\Music\artistName\songName.m4a*)。我大约对 2700 个 M4A 文件和大约 3000 个 MP3 文件运行了此程序。总共大约花费了一个小时。该项目中大部分关于 MP3 文件的代码来自另一篇非常有帮助的 CodeProject 文章。
Form1
中的代码相当混乱,但行数不多,所以我认为您可以理解它。它目前设置为处理 M4A 文件。要处理 MP3 文件,请将第 62 行的 `M4AFileSearch(sDir);` 更改为 `MP3FileSearch(sDir);`。
历史
没有历史记录,但如果需要,我想扩展这个项目。