2017-01-05 21 views
0

我添加了一個不存在的框架,我的一些mp3。示例缺少「POPM」等級。我遇到的問題是當我添加框架時,我無法設置評分值。我有兩個save(),我一次只用一個來看看是否有人工作。但是,如果我重新運行此功能,並且是現在有效的,我可以設置評分。所以,我不知道哪一步後,我設定的POPM丟失時isPOPMExist失敗Taglib添加不存在的標籤

bool isPOPMExist = id3v2Tag->frameListMap().contains("POPM"); 
if(!isPOPMExist) 
{ 
    TagLib::ByteVector bytePOPM("POPM"); 

    TagLib::ID3v2::TextIdentificationFrame *frame = new TagLib::ID3v2::TextIdentificationFrame(bytePOPM, TagLib::String::UTF8); 
    id3v2Tag->addFrame(frame); 
    // frame->setText(""); 
    file.save(); 
    dynamic_cast<TagLib::ID3v2::PopularimeterFrame *>(file.ID3v2Tag()->frameList("POPM").front())->setRating(255); 
    file.save(); 
} 
else 
{ 
    auto framelistCount = file.ID3v2Tag()->frameList("POPM").size(); 
    if(framelistCount > 0) 
    { 
     if(dynamic_cast<TagLib::ID3v2::PopularimeterFrame *>(file.ID3v2Tag()->frameList("POPM").front()) != 0) 
     { 
      int ratingVal = (int)rating; 
      dynamic_cast<TagLib::ID3v2::PopularimeterFrame *>(file.ID3v2Tag()->frameList("POPM").front())->setRating((int)rating); 

      return file.save(); 
     } 
    } 
} 

回答

0

你不能dynamic_castID3v2::PopularimeterFrame之間ID3v2::TextIdentificationFrame。他們是不相關的幀類型,所以劇組總是會失敗。您需要直接使用new創建ID3v2::PopularimeterFrame,例如:

auto frame = new TagLib::ID3v2::PopularimeterFrame; 
frame->setRating(1); 
tag->addFrame(frame); 
file.save();