C#使用Taglib Sharp-错误的评分号



嘿编程社区。因此,我正在使用Taglib Sharp库从我的.mp3中获取元数据。一切都很好,一个例外。我可以从我的mp3中阅读它们的全部数字(设置我的Musicbee)。意思

Stars
5 = 255
4 = 196
3 = 128
2 = 64
1 = 1
unrated=0

我遇到的问题是我使用Musicbee,可以在其中设置半星级。因此,我应该从评级中获得的价值是:

Stars
5 = 255
4.5 = 224
4 = 196
3.5 = 160
3 = 128
2.5 = 96
2 = 64
1.5 = 48
1 = 1
unrated=0

但是,这就是Taglib正在阅读的内容:

5 = 255
4.5 = 0
4 = 196
3.5 = 0
3 = 128
2.5 = 0
2 = 64
1.5 = 0
1 = 1

这是我用来获得评分的代码:

TagLib.File file = TagLib.File.Create(fi.FullName);
TagLib.Tag tag = file.GetTag(TagLib.TagTypes.Id3v2);
TagLib.Id3v2.PopularimeterFrame tagInfo = TagLib.Id3v2.PopularimeterFrame.Get((TagLib.Id3v2.Tag)tag, "Windows Media Player 9 Series", true);
byte rate = tagInfo.Rating;
//This is where I'm storing the value as a string to process it later
id3.Rating = tagInfo.Rating.ToString();

我的问题是,是两个方面。我应该/应该/可以使用另一个USR代替" Windows Media Player 9系列"?还是我应该从MP3中获得评分更好?我应该放弃Musicbee的半明星评分吗?

另外,在taglib上是否有"帮助"文件?似乎我在这里找到的一切都可以找到。我什至不知道我在上面的代码中设置了" true"。

感谢您提前的帮助!

*更新 * 这不是一个答案,只是修复了:

的错字
1 = 24   to
1 = 1

根据ID3V2(3)规范,框架4.18 POPM

的目的

...是指定音频文件的良好。可以在此框架上找到许多有趣的应用程序,例如播放列表,这些应用程序比其他播放列表更频繁地具有更好的有声票件,或者可以通过比较人们的个人资料来介绍一个人的口味并找到其他"好"文件。框架很简单。它包含给用户的电子邮件地址,一个评分字节和一个四字节播放计数器,每次播放文件时都会增加一个字节。该电子邮件是终止字符串。等级是1-255,其中1是最差的,而255是最好的。0是未知的。如果不想要个人计数器,则可能会省略。

我知道像MediaMonkey这样的程序使用此半星级,但它们与规范不完全兼容。链接的MediaMonkey论坛线程解释了他们如何计算半星。

您还可以在MP3TAG的文档中查找"评级MM"。它讲述了评分的各种实现:http://help.mp3tag.de/main_tags.html

此Kodi线程显示了它们如何计算:

       Values    Rating
-----------------------
0             0   0
0.5        2-22   1
1      1, 23-31   2
1.5       32-63   3
2         64-95   4
2.5      96-127   5
3       128-159   6
3.5     160-195   7
4       196-223   8
4.5     224-254   9
5           255  10

使用taglibsharp时, TagLib.Id3v2.PopularimeterFrame.Get的第二个参数应为POPM框架的"发送给用户"字段的值。

此值应为" MusicBee" 在您的情况下,不是" Windows Media Player 9系列"。

=>工作代码如下(使用现实生活的Musicbee文件测试)

TagLib.File file = TagLib.File.Create(fi.FullName);
TagLib.Tag tag = file.GetTag(TagLib.TagTypes.Id3v2);
TagLib.Id3v2.PopularimeterFrame tagInfo = TagLib.Id3v2.PopularimeterFrame.Get((TagLib.Id3v2.Tag)tag, "MusicBee", true);
byte rate = tagInfo.Rating;

nb:Musicbee商店"半明星"的惯例略有不同:54 = 1,5-118 = 2,5 ...

最新更新