使用TagLib读取MP3评级

时间:2012-10-09 08:24:22

标签: c# mp3 taglib id3

我有一个音乐应用程序,它使用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

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

2 个答案:

答案 0 :(得分:1)

usr =“Windows Media Player 9系列”

答案 1 :(得分:1)

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

根据ID3v2(3)规范,Popularimeter / POPM领域的目的如下......

  

此框架的目的是指定音频文件的好坏程度。可以在这个框架中找到许多有趣的应用程序,例如播放列表,其比其他框架更频繁地具有更好的音频文件,或者它可以用于描绘人的品味并找到其他的好的'通过比较人员的个人资料来处理文件。框架非常简单。它包含用户的电子邮件地址,一个评级字节和一个四字节播放计数器,每次播放文件时都会增加一个。电子邮件是已终止的字符串。评分为1-255,其中1表示最差,255表示最佳。 0是未知的。如果不想要个人柜台,可以省略。当计数器达到所有时间时,在计数器前面插入一个字节,从而使计数器在与播放计数器相同的位置变大8位(" PCNT")。可能有不止一个" POPM"每个标记中的框架,但只有一个具有相同的电子邮件地址。

Source

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

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