2013-05-18 3 views
1

라이브러리 TagLib로 MP3 파일의 "앨범 아티스트"필드를 수정하는 방법은 무엇입니까? 여기에서 비슷한 것을 발견 할 수 있습니다 :taglib : 앨범 아티스트를 수정하는 방법?

f.tag()->setArtist("blabla"); 

?

+0

내가 그 차이를 이해하지 않습니다 TagLib :: FileRef와 TagLib :: File 사이에 있습니다. TagLib :: FileRef f ("foo.mp3");을 사용하면 f.tag(). removeFrames를 사용할 수 없습니다. TagLib :: MPEG :: File f ("foo.mp3");을 사용하면 f.ID3v2Tag() -> removeFrames를 사용할 수 있습니다. TagLib :: FileRef와 TagLib :: File의 차이점은 무엇입니까? – Basj

+0

'FileRef'는 파일 형식에 적절한 'TagLib :: File' 서브 클래스를 인스턴스화하는 편리한 클래스입니다. 즉, Throw하고 Ogg, FLAC 또는 MP3 파일을 던지더라도 작동합니다. "Album Artist"에 대한 표준은 없기 때문에, 덜 일반화 된 추상화로 내려와야합니다. 이것은 MPEG :: File이 들어오는 곳입니다. – scotchi

답변

4

ID3v2는 실제로 "앨범 아티스트"라는 필드를 지원하지 않습니다.

TPE2
'밴드/오케스트라/반주'프레임

는 녹화에서 공연에 대한 자세한 내용은 사용 : iTunes는 것으로 가정되는 TPE2 프레임을 사용합니다.

전체 프레임 목록은 http://id3.org/id3v2.3.0#Declared_ID3v2_frames을 참조하십시오.

이 태그 라이브러리로,이 트릭 할 것이라는 점을 작성하려면 : 방금 프레임을 제거하려면

#include <mpegfile.h> 
#include <id3v2tag.h> 
#include <textidentificationframe.h> 

int main() 
{ 
    TagLib::MPEG::File file("foo.mp3"); 
    TagLib::ByteVector handle = "TPE2"; 
    TagLib::String value = "bar"; 
    TagLib::ID3v2::Tag *tag = file.ID3v2Tag(true); 

    if(!tag->frameList(handle).isEmpty()) 
    { 
     tag->frameList(handle).front()->setText(value); 
    } 
    else 
    { 
     TagLib::ID3v2::TextIdentificationFrame *frame = 
      new TagLib::ID3v2::TextIdentificationFrame(handle, TagLib::String::UTF8); 
     tag->addFrame(frame); 
     frame->setText(value); 
    } 

    file.save(); 

    return 0; 
} 

을 간단히 수행 할 수 있습니다

TagLib::MPEG::File file("foo.mp3"); 
TagLib::ID3v2::Tag *tag = file.ID3v2Tag(); 

if(tag) 
{ 
    tag->removeFrames("TPE2"); 
    file.save(); 
} 
+0

고마워요. 사실, "앨범 아티스트"필드를 삭제하려고했습니다. (미안하지만 내 질문이 정확하지 않았다). 이 "앨범 아티스트"태그를 삭제하는 더 짧은 방법이 있습니까? a) 필드를 제거하거나 b)'setText ("")'? – Basj

+0

'removeFrames'는'TagLib :: Tag'에서 작동하지 않습니다 : http://taglib.github.io/api/classTagLib_1_1Tag.html – Basj

+0

'TagLib :: ID3v2 :: Tag'를 사용해야합니다. 내 예제에서와 마찬가지로 : http://taglib.github.io/api/classTagLib_1_1ID3v2_1_1Tag.html이 경우 프레임은 ID3v2 태그에만 해당됩니다. 클래스는 * all * 태그 형식에 사용되기 때문에'TagLib :: Tag' 기본 클래스에 존재하지 않습니다. – scotchi

관련 문제