2017-01-05 11 views
0

Я добавляю фрейм, который не существует для некоторых моих mp3. Например, отсутствует рейтинг «POPM». Проблема заключается в том, что когда я добавляю фрейм, я не могу установить значение рейтинга. У меня есть два save(), которые я использовал по одному, чтобы посмотреть, работает ли один из них. Но если я повторно запустил эту функцию, и isPOPMExist теперь действителен, я могу установить рейтинг. Так что я не уверен, что шаг отсутствует после того, как я установил 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_cast между ID3v2::TextIdentificationFrame и ID3v2::PopularimeterFrame. Это несвязанные типы кадров, поэтому приведение всегда будет терпеть неудачу. Вам необходимо создать ID3v2::PopularimeterFrame непосредственно с помощью new, например .:

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