Constructing an ID3v2::Frame without a file [SOLVED]

Fred Gleason fredg at paravelsystems.com
Fri Aug 9 21:33:36 BST 2019


On Fri, 2019-08-09 at 19:37 +0200, Scott Wheeler wrote:
> Not quite.  You have to parse the header to know how big the tag is,
> so if you want to do that you have to subclass ID3v2::Tag, handle
> parsing the header yourself (by calling ID3v2::Header::setData(...)),
> and then call ID3v2::Tag::parse(...) (protected).

This turned out to be quite simple.

id3tag.h:
*** snip snip ***
#ifndef ID3TAG_H
#define ID3TAG_H

#include <QByteArray>

#include <id3v2tag.h>

class Id3Tag : public TagLib::ID3v2::Tag
{
 public:
  Id3Tag(const QByteArray &data);
};


#endif  // ID3TAG_H
*** snip snip ***

id3tag.cpp:
*** snip snip ***
#include <tbytevector.h>

#include "id3tag.h"

Id3Tag::Id3Tag(const QByteArray &data)
  : TagLib::ID3v2::Tag()
{
  TagLib::ByteVector bytes(data.constData(),data.size());
  header()->setData(bytes.mid(0,10));
  parse(bytes.mid(10));
}
*** snip snip ***

Where 'data' contains the raw bytes of a complete ID3v2 tag [including
header(s) and footer].

THANK YOU to everyone who participated in this thread!

Cheers!


|---------------------------------------------------------------------|
| Frederick F. Gleason, Jr. |             Chief Developer             |
|                           |             Paravel Systems             |
|---------------------------------------------------------------------|
|   There cannot be a crisis next week. My schedule is already full.  |
|                                                                     |
|                                                -- Henry Kissinger   |
|---------------------------------------------------------------------|



More information about the taglib-devel mailing list