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 
+0

这并不能帮助我。我不需要知道mediamonkey或者kodi如何计算它。我需要弄清楚为什么TagLib Sharp库不能正确读取它。 –

+0

@KerryWhite TagLib会不会符合ID3规范? – PeterCo

+1

MusicBee v3.1.6512自己做了一些尝试:评分值存储在适当的ID3v2.3 POPM字段中,使用可接受的约定(对于1.5为1.5,对于2.5为118 ......)。 –

当使用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 ...

+0

谢谢@Paul W!我会在这个周末尝试一下。 –