使用 TagLib 读取 MP3 等级

Posted

技术标签:

【中文标题】使用 TagLib 读取 MP3 等级【英文标题】:Read MP3 rating using TagLib 【发布时间】:2012-10-09 08:24:22 【问题描述】:

我有一个音乐应用程序,它使用TagLib 库读取 ID3 标签。它适用于艺术家、标题、专辑、年份...

但我无法读取评级。我试过这个:

TagLib.File track = TagLib.File.Create(name);
TagLib.Tag tag123 = track.GetTag(TagLib.TagTypes.Id3v2);
var usr = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
TagLib.Id3v2.PopularimeterFrame frame = TagLib.Id3v2.PopularimeterFrame.Get(
                                         (TagLib.Id3v2.Tag)tag123, usr, true);

但是frame.PlayCountframe.Rating 总是0

有人知道我的代码为什么不起作用吗?

【问题讨论】:

【参考方案1】:

usr = "Windows Media Player 9 系列"

【讨论】:

【参考方案2】:

我自己偶然发现了这个问题,标记的答案并没有为我解决。坦率地说,这甚至不是一个答案/解决方案 - 只是一个幸运的猜测,似乎已经为 OP 解决了。

根据 ID3v2(3) 规范,Popularimeter/POPM 字段的用途如下...

此帧的目的是指定音频文件的质量。在这个框架中可以找到许多有趣的应用程序,例如播放列表,它比其他人更频繁地提供更好的音频文件,或者它可以用来描述一个人的品味并通过比较人们的个人资料来找到其他“好”文件。框架非常简单。它包含给用户的电子邮件地址、一个评级字节和一个四字节的播放计数器,每次播放文件时都会增加一个。电子邮件是一个终止的字符串。评级为 1-255,其中 1 是最差的,255 是最好的。 0 未知。如果不需要个人计数器,则可以省略。当计数器达到全 1 时,在计数器前面插入一个字节,从而使计数器与播放计数器(“PCNT”)相同的距离大 8 位。每个标签中可能有多个“POPM”框架,但只有一个具有相同的电子邮件地址。

Source

注意最后一句话;可能有多个 POPM 字段 - 但每个电子邮件地址只有一个。据我了解,如果您不提供实际存在的电子邮件(用户)值,TagLib 将返回空评级。在这种情况下,似乎 usr = "Windows Media Player 9 Series" 的幸运猜测似乎成功了,因为 Windows Media Player 可能是 OP 评级的作者。

对于使用 MediaMonkey 的我来说,解决方案是找出该应用程序使用的电子邮件地址值 - 即“no@email”。一旦我提供了该值作为参数,我就可以检索我的所有评级。

【讨论】:

以上是关于使用 TagLib 读取 MP3 等级的主要内容,如果未能解决你的问题,请参考以下文章

taglib(-ruby) 无法读取特定文件

带有 tagLib 锐库的 C# 自定义 mp3 标签

读取远程 mp3 文件的 ID3 标签?

在 Powershell 中使用 TagLib 读取 id3v2 帧

使用 taglib# 提取 mp3 标签

从 .mp3 文件中获取“初始密钥”值