En utilisant TagLib 1.8 avec Qt 5.0.1 sur Mac OSX, j'essaye de créer un nouvel ensemble de balises ID3 pour un fichier AIFF. Le fichier ne contient aucune balise pour commencer. Voici mon code:TagLib ne sauvegarde pas la balise ID3
TagLib::Tag *t = concreteTag();
assert(tag);
if (t) {
auto id3Tag = dynamic_cast<TagLib::ID3v2::Tag *>(t);
t -> setTitle(QStringToTagLib(tag -> title()));
t -> setAlbum(QStringToTagLib(tag -> album()));
t -> setComment(QStringToTagLib(tag -> comment()));
t -> setYear(tag -> year());
if (id3Tag)
processID3(id3Tag, tag);
return m_file.save();
}
return false;
La variable tag
est un objet de mon code de maintien des métadonnées. concreteTag()
renvoie un objet de balise "correct" si le FileRef
renvoie un TagUnion
à partir de sa fonction tag()
. J'ai vérifié que les données dans tag
sont bonnes.
processID3
écriront des métadonnées qui ne fait pas partie des champs « de base » TagLib prend en charge sur l'objet TagLib::Tag
:
processID3(TagLib::ID3v2::Tag *dst, TagSP src) const {
addID3Images(dst, src -> albumArt());
addId3TextFrame(dst, "ALBUMARTIST", src -> albumArtist());
addId3TextFrame(dst, "ARTIST", src -> artists());
addId3TextFrame(dst, "GENRE", src -> genres());
addId3TextFrame(dst, "COMPOSER", src -> composers());
if (src -> track() > 0) {
if (src -> totalTracks() > 0)
addId3TextFrame(dst, "TRACKNUMBER", QString(src -> track()) + "/" + src -> totalTracks());
else
addId3TextFrame(dst, "TRACKNUMBER", QString(src -> track()));
}
if (src -> disc() > 0) {
if (src -> totalDiscs() > 0)
addId3TextFrame(dst, "DISCNUMBER", QString(src -> disc()) + "/" + src -> totalDiscs());
else
addId3TextFrame(dst, "DISCNUMBER", QString(src -> disc()));
}
Enfin, addId3TextFrame ressemble à ceci (je n'ai pas les images si addID3Images()
est jamais appelé): Mes métadonnées sont composées (pour mon fichier de test actuel) d'artiste d'album, de piste, de genre et d'année. Pour le moment, j'utilise ID3v2Frame::createTextualFrame()
mais j'ai essayé de créer manuellement des cadres de texte en utilisant les identifiants de trames ID3 corrects (TRCK, TCON, etc.)
Voici mon problème. TagLib enregistre une balise ID3 v2.4 qui contient seulement 1 champ - le dernier champ que j'ai défini. Si je réorganise mon code en conséquence, je peux le définir correctement comme Artiste d'Artiste, Piste, Genre ou Année, mais il ne sauvera qu'un seul champ.
Dans le code complet, j'ai une fonction processMP4, qui est très similaire à processID3. Pour les fichiers MP4, toutes les étiquettes sont correctement sauvegardées. Cela m'amène à croire que mon approche est saine.
Des idées que je fais mal?