C#使用TagLib Sharp - 错误的评级数字?
嗨编程社区。所以我使用TagLib Sharp库从我的.mp3s中获取元数据。除了一个例外,一切都很顺利。我可以从我的MP3中读取他们是整数的评分(设置我的Musicbee)。意思C#使用TagLib Sharp - 错误的评级数字?
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
然而,这就是标签库是阅读:
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 Series”?还是有更好的方法,我应该从我的mp3获得评分?我应该放弃Musicbee的半星评级吗?
此外,有taglib上的“帮助”文件?我在这里找到的一切似乎都在这里。我甚至不知道我在上面的代码中设置了“真实”。
非常感谢您的帮助!
*更新* 这不是仅从固定一个错字的答案:
1 = 24 to
1 = 1
按照ID3v2的(3)specification,该帧的目的4.18 POPM
...是指定音频文件有多好。在这个框架中可以找到许多有趣的应用程序,例如播放列表,它比其他播放列表更能提供更好的音频文件,或者可以通过比较用户的个人资料来分析用户的喜好并找到其他“好”文件。框架非常简单。它包含给用户的电子邮件地址,一个评级字节和一个四字节播放计数器,打算在每次播放文件时增加一个。该电子邮件是已终止的字符串。 评级是1-255,其中1是最差的,255是最好的。 0是未知的。如果不需要个人计数器,可以省略。
我知道像MediaMonkey这样的程序使用这半星评级,但它们与规范不完全兼容。链接的MediaMonkey论坛主题解释了他们如何计算半颗星。
您也可以在Mp3tag的文档中查找“RATING MM”。它讲述了收视率的各种实现方式:http://help.mp3tag.de/main_tags.html
这KODI thread显示他们是如何计算的话:
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 ...
谢谢@Paul W!我会在这个周末尝试一下。 –
这并不能帮助我。我不需要知道mediamonkey或者kodi如何计算它。我需要弄清楚为什么TagLib Sharp库不能正确读取它。 –
@KerryWhite TagLib会不会符合ID3规范? – PeterCo
MusicBee v3.1.6512自己做了一些尝试:评分值存储在适当的ID3v2.3 POPM字段中,使用可接受的约定(对于1.5为1.5,对于2.5为118 ......)。 –