嘿编程社区。因此,我正在使用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 ...