TagLib: Implement new field support

Implement the new fields into TagLib, pending contribution to upstream.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-02-17 04:21:32 -08:00
parent c4ed14aa53
commit 03bf4b36fe
14 changed files with 3623 additions and 6 deletions

View file

@ -56,6 +56,8 @@ namespace TagLib {
class TAGLIB_EXPORT Tag : public TagLib::Tag class TAGLIB_EXPORT Tag : public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
/*! /*!
* Create an APE tag with default values. * Create an APE tag with default values.
*/ */
@ -90,20 +92,34 @@ namespace TagLib {
// Reimplementations. // Reimplementations.
String title() const override; String title() const override;
String albumartist() const override;
String artist() const override; String artist() const override;
String composer() const override;
String album() const override; String album() const override;
String unsyncedlyrics() const override;
String comment() const override; String comment() const override;
String genre() const override; String genre() const override;
unsigned int year() const override; unsigned int year() const override;
unsigned int track() const override; unsigned int track() const override;
unsigned int disc() const override;
String cuesheet() const override;
ReplayGain replaygain() const override;
String soundcheck() const override;
void setTitle(const String &s) override; void setTitle(const String &s) override;
void setAlbumArtist(const String &s) override;
void setArtist(const String &s) override; void setArtist(const String &s) override;
void setComposer(const String &s) override;
void setAlbum(const String &s) override; void setAlbum(const String &s) override;
void setUnsyncedLyrics(const String &s) override;
void setComment(const String &s) override; void setComment(const String &s) override;
void setGenre(const String &s) override; void setGenre(const String &s) override;
void setYear(unsigned int i) override; void setYear(unsigned int i) override;
void setTrack(unsigned int i) override; void setTrack(unsigned int i) override;
void setDisc(unsigned int i) override;
void setCuesheet(const String &s) override;
void setReplaygain(ReplayGain r) override;
void setSoundcheck(const String &s) override;
/*! /*!
* Implements the unified tag dictionary interface -- export function. * Implements the unified tag dictionary interface -- export function.

View file

@ -46,6 +46,7 @@ namespace TagLib {
friend class File; friend class File;
public: public:
using TagLib::Tag::ReplayGain;
Tag(); Tag();
@ -59,17 +60,33 @@ namespace TagLib {
*/ */
String title() const override; String title() const override;
/*!
* Returns the album artist name.
*/
String albumartist() const override;
/*! /*!
* Returns the artist name. * Returns the artist name.
*/ */
String artist() const override; String artist() const override;
/*!
* Returns the composer name.
*/
String composer() const override;
/*! /*!
* Returns the album name; if no album name is present in the tag * Returns the album name; if no album name is present in the tag
* an empty string will be returned. * an empty string will be returned.
*/ */
String album() const override; String album() const override;
/*!
* Returns the unsynchronized lyrics; if no unsynced lyrics are
* present in the tag an empty string will be returned.
*/
String unsyncedlyrics() const override;
/*! /*!
* Returns the track comment. * Returns the track comment.
*/ */
@ -103,22 +120,62 @@ namespace TagLib {
*/ */
unsigned int track() const override; unsigned int track() const override;
/*!
* Returns the disc number; if there is no disc number set, this will
* return 0.
*/
unsigned int disc() const override;
/*!
* Returns the embedded cuesheet; currently unimplemented, this will
* always return an empty string.
*/
String cuesheet() const override;
/*!
* Returns the ReplayGain tag; currently unimplemented, will alway
* always return an empty tag.
*/
ReplayGain replaygain() const override;
/*!
* Returns the SoundCheck tag; currently unimplemented, this will
* always return an empty string.
*/
String soundcheck() const override;
/*! /*!
* Sets the title to \a value. * Sets the title to \a value.
*/ */
void setTitle(const String &value) override; void setTitle(const String &value) override;
/*!
* Sets the album artist to \a value.
*/
void setAlbumArtist(const String &value) override;
/*! /*!
* Sets the artist to \a value. * Sets the artist to \a value.
*/ */
void setArtist(const String &value) override; void setArtist(const String &value) override;
/*!
* Sets the composer to \a value.
*/
void setComposer(const String &value) override;
/*! /*!
* Sets the album to \a value. If \a value is an empty string then this value will be * Sets the album to \a value. If \a value is an empty string then this value will be
* cleared. * cleared.
*/ */
void setAlbum(const String &value) override; void setAlbum(const String &value) override;
/*!
* Sets the unsynchronized lyrics to \a value. If \a value is an empty string then
* this value will be cleared.
*/
void setUnsyncedLyrics(const String &value) override;
/*! /*!
* Sets the comment to \a value. * Sets the comment to \a value.
*/ */
@ -149,6 +206,29 @@ namespace TagLib {
*/ */
void setTrack(unsigned int value) override; void setTrack(unsigned int value) override;
/*!
* Sets the disc to \a value. If \a value is 0 then this value will be cleared.
*/
void setDisc(unsigned int value) override;
/*!
* Sets the embedded cuesheet to \a value. Currently unimplemented and does
* nothing.
*/
void setCuesheet(const String &value) override;
/*!
* Sets the ReplayGain tag to \a value. Currently unimplemented and does
* nothing.
*/
void setReplaygain(ReplayGain value) override;
/*!
* Sets the SoundCheck tag to \a value. Currently unimplemented and does
* nothing.
*/
void setSoundcheck(const String &value) override;
/*! /*!
* Returns \c true if the tag does not contain any data. This should be * Returns \c true if the tag does not contain any data. This should be
* reimplemented in subclasses that provide more than the basic tagging * reimplemented in subclasses that provide more than the basic tagging

View file

@ -42,6 +42,7 @@ namespace TagLib {
class TAGLIB_EXPORT Tag : public TagLib::Tag class TAGLIB_EXPORT Tag : public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
Tag(); Tag();
~Tag() override; ~Tag() override;
@ -51,17 +52,32 @@ namespace TagLib {
*/ */
String title() const override; String title() const override;
/*!
* Not supported. Therefore always returns String().
*/
String albumartist() const override;
/*! /*!
* Returns the artist name; if no artist name is present in the tag * Returns the artist name; if no artist name is present in the tag
* String() will be returned. * String() will be returned.
*/ */
String artist() const override; String artist() const override;
/*!
* Not supported. Therefore always returns String().
*/
String composer() const override;
/*! /*!
* Not supported. Therefore always returns String(). * Not supported. Therefore always returns String().
*/ */
String album() const override; String album() const override;
/*!
* Not supported. Therefore always returns String().
*/
String unsyncedlyrics() const override;
/*! /*!
* Not supported. Therefore always returns String(). * Not supported. Therefore always returns String().
*/ */
@ -82,23 +98,58 @@ namespace TagLib {
*/ */
unsigned int track() const override; unsigned int track() const override;
/*!
* Not supported. Therefore always returns 0.
*/
unsigned int disc() const override;
/*!
* Not supported. Therefore always returns String().
*/
String cuesheet() const override;
/*!
* Not supported. Therefore always returns ReplayGain().
*/
ReplayGain replaygain() const override;
/*!
* Not supported. Therefore always returns String().
*/
String soundcheck() const override;
/*! /*!
* Sets the title to \a title. If \a title is String() then this * Sets the title to \a title. If \a title is String() then this
* value will be cleared. * value will be cleared.
*/ */
void setTitle(const String &title) override; void setTitle(const String &title) override;
/*!
* Not supported and therefore ignored.
*/
void setAlbumArtist(const String &albumartist) override;
/*! /*!
* Sets the artist to \a artist. If \a artist is String() then this * Sets the artist to \a artist. If \a artist is String() then this
* value will be cleared. * value will be cleared.
*/ */
void setArtist(const String &artist) override; void setArtist(const String &artist) override;
/*!
* Not supported and therefore ignored.
*/
void setComposer(const String &composer) override;
/*! /*!
* Not supported and therefore ignored. * Not supported and therefore ignored.
*/ */
void setAlbum(const String &album) override; void setAlbum(const String &album) override;
/*!
* Not supported and therefore ignored.
*/
void setUnsyncedLyrics(const String &unsyncedlyrics) override;
/*! /*!
* Not supported and therefore ignored. * Not supported and therefore ignored.
*/ */
@ -119,6 +170,26 @@ namespace TagLib {
*/ */
void setTrack(unsigned int track) override; void setTrack(unsigned int track) override;
/*!
* Not supported and therefore ignored.
*/
void setDisc(unsigned int disc) override;
/*!
* Not supported and therefore ignored.
*/
void setCuesheet(const String &cuesheet) override;
/*!
* Not supported and therefore ignored.
*/
void setReplaygain(ReplayGain replaygain) override;
/*!
* Not supported and therefore ignored.
*/
void setSoundcheck(const String &soundcheck) override;
/*! /*!
* Implements the unified property interface -- export function. * Implements the unified property interface -- export function.
* Since the DIIN tag is very limited, the exported map is as well. * Since the DIIN tag is very limited, the exported map is as well.

View file

@ -114,6 +114,7 @@ namespace TagLib {
class TAGLIB_EXPORT Tag : public TagLib::Tag class TAGLIB_EXPORT Tag : public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
/*! /*!
* Create an ID3v1 tag with default values. * Create an ID3v1 tag with default values.
*/ */
@ -148,20 +149,34 @@ namespace TagLib {
// Reimplementations. // Reimplementations.
String title() const override; String title() const override;
String albumartist() const override;
String artist() const override; String artist() const override;
String composer() const override;
String album() const override; String album() const override;
String unsyncedlyrics() const override;
String comment() const override; String comment() const override;
String genre() const override; String genre() const override;
unsigned int year() const override; unsigned int year() const override;
unsigned int track() const override; unsigned int track() const override;
unsigned int disc() const override;
String cuesheet() const override;
ReplayGain replaygain() const override;
String soundcheck() const override;
void setTitle(const String &s) override; void setTitle(const String &s) override;
void setAlbumArtist(const String &s) override;
void setArtist(const String &s) override; void setArtist(const String &s) override;
void setComposer(const String &s) override;
void setAlbum(const String &s) override; void setAlbum(const String &s) override;
void setUnsyncedLyrics(const String &s) override;
void setComment(const String &s) override; void setComment(const String &s) override;
void setGenre(const String &s) override; void setGenre(const String &s) override;
void setYear(unsigned int i) override; void setYear(unsigned int i) override;
void setTrack(unsigned int i) override; void setTrack(unsigned int i) override;
void setDisc(unsigned int i) override;
void setCuesheet(const String &s) override;
void setReplaygain(ReplayGain r) override;
void setSoundcheck(const String &s) override;
/*! /*!
* Returns the genre in number. * Returns the genre in number.

View file

@ -133,6 +133,7 @@ namespace TagLib {
class TAGLIB_EXPORT Tag : public TagLib::Tag class TAGLIB_EXPORT Tag : public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
/*! /*!
* Constructs an empty ID3v2 tag. * Constructs an empty ID3v2 tag.
* *
@ -166,20 +167,34 @@ namespace TagLib {
// Reimplementations. // Reimplementations.
String title() const override; String title() const override;
String albumartist() const override;
String artist() const override; String artist() const override;
String composer() const override;
String album() const override; String album() const override;
String unsyncedlyrics() const override;
String comment() const override; String comment() const override;
String genre() const override; String genre() const override;
unsigned int year() const override; unsigned int year() const override;
unsigned int track() const override; unsigned int track() const override;
unsigned int disc() const override;
String cuesheet() const override;
ReplayGain replaygain() const override;
String soundcheck() const override;
void setTitle(const String &s) override; void setTitle(const String &s) override;
void setAlbumArtist(const String &s) override;
void setArtist(const String &s) override; void setArtist(const String &s) override;
void setComposer(const String &s) override;
void setAlbum(const String &s) override; void setAlbum(const String &s) override;
void setUnsyncedLyrics(const String &s) override;
void setComment(const String &s) override; void setComment(const String &s) override;
void setGenre(const String &s) override; void setGenre(const String &s) override;
void setYear(unsigned int i) override; void setYear(unsigned int i) override;
void setTrack(unsigned int i) override; void setTrack(unsigned int i) override;
void setDisc(unsigned int i) override;
void setCuesheet(const String &s) override;
void setReplaygain(ReplayGain r) override;
void setSoundcheck(const String &s) override;
bool isEmpty() const override; bool isEmpty() const override;

View file

@ -95,6 +95,7 @@ namespace TagLib {
class TAGLIB_EXPORT Tag : public TagLib::Tag class TAGLIB_EXPORT Tag : public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
/*! /*!
* Constructs an empty INFO tag. * Constructs an empty INFO tag.
*/ */
@ -113,20 +114,34 @@ namespace TagLib {
// Reimplementations // Reimplementations
String title() const override; String title() const override;
String albumartist() const override;
String artist() const override; String artist() const override;
String composer() const override;
String album() const override; String album() const override;
String unsyncedlyrics() const override;
String comment() const override; String comment() const override;
String genre() const override; String genre() const override;
unsigned int year() const override; unsigned int year() const override;
unsigned int track() const override; unsigned int track() const override;
unsigned int disc() const override;
String cuesheet() const override;
ReplayGain replaygain() const override;
String soundcheck() const override;
void setTitle(const String &s) override; void setTitle(const String &s) override;
void setAlbumArtist(const String &s) override;
void setArtist(const String &s) override; void setArtist(const String &s) override;
void setComposer(const String &s) override;
void setAlbum(const String &s) override; void setAlbum(const String &s) override;
void setUnsyncedLyrics(const String &s) override;
void setComment(const String &s) override; void setComment(const String &s) override;
void setGenre(const String &s) override; void setGenre(const String &s) override;
void setYear(unsigned int i) override; void setYear(unsigned int i) override;
void setTrack(unsigned int i) override; void setTrack(unsigned int i) override;
void setDisc(unsigned int i) override;
void setCuesheet(const String &s) override;
void setReplaygain(ReplayGain r) override;
void setSoundcheck(const String &s) override;
bool isEmpty() const override; bool isEmpty() const override;

View file

@ -48,6 +48,8 @@ namespace TagLib {
class TAGLIB_EXPORT Tag : public TagLib::Tag class TAGLIB_EXPORT Tag : public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
Tag(); Tag();
~Tag() override; ~Tag() override;
@ -60,16 +62,31 @@ namespace TagLib {
*/ */
String title() const override; String title() const override;
/*!
* Not supported by module files. Therefore always returns an empty string.
*/
String albumartist() const override;
/*! /*!
* Not supported by module files. Therefore always returns an empty string. * Not supported by module files. Therefore always returns an empty string.
*/ */
String artist() const override; String artist() const override;
/*!
* Not supported by module files. Therefore always returns an empty string.
*/
String composer() const override;
/*! /*!
* Not supported by module files. Therefore always returns an empty string. * Not supported by module files. Therefore always returns an empty string.
*/ */
String album() const override; String album() const override;
/*!
* Not supported by module files. Therefore always returns an empty string.
*/
String unsyncedlyrics() const override;
/*! /*!
* Returns the track comment derived from the instrument/sample/pattern * Returns the track comment derived from the instrument/sample/pattern
* names; if no comment is present in the tag an empty string will be * names; if no comment is present in the tag an empty string will be
@ -92,6 +109,26 @@ namespace TagLib {
*/ */
unsigned int track() const override; unsigned int track() const override;
/*!
* Not supported by module files. Therefore always returns 0.
*/
unsigned int disc() const override;
/*!
* Not supported by module files. Therefore always returns an empty string.
*/
String cuesheet() const override;
/*!
* Not supported by module files. Therefore always returns an empty tag.
*/
ReplayGain replaygain() const override;
/*!
* Not supported by module files. Therefore always returns an empty string.
*/
String soundcheck() const override;
/*! /*!
* Returns the name of the tracker used to create/edit the module file. * Returns the name of the tracker used to create/edit the module file.
* Only XM files store this tag to the file as such, for other formats * Only XM files store this tag to the file as such, for other formats
@ -111,16 +148,31 @@ namespace TagLib {
*/ */
void setTitle(const String &title) override; void setTitle(const String &title) override;
/*!
* Not supported by module files and therefore ignored.
*/
void setAlbumArtist(const String &albumartist) override;
/*! /*!
* Not supported by module files and therefore ignored. * Not supported by module files and therefore ignored.
*/ */
void setArtist(const String &artist) override; void setArtist(const String &artist) override;
/*!
* Not supported by module files and therefore ignored.
*/
void setComposer(const String &composer) override;
/*! /*!
* Not supported by module files and therefore ignored. * Not supported by module files and therefore ignored.
*/ */
void setAlbum(const String &album) override; void setAlbum(const String &album) override;
/*!
* Not supported by module files and therefore ignored.
*/
void setUnsyncedLyrics(const String &unsyncedlyrics) override;
/*! /*!
* Sets the comment to \a comment. If \a comment is an empty string then * Sets the comment to \a comment. If \a comment is an empty string then
* this value will be cleared. * this value will be cleared.
@ -155,6 +207,26 @@ namespace TagLib {
*/ */
void setTrack(unsigned int track) override; void setTrack(unsigned int track) override;
/*!
* Not supported by module files and therefore ignored.
*/
void setDisc(unsigned int disc) override;
/*!
* Not supported by module files and therefore ignored.
*/
void setCuesheet(const String &cuesheet) override;
/*!
* Not supported by module files and therefore ignored.
*/
void setReplaygain(ReplayGain r) override;
/*!
* Not supported by module files and therefore ignored.
*/
void setSoundcheck(const String &soundcheck) override;
/*! /*!
* Sets the tracker name to \a trackerName. If \a trackerName is * Sets the tracker name to \a trackerName. If \a trackerName is
* an empty string then this value will be cleared. * an empty string then this value will be cleared.

View file

@ -43,6 +43,7 @@ namespace TagLib {
class TAGLIB_EXPORT Tag: public TagLib::Tag class TAGLIB_EXPORT Tag: public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
Tag(); Tag();
Tag(TagLib::File *file, Atoms *atoms, Tag(TagLib::File *file, Atoms *atoms,
const ItemFactory *factory = nullptr); const ItemFactory *factory = nullptr);
@ -52,20 +53,34 @@ namespace TagLib {
bool save(); bool save();
String title() const override; String title() const override;
String albumartist() const override;
String artist() const override; String artist() const override;
String composer() const override;
String album() const override; String album() const override;
String unsyncedlyrics() const override;
String comment() const override; String comment() const override;
String genre() const override; String genre() const override;
unsigned int year() const override; unsigned int year() const override;
unsigned int track() const override; unsigned int track() const override;
unsigned int disc() const override;
String cuesheet() const override;
ReplayGain replaygain() const override;
String soundcheck() const override;
void setTitle(const String &value) override; void setTitle(const String &value) override;
void setAlbumArtist(const String &value) override;
void setArtist(const String &value) override; void setArtist(const String &value) override;
void setComposer(const String &value) override;
void setAlbum(const String &value) override; void setAlbum(const String &value) override;
void setUnsyncedLyrics(const String &value) override;
void setComment(const String &value) override; void setComment(const String &value) override;
void setGenre(const String &value) override; void setGenre(const String &value) override;
void setYear(unsigned int value) override; void setYear(unsigned int value) override;
void setTrack(unsigned int value) override; void setTrack(unsigned int value) override;
void setDisc(unsigned int value) override;
void setCuesheet(const String &value) override;
void setReplaygain(ReplayGain value) override;
void setSoundcheck(const String &value) override;
bool isEmpty() const override; bool isEmpty() const override;

View file

@ -48,6 +48,50 @@ namespace TagLib {
class TAGLIB_EXPORT Tag class TAGLIB_EXPORT Tag
{ {
public: public:
class ReplayGain {
protected:
bool _equals(const ReplayGain &) const;
public:
ReplayGain();
ReplayGain &operator=(const ReplayGain &);
bool operator==(const ReplayGain &) const;
bool operator!=(const ReplayGain &) const;
bool isEmpty() const;
bool albumGainSet() const;
bool albumPeakSet() const;
bool trackGainSet() const;
bool trackPeakSet() const;
float albumGain() const;
float albumPeak() const;
float trackGain() const;
float trackPeak() const;
void setAlbumGain(float f);
void setAlbumPeak(float f);
void setTrackGain(float f);
void setTrackPeak(float f);
void clear();
void clearAlbumGain();
void clearAlbumPeak();
void clearTrackGain();
void clearTrackPeak();
private:
bool albumgainSet;
bool albumpeakSet;
bool trackgainSet;
bool trackpeakSet;
float albumgain;
float albumpeak;
float trackgain;
float trackpeak;
};
/*! /*!
* Destroys this Tag instance. * Destroys this Tag instance.
@ -129,18 +173,36 @@ namespace TagLib {
*/ */
virtual String title() const = 0; virtual String title() const = 0;
/*!
* Returns the album artist name; if no album artist name is present
* in the tag an empty string will be returned.
*/
virtual String albumartist() const = 0;
/*! /*!
* Returns the artist name; if no artist name is present in the tag * Returns the artist name; if no artist name is present in the tag
* an empty string will be returned. * an empty string will be returned.
*/ */
virtual String artist() const = 0; virtual String artist() const = 0;
/*!
* Returns the composer name; if no composer name is present in the
* tag an empty string will be returned.
*/
virtual String composer() const = 0;
/*! /*!
* Returns the album name; if no album name is present in the tag * Returns the album name; if no album name is present in the tag
* an empty string will be returned. * an empty string will be returned.
*/ */
virtual String album() const = 0; virtual String album() const = 0;
/*!
* Returns the unsynchronized lyrics; if no unsynced lyrics are
* present in the tag an empty string will be returned.
*/
virtual String unsyncedlyrics() const = 0;
/*! /*!
* Returns the track comment; if no comment is present in the tag * Returns the track comment; if no comment is present in the tag
* an empty string will be returned. * an empty string will be returned.
@ -164,24 +226,65 @@ namespace TagLib {
*/ */
virtual unsigned int track() const = 0; virtual unsigned int track() const = 0;
/*!
* Returns the disc number; if there is no disc number set, this will
* return 0.
*/
virtual unsigned int disc() const = 0;
/*!
* Returns the embedded cue sheet; if there is no embedded cue sheet set,
* this will return an empty string.
*/
virtual String cuesheet() const = 0;
/*!
* Returns the ReplayGain tags; if there are no tags set then it will be
* marked empty.
*/
virtual ReplayGain replaygain() const = 0;
/*!
* Returns the SoundCheck tag; if there is no SoundCheck tag set then this
* will return an empty string.
*/
virtual String soundcheck() const = 0;
/*! /*!
* Sets the title to \a s. If \a s is an empty string then this value will be * Sets the title to \a s. If \a s is an empty string then this value will be
* cleared. * cleared.
*/ */
virtual void setTitle(const String &s) = 0; virtual void setTitle(const String &s) = 0;
/*!
* Sets the album artist to \a s. If \a s is an empty string then this value
* will be cleared. */
virtual void setAlbumArtist(const String &s) = 0;
/*! /*!
* Sets the artist to \a s. If \a s is an empty string then this value will be * Sets the artist to \a s. If \a s is an empty string then this value will be
* cleared. * cleared.
*/ */
virtual void setArtist(const String &s) = 0; virtual void setArtist(const String &s) = 0;
/*!
* Sets the composer to \a s. If \a s is an empty string then this value will
* be cleared.
*/
virtual void setComposer(const String &s) = 0;
/*! /*!
* Sets the album to \a s. If \a s is an empty string then this value will be * Sets the album to \a s. If \a s is an empty string then this value will be
* cleared. * cleared.
*/ */
virtual void setAlbum(const String &s) = 0; virtual void setAlbum(const String &s) = 0;
/*!
* Sets the unsynchronized lyrics to \a s. If \a s is an empty string then this
* value will be cleared.
*/
virtual void setUnsyncedLyrics(const String &s) = 0;
/*! /*!
* Sets the comment to \a s. If \a s is an empty string then this value will be * Sets the comment to \a s. If \a s is an empty string then this value will be
* cleared. * cleared.
@ -198,15 +301,38 @@ namespace TagLib {
virtual void setGenre(const String &s) = 0; virtual void setGenre(const String &s) = 0;
/*! /*!
* Sets the year to \a i. If \a s is 0 then this value will be cleared. * Sets the year to \a i. If \a i is 0 then this value will be cleared.
*/ */
virtual void setYear(unsigned int i) = 0; virtual void setYear(unsigned int i) = 0;
/*! /*!
* Sets the track to \a i. If \a s is 0 then this value will be cleared. * Sets the track to \a i. If \a i is 0 then this value will be cleared.
*/ */
virtual void setTrack(unsigned int i) = 0; virtual void setTrack(unsigned int i) = 0;
/*!
* Sets the disc to \a i. If \a i is 0 then this value will be cleared.
*/
virtual void setDisc(unsigned int i) = 0;
/*!
* Sets the embedded cue sheet to \a s. If \a s is an empty string then
* this value will be cleared.
*/
virtual void setCuesheet(const String &s) = 0;
/*!
* Sets the ReplayGain tag to \a t. If any fields are marked as empty
* then they will be cleared.
*/
virtual void setReplaygain(ReplayGain replaygain) = 0;
/*!
* Sets the SoundCheck tag to \a s. If \a s is an empty string then this
* value will be cleared.
*/
virtual void setSoundcheck(const String &s) = 0;
/*! /*!
* Returns \c true if the tag does not contain any data. This should be * Returns \c true if the tag does not contain any data. This should be
* reimplemented in subclasses that provide more than the basic tagging * reimplemented in subclasses that provide more than the basic tagging
@ -242,6 +368,12 @@ namespace TagLib {
*/ */
Tag(); Tag();
/*!
* Internal ReplayGain tag state. This is protected since subclasses should
* be able to manipulate it freely.
*/
ReplayGain rg;
private: private:
class TagPrivate; class TagPrivate;
TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE TAGLIB_MSVC_SUPPRESS_WARNING_NEEDS_TO_HAVE_DLL_INTERFACE

View file

@ -357,7 +357,16 @@ namespace TagLib {
* \c true and returns the integer. Otherwise it sets \a *ok to \c false * \c true and returns the integer. Otherwise it sets \a *ok to \c false
* and the result is undefined. * and the result is undefined.
*/ */
int toInt(bool *ok = nullptr) const; int toInt(bool *ok = nullptr, int base = 10) const;
/*!
* Convert the string to a float.
*
* If the conversion was successful, it sets the value of \a *ok to
* \c true and returns the float. Otherwise it sets \a *ok to \c false
* and the result is undefined.
*/
float toFloat(bool *ok = nullptr) const;
/*! /*!
* Returns a string with the leading and trailing whitespace stripped. * Returns a string with the leading and trailing whitespace stripped.

View file

@ -70,6 +70,7 @@ namespace TagLib {
class TAGLIB_EXPORT XiphComment : public TagLib::Tag class TAGLIB_EXPORT XiphComment : public TagLib::Tag
{ {
public: public:
using TagLib::Tag::ReplayGain;
/*! /*!
* Constructs an empty Vorbis comment. * Constructs an empty Vorbis comment.
*/ */
@ -89,20 +90,34 @@ namespace TagLib {
XiphComment &operator=(const XiphComment &) = delete; XiphComment &operator=(const XiphComment &) = delete;
String title() const override; String title() const override;
String albumartist() const override;
String artist() const override; String artist() const override;
String composer() const override;
String album() const override; String album() const override;
String unsyncedlyrics() const override;
String comment() const override; String comment() const override;
String genre() const override; String genre() const override;
unsigned int year() const override; unsigned int year() const override;
unsigned int track() const override; unsigned int track() const override;
unsigned int disc() const override;
String cuesheet() const override;
ReplayGain replaygain() const override;
String soundcheck() const override;
void setTitle(const String &s) override; void setTitle(const String &s) override;
void setAlbumArtist(const String &s) override;
void setArtist(const String &s) override; void setArtist(const String &s) override;
void setComposer(const String &s) override;
void setAlbum(const String &s) override; void setAlbum(const String &s) override;
void setUnsyncedLyrics(const String &s) override;
void setComment(const String &s) override; void setComment(const String &s) override;
void setGenre(const String &s) override; void setGenre(const String &s) override;
void setYear(unsigned int i) override; void setYear(unsigned int i) override;
void setTrack(unsigned int i) override; void setTrack(unsigned int i) override;
void setDisc(unsigned int i) override;
void setCuesheet(const String &s) override;
void setReplaygain(ReplayGain r) override;
void setSoundcheck(const String &s) override;
bool isEmpty() const override; bool isEmpty() const override;

View file

@ -9,11 +9,11 @@
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string></string> <string></string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>org.taglib.tag</string> <string></string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>tag</string> <string></string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
@ -21,7 +21,7 @@
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string></string> <string></string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>2.0.2</string> <string></string>
<key>CSResourcesFileMapped</key> <key>CSResourcesFileMapped</key>
<true/> <true/>
</dict> </dict>

3162
ThirdParty/Frameworks/taglib.patch vendored Normal file

File diff suppressed because it is too large Load diff