2017-01-05 4 views
0

私のmp3には存在しないフレームを追加しています。格付け「POPM」がない例私が持っている問題は、レーティング値を設定できないフレームを追加するときです。私は2つのsave()を持っていますが、どちらか一方が働いているかどうかを確認するために1つずつ使用しました。しかし、この機能を再実行してisPOPMExistが有効になった場合、評価を設定することができます。 isPOPMExistはID3v2::TextIdentificationFrameID3v2::PopularimeterFrame存在しないタグを追加する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を失敗したときに、私はPOPMを設定した後、だから私は欠けているものをステップわかりません。無関係なフレームタイプなので、キャストは常に失敗します。 ID3v2::PopularimeterFrameを直接newで作成する必要があります(例:

auto frame = new TagLib::ID3v2::PopularimeterFrame; 
frame->setRating(1); 
tag->addFrame(frame); 
file.save(); 
)。
関連する問題