2012-10-09 44 views
1

我有一個音樂應用程序,它使用TagLib庫讀取ID3標籤。它在藝術家,標題,專輯,年......上運行良好...使用TagLib讀取MP3評分

但是我無法閱讀收視率。我已經試過這樣:

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

USR =「的Windows Media Player 9系列」

1

我偶然發現了這個問題我自己,而標有答案沒有解決這個問題對我來說。坦率地說,這甚至不是一個答案/解決方案 - 只是一個幸運的猜測,似乎已經爲OP做好了準備。

按照ID3v2的(3)說明書中,Popularimeter/POPM字段的目的是以下...

該幀的目的是指定一個音頻文件有多好。在這個框架中可以找到許多有趣的應用程序,例如播放列表,它比其他播放列表更能提供更好的音頻文件,或者可以通過比較用戶的個人資料來分析用戶的喜好並找到其他「好」文件。框架非常簡單。它包含給用戶的電子郵件地址,一個評級字節和一個四字節播放計數器,打算在每次播放文件時增加一個。該電子郵件是已終止的字符串。評級是1-255,其中1是最差的,255是最好的。 0是未知的。如果不需要個人計數器,可以省略。當計數器到達所有人的位置時,在計數器前面插入一個字節,從而使計數器在與計數器(「PCNT」)相同的位置變大八位。每個標籤中可能有多個「POPM」框架,但只有一個具有相同的電子郵件地址。

Source

注意到,最後一句的;可能有多個POPM字段 - 但每個電子郵件地址只有一個。根據我的理解,如果您沒有提供實際存在的電子郵件(用戶)值,TagLib會返回空白評級。在這種情況下,似乎usr =「Windows Media Player 9系列」的幸運猜測似乎奏效,因爲Windows Media Player可能是OP評級的作者。

使用MediaMonkey的我的解決方案是找出該應用程序使用哪個電子郵件地址值 - 即「no @ email」。一旦我將這個價值作爲參數提供,我就可以檢索我的所有評級。