diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f3a3d31 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "taglib"] + path = taglib + url = git@github.com:taglib/taglib.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..51e5998 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.14) + +project(ncmdump LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_BUILD_TYPE Release) + +option(BUILD_WIN32_STATIC "Build the program statically on Windows" ON) + +FILE(GLOB HEADERS ./*.h) +FILE(GLOB SOURCES ./*.cpp) +add_executable(ncmdump + ${HEADERS} + ${SOURCES} +) +add_subdirectory(taglib) +target_link_libraries(ncmdump tag) +target_include_directories(ncmdump PRIVATE taglib) +target_include_directories(ncmdump PRIVATE taglib/taglib) +target_include_directories(ncmdump PRIVATE taglib/taglib/toolkit) +target_include_directories(ncmdump PRIVATE taglib/taglib/mpeg/id3v2) + +if(WIN32) + if(CMAKE_COMPILER_IS_GNUCXX) + target_link_options(ncmdump PRIVATE -O2 -municode) + if(BUILD_WIN32_STATIC) + target_link_options(ncmdump PRIVATE -static) + endif() + endif() +endif() + +include(GNUInstallDirs) +install(TARGETS ncmdump + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) diff --git a/ncmcrypt.cpp b/ncmcrypt.cpp index 2be1fc8..0f629c0 100644 --- a/ncmcrypt.cpp +++ b/ncmcrypt.cpp @@ -4,11 +4,12 @@ #include "cJSON.h" #define TAGLIB_STATIC -#include -#include -#include -#include -#include +#include "taglib/toolkit/tfile.h" +#include "taglib/mpeg/mpegfile.h" +#include "taglib/flac/flacfile.h" +#include "taglib/mpeg/id3v2/frames/attachedpictureframe.h" +#include "taglib/mpeg/id3v2/id3v2tag.h" +#include "taglib/tag.h" #include #include diff --git a/taglib b/taglib new file mode 160000 index 0000000..0896fb9 --- /dev/null +++ b/taglib @@ -0,0 +1 @@ +Subproject commit 0896fb90920c125e55248360d271d1a1674e2a4d diff --git a/taglib/bin/taglib-config.cmd b/taglib/bin/taglib-config.cmd deleted file mode 100644 index bec5277..0000000 --- a/taglib/bin/taglib-config.cmd +++ /dev/null @@ -1,36 +0,0 @@ -@echo off -goto beginning - * - * It is what it is, you can do with it as you please. - * - * Just don't blame me if it teaches your computer to smoke! - * - * -Enjoy - * fh :)_~ - * -:beginning -if /i "%1#" == "--libs#" goto doit -if /i "%1#" == "--cflags#" goto doit -if /i "%1#" == "--version#" goto doit -if /i "%1#" == "--prefix#" goto doit - -echo "usage: %0 [OPTIONS]" -echo [--libs] -echo [--cflags] -echo [--version] -echo [--prefix] -goto theend - - * - * NOTE: Windows does not assume libraries are prefixed with 'lib'. - * NOTE: If '-llibtag' is the last element, it is easily appended in the users installation/makefile process - * to allow for static, shared or debug builds. - * It would be preferable if the top level CMakeLists.txt provided the library name during config. ?? -:doit -if /i "%1#" == "--libs#" echo -LC:/Users/TaurusXin/Downloads/ncmdump/taglib/lib -llibtag -if /i "%1#" == "--cflags#" echo -IC:/Users/TaurusXin/Downloads/ncmdump/taglib/include -IC:/Users/TaurusXin/Downloads/ncmdump/taglib/include/taglib -if /i "%1#" == "--version#" echo 1.13.1 -if /i "%1#" == "--prefix#" echo C:/Users/TaurusXin/Downloads/ncmdump/taglib - -:theend - diff --git a/taglib/include/taglib/aifffile.h b/taglib/include/taglib/aifffile.h deleted file mode 100644 index 1e2d9d5..0000000 --- a/taglib/include/taglib/aifffile.h +++ /dev/null @@ -1,157 +0,0 @@ -/*************************************************************************** - copyright : (C) 2008 by Scott Wheeler - email : wheeler@kde.org -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_AIFFFILE_H -#define TAGLIB_AIFFFILE_H - -#include "rifffile.h" -#include "id3v2tag.h" -#include "aiffproperties.h" - -namespace TagLib { - - namespace RIFF { - - //! An implementation of AIFF metadata - - /*! - * This is implementation of AIFF metadata. - * - * This supports an ID3v2 tag as well as reading stream from the ID3 RIFF - * chunk as well as properties from the file. - */ - - namespace AIFF { - - //! An implementation of TagLib::File with AIFF specific methods - - /*! - * This implements and provides an interface for AIFF files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to AIFF files. - */ - - class TAGLIB_EXPORT File : public TagLib::RIFF::File - { - public: - /*! - * Constructs an AIFF file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an AIFF file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the Tag for this file. - * - * \note This always returns a valid pointer regardless of whether or not - * the file on disk has an ID3v2 tag. Use hasID3v2Tag() to check if the file - * on disk actually has an ID3v2 tag. - * - * \see hasID3v2Tag() - */ - virtual ID3v2::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * This method forwards to ID3v2::Tag::properties(). - */ - PropertyMap properties() const; - - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - * This method forwards to ID3v2::Tag::setProperties(). - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the AIFF::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Saves the file. - */ - virtual bool save(); - - /*! - * Save using a specific ID3v2 version (e.g. v3) - */ - bool save(ID3v2::Version version); - - /*! - * Returns whether or not the file on disk actually has an ID3v2 tag. - * - * \see ID3v2Tag() - */ - bool hasID3v2Tag() const; - - /*! - * Check if the given \a stream can be opened as an AIFF file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - friend class Properties; - - class FilePrivate; - FilePrivate *d; - }; - } // namespace AIFF - } // namespace RIFF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/aiffproperties.h b/taglib/include/taglib/aiffproperties.h deleted file mode 100644 index 0324b85..0000000 --- a/taglib/include/taglib/aiffproperties.h +++ /dev/null @@ -1,166 +0,0 @@ -/*************************************************************************** - copyright : (C) 2008 by Scott Wheeler - email : wheeler@kde.org -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_AIFFPROPERTIES_H -#define TAGLIB_AIFFPROPERTIES_H - -#include "audioproperties.h" - -namespace TagLib { - - namespace RIFF { - - namespace AIFF { - - class File; - - //! An implementation of audio property reading for AIFF - - /*! - * This reads the data from an AIFF stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of AIFF::Properties with the data read from the - * ByteVector \a data. - * - * \deprecated Use Properties(File *, ReadStyle). - */ - TAGLIB_DEPRECATED Properties(const ByteVector &data, ReadStyle style); - - /*! - * Create an instance of AIFF::Properties with the data read from the - * AIFF::File \a file. - */ - Properties(File *file, ReadStyle style); - - /*! - * Destroys this AIFF::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample. - */ - int bitsPerSample() const; - - /*! - * Returns the number of bits per audio sample. - * - * \note This method is just an alias of bitsPerSample(). - * - * \deprecated Use bitsPerSample(). - */ - TAGLIB_DEPRECATED int sampleWidth() const; - - /*! - * Returns the number of sample frames - */ - unsigned int sampleFrames() const; - - /*! - * Returns true if the file is in AIFF-C format, false if AIFF format. - */ - bool isAiffC() const; - - /*! - * Returns the compression type of the AIFF-C file. For example, "NONE" for - * not compressed, "ACE2" for ACE 2-to-1. - * - * If the file is in AIFF format, always returns an empty vector. - * - * \see isAiffC() - */ - ByteVector compressionType() const; - - /*! - * Returns the concrete compression name of the AIFF-C file. - * - * If the file is in AIFF format, always returns an empty string. - * - * \see isAiffC() - */ - String compressionName() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace AIFF - } // namespace RIFF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/apefile.h b/taglib/include/taglib/apefile.h deleted file mode 100644 index 754e05f..0000000 --- a/taglib/include/taglib/apefile.h +++ /dev/null @@ -1,235 +0,0 @@ -/*************************************************************************** - copyright : (C) 2010 by Alex Novichkov - email : novichko@atnet.ru - - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - (original WavPack implementation) - - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - (original MPC implementation) - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_APEFILE_H -#define TAGLIB_APEFILE_H - -#include "tfile.h" -#include "taglib_export.h" -#include "apeproperties.h" - -namespace TagLib { - - class Tag; - - namespace ID3v1 { class Tag; } - namespace APE { class Tag; } - - //! An implementation of APE metadata - - /*! - * This is implementation of APE metadata. - * - * This supports ID3v1 and APE (v1 and v2) style comments as well as reading stream - * properties from the file. - */ - - namespace APE { - - //! An implementation of TagLib::File with APE specific methods - - /*! - * This implements and provides an interface for APE files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to APE files. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * This set of flags is used for various operations and is suitable for - * being OR-ed together. - */ - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches ID3v1 tags. - ID3v1 = 0x0001, - //! Matches APE tags. - APE = 0x0002, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs an APE file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an APE file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the Tag for this file. This will be an APE tag, an ID3v1 tag - * or a combination of the two. - */ - virtual TagLib::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * If the file contains both an APE and an ID3v1 tag, only APE - * will be converted to the PropertyMap. - */ - PropertyMap properties() const; - - /*! - * Removes unsupported properties. Forwards to the actual Tag's - * removeUnsupportedProperties() function. - */ - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - * Creates an APEv2 tag if necessary. A potentially existing ID3v1 - * tag will be updated as well. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the APE::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Saves the file. - * - * \note According to the official Monkey's Audio SDK, an APE file - * can only have either ID3V1 or APE tags, so a parameter is used here. - */ - virtual bool save(); - - /*! - * Returns a pointer to the ID3v1 tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid ID3v1 tag. If \a create is true it will create - * an ID3v1 tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v1 tag. Use hasID3v1Tag() to check if the file - * on disk actually has an ID3v1 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v1Tag() - */ - ID3v1::Tag *ID3v1Tag(bool create = false); - - /*! - * Returns a pointer to the APE tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid APE tag. If \a create is true it will create - * an APE tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an APE tag. Use hasAPETag() to check if the file - * on disk actually has an APE tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasAPETag() - */ - APE::Tag *APETag(bool create = false); - - /*! - * This will remove the tags that match the OR-ed together TagTypes from the - * file. By default it removes all tags. - * - * \note This will also invalidate pointers to the tags - * as their memory will be freed. - * \note In order to make the removal permanent save() still needs to be called - */ - void strip(int tags = AllTags); - - /*! - * Returns whether or not the file on disk actually has an APE tag. - * - * \see APETag() - */ - bool hasAPETag() const; - - /*! - * Returns whether or not the file on disk actually has an ID3v1 tag. - * - * \see ID3v1Tag() - */ - bool hasID3v1Tag() const; - - /*! - * Returns whether or not the given \a stream can be opened as an APE - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace APE -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/apefooter.h b/taglib/include/taglib/apefooter.h deleted file mode 100644 index 38d83a3..0000000 --- a/taglib/include/taglib/apefooter.h +++ /dev/null @@ -1,173 +0,0 @@ -/*************************************************************************** - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_APEFOOTER_H -#define TAGLIB_APEFOOTER_H - -#include "tbytevector.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace APE { - - //! An implementation of APE footers - - /*! - * This class implements APE footers (and headers). It attempts to follow, both - * semantically and programmatically, the structure specified in - * the APE v2.0 standard. The API is based on the properties of APE footer and - * headers specified there. - */ - - class TAGLIB_EXPORT Footer - { - public: - /*! - * Constructs an empty APE footer. - */ - Footer(); - - /*! - * Constructs an APE footer based on \a data. parse() is called - * immediately. - */ - Footer(const ByteVector &data); - - /*! - * Destroys the footer. - */ - virtual ~Footer(); - - /*! - * Returns the version number. (Note: This is the 1000 or 2000.) - */ - unsigned int version() const; - - /*! - * Returns true if a header is present in the tag. - */ - bool headerPresent() const; - - /*! - * Returns true if a footer is present in the tag. - */ - bool footerPresent() const; - - /*! - * Returns true this is actually the header. - */ - bool isHeader() const; - - /*! - * Sets whether the header should be rendered or not - */ - void setHeaderPresent(bool b) const; - - /*! - * Returns the number of items in the tag. - */ - unsigned int itemCount() const; - - /*! - * Set the item count to \a s. - * \see itemCount() - */ - void setItemCount(unsigned int s); - - /*! - * Returns the tag size in bytes. This is the size of the frame content and footer. - * The size of the \e entire tag will be this plus the header size, if present. - * - * \see completeTagSize() - */ - unsigned int tagSize() const; - - /*! - * Returns the tag size, including if present, the header - * size. - * - * \see tagSize() - */ - unsigned int completeTagSize() const; - - /*! - * Set the tag size to \a s. - * \see tagSize() - */ - void setTagSize(unsigned int s); - - /*! - * Returns the size of the footer. Presently this is always 32 bytes. - */ - static unsigned int size(); - - /*! - * Returns the string used to identify an APE tag inside of a file. - * Presently this is always "APETAGEX". - */ - static ByteVector fileIdentifier(); - - /*! - * Sets the data that will be used as the footer. 32 bytes, - * starting from \a data will be used. - */ - void setData(const ByteVector &data); - - /*! - * Renders the footer back to binary format. - */ - ByteVector renderFooter() const; - - /*! - * Renders the header corresponding to the footer. If headerPresent is - * set to false, it returns an empty ByteVector. - */ - ByteVector renderHeader() const; - - protected: - /*! - * Called by setData() to parse the footer data. It makes this information - * available through the public API. - */ - void parse(const ByteVector &data); - - /*! - * Called by renderFooter and renderHeader - */ - ByteVector render(bool isHeader) const; - - private: - Footer(const Footer &); - Footer &operator=(const Footer &); - - class FooterPrivate; - FooterPrivate *d; - }; - - } // namespace APE -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/apeitem.h b/taglib/include/taglib/apeitem.h deleted file mode 100644 index 2445b50..0000000 --- a/taglib/include/taglib/apeitem.h +++ /dev/null @@ -1,219 +0,0 @@ -/*************************************************************************** - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_APEITEM_H -#define TAGLIB_APEITEM_H - -#include "tbytevector.h" -#include "tstring.h" -#include "tstringlist.h" - -namespace TagLib { - namespace APE { - //! An implementation of APE-items - - /*! - * This class provides the features of items in the APEv2 standard. - */ - class TAGLIB_EXPORT Item - { - public: - /*! - * Enum of types an Item can have. The value of 3 is reserved. - */ - enum ItemTypes { - //! Item contains text information coded in UTF-8 - Text = 0, - //! Item contains binary information - Binary = 1, - //! Item is a locator of external stored information - Locator = 2 - }; - /*! - * Constructs an empty item. - */ - Item(); - - /*! - * Constructs a text item with \a key and \a value. - */ - // BIC: Remove this, StringList has a constructor from a single string - Item(const String &key, const String &value); - - /*! - * Constructs a text item with \a key and \a values. - */ - Item(const String &key, const StringList &values); - - /*! - * Constructs an item with \a key and \a value. - * If \a binary is true a Binary item will be created, otherwise \a value will be interpreted as text - */ - Item(const String &key, const ByteVector &value, bool binary); - - /*! - * Construct an item as a copy of \a item. - */ - Item(const Item &item); - - /*! - * Destroys the item. - */ - virtual ~Item(); - - /*! - * Copies the contents of \a item into this item. - */ - Item &operator=(const Item &item); - - /*! - * Exchanges the content of this item by the content of \a item. - */ - void swap(Item &item); - - /*! - * Returns the key. - */ - String key() const; - - /*! - * Returns the binary value. - * If the item type is not \a Binary, always returns an empty ByteVector. - */ - ByteVector binaryData() const; - - /*! - * Set the binary value to \a value - * The item's type will also be set to \a Binary - */ - void setBinaryData(const ByteVector &value); - -#ifndef DO_NOT_DOCUMENT - /* Remove in next binary incompatible release */ - ByteVector value() const; -#endif - - /*! - * Sets the key for the item to \a key. - */ - void setKey(const String &key); - - /*! - * Sets the text value of the item to \a value and clears any previous contents. - * - * \see toString() - */ - void setValue(const String &value); - - /*! - * Sets the text value of the item to the list of values in \a value and clears - * any previous contents. - * - * \see toStringList() - */ - void setValues(const StringList &values); - - /*! - * Appends \a value to create (or extend) the current list of text values. - * - * \see toString() - */ - void appendValue(const String &value); - - /*! - * Appends \a values to extend the current list of text values. - * - * \see toStringList() - */ - void appendValues(const StringList &values); - - /*! - * Returns the size of the full item. - */ - int size() const; - - /*! - * Returns the value as a single string. In case of multiple strings, - * the first is returned. If the data type is not \a Text, always returns - * an empty String. - */ - String toString() const; - -#ifndef DO_NOT_DOCUMENT - /* Remove in next binary incompatible release */ - StringList toStringList() const; -#endif - - /*! - * Returns the list of text values. If the data type is not \a Text, always - * returns an empty StringList. - */ - StringList values() const; - - /*! - * Render the item to a ByteVector. - */ - ByteVector render() const; - - /*! - * Parse the item from the ByteVector \a data. - */ - void parse(const ByteVector& data); - - /*! - * Set the item to read-only. - */ - void setReadOnly(bool readOnly); - - /*! - * Return true if the item is read-only. - */ - bool isReadOnly() const; - - /*! - * Sets the type of the item to \a type. - * - * \see ItemTypes - */ - void setType(ItemTypes type); - - /*! - * Returns the type of the item. - */ - ItemTypes type() const; - - /*! - * Returns if the item has any real content. - */ - bool isEmpty() const; - - private: - class ItemPrivate; - ItemPrivate *d; - }; - } // namespace APE -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/apeproperties.h b/taglib/include/taglib/apeproperties.h deleted file mode 100644 index 8c67481..0000000 --- a/taglib/include/taglib/apeproperties.h +++ /dev/null @@ -1,143 +0,0 @@ -/*************************************************************************** - copyright : (C) 2010 by Alex Novichkov - email : novichko@atnet.ru - - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - (original WavPack implementation) - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_APEPROPERTIES_H -#define TAGLIB_APEPROPERTIES_H - -#include "taglib_export.h" -#include "audioproperties.h" - -namespace TagLib { - - namespace APE { - - class File; - - //! An implementation of audio property reading for APE - - /*! - * This reads the data from an APE stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of APE::Properties with the data read from the - * APE::File \a file. - * - * \deprecated Use Properties(File *, long, ReadStyle). - */ - TAGLIB_DEPRECATED Properties(File *file, ReadStyle style = Average); - - /*! - * Create an instance of APE::Properties with the data read from the - * APE::File \a file. - */ - Properties(File *file, long streamLength, ReadStyle style = Average); - - /*! - * Destroys this APE::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample. - */ - int bitsPerSample() const; - - /*! - * Returns the total number of audio samples in file. - */ - unsigned int sampleFrames() const; - - /*! - * Returns APE version. - */ - int version() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file, long streamLength); - - void analyzeCurrent(File *file); - void analyzeOld(File *file); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace APE -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/apetag.h b/taglib/include/taglib/apetag.h deleted file mode 100644 index 0150429..0000000 --- a/taglib/include/taglib/apetag.h +++ /dev/null @@ -1,208 +0,0 @@ -/*************************************************************************** - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_APETAG_H -#define TAGLIB_APETAG_H - -#include "tag.h" -#include "tbytevector.h" -#include "tmap.h" -#include "tstring.h" -#include "taglib_export.h" - -#include "apeitem.h" - -namespace TagLib { - - class File; - - //! An implementation of the APE tagging format - - namespace APE { - - class Footer; - - /*! - * A mapping between a list of item names, or keys, and the associated item. - * - * \see APE::Tag::itemListMap() - */ - typedef Map ItemListMap; - - - //! An APE tag implementation - - class TAGLIB_EXPORT Tag : public TagLib::Tag - { - public: - /*! - * Create an APE tag with default values. - */ - Tag(); - - /*! - * Create an APE tag and parse the data in \a file with APE footer at - * \a tagOffset. - */ - Tag(TagLib::File *file, long footerLocation); - - /*! - * Destroys this Tag instance. - */ - virtual ~Tag(); - - /*! - * Renders the in memory values to a ByteVector suitable for writing to - * the file. - */ - ByteVector render() const; - - /*! - * Returns the string "APETAGEX" suitable for usage in locating the tag in a - * file. - */ - static ByteVector fileIdentifier(); - - // Reimplementations. - - virtual String title() const; - virtual String artist() const; - virtual String album() const; - virtual String comment() const; - virtual String genre() const; - virtual unsigned int year() const; - virtual unsigned int track() const; - - virtual void setTitle(const String &s); - virtual void setArtist(const String &s); - virtual void setAlbum(const String &s); - virtual void setComment(const String &s); - virtual void setGenre(const String &s); - virtual void setYear(unsigned int i); - virtual void setTrack(unsigned int i); - - /*! - * Implements the unified tag dictionary interface -- export function. - * APE tags are perfectly compatible with the dictionary interface because they - * support both arbitrary tag names and multiple values. Currently only - * APE items of type *Text* are handled by the dictionary interface; all *Binary* - * and *Locator* items will be put into the unsupportedData list and can be - * deleted on request using removeUnsupportedProperties(). The same happens - * to Text items if their key is invalid for PropertyMap (which should actually - * never happen). - * - * The only conversion done by this export function is to rename the APE tags - * TRACK to TRACKNUMBER, YEAR to DATE, and ALBUM ARTIST to ALBUMARTIST, respectively, - * in order to be compliant with the names used in other formats. - */ - PropertyMap properties() const; - - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified tag dictionary interface -- import function. The same - * comments as for the export function apply; additionally note that the APE tag - * specification requires keys to have between 2 and 16 printable ASCII characters - * with the exception of the fixed strings "ID3", "TAG", "OGGS", and "MP+". - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Check if the given String is a valid APE tag key. - */ - static bool checkKey(const String&); - - /*! - * Returns a pointer to the tag's footer. - */ - Footer *footer() const; - - /*! - * Returns a reference to the item list map. This is an ItemListMap of - * all of the items in the tag. - * - * This is the most powerful structure for accessing the items of the tag. - * - * APE tags are case-insensitive, all keys in this map have been converted - * to upper case. - * - * \warning You should not modify this data structure directly, instead - * use setItem() and removeItem(). - */ - const ItemListMap &itemListMap() const; - - /*! - * Removes the \a key item from the tag - */ - void removeItem(const String &key); - - /*! - * Adds to the text item specified by \a key the data \a value. If \a replace - * is true, then all of the other values on the same key will be removed - * first. If a binary item exists for \a key it will be removed first. - */ - void addValue(const String &key, const String &value, bool replace = true); - - /*! - * Set the binary data for the key specified by \a item to \a value - * This will convert the item to type \a Binary if it isn't already and - * all of the other values on the same key will be removed. - */ - void setData(const String &key, const ByteVector &value); - - /*! - * Sets the \a key item to the value of \a item. If an item with the \a key is already - * present, it will be replaced. - */ - void setItem(const String &key, const Item &item); - - /*! - * Returns true if the tag does not contain any data. - */ - bool isEmpty() const; - - protected: - - /*! - * Reads from the file specified in the constructor. - */ - void read(); - - /*! - * Parses the body of the tag in \a data. - */ - void parse(const ByteVector &data); - - private: - Tag(const Tag &); - Tag &operator=(const Tag &); - - class TagPrivate; - TagPrivate *d; - }; - } // namespace APE -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/asfattribute.h b/taglib/include/taglib/asfattribute.h deleted file mode 100644 index 5952fbd..0000000 --- a/taglib/include/taglib/asfattribute.h +++ /dev/null @@ -1,205 +0,0 @@ -/************************************************************************** - copyright : (C) 2005-2007 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ASFATTRIBUTE_H -#define TAGLIB_ASFATTRIBUTE_H - -#include "tstring.h" -#include "tbytevector.h" -#include "taglib_export.h" -#include "asfpicture.h" - -namespace TagLib -{ - namespace ASF - { - class File; - class Picture; - - class TAGLIB_EXPORT Attribute - { - public: - - /*! - * Enum of types an Attribute can have. - */ - enum AttributeTypes { - UnicodeType = 0, - BytesType = 1, - BoolType = 2, - DWordType = 3, - QWordType = 4, - WordType = 5, - GuidType = 6 - }; - - /*! - * Constructs an empty attribute. - */ - Attribute(); - - /*! - * Constructs an attribute with \a key and a UnicodeType \a value. - */ - Attribute(const String &value); - - /*! - * Constructs an attribute with \a key and a BytesType \a value. - */ - Attribute(const ByteVector &value); - - /*! - * Constructs an attribute with \a key and a Picture \a value. - * - * This attribute is compatible with the ID3 frame, APIC. The ID3 specification for the APIC frame stipulates that, - * while there may be any number of APIC frames associated with a file, - * only one may be of type 1 and only one may be of type 2. - * - * The specification also states that the description of the picture can be no longer than 64 characters, but can be empty. - * WM/Picture attributes added with TagLib::ASF are not automatically validated to conform to ID3 specifications. - * You must add code in your application to perform validations if you want to maintain complete compatibility with ID3. - */ - Attribute(const Picture &value); - - /*! - * Constructs an attribute with \a key and a DWordType \a value. - */ - Attribute(unsigned int value); - - /*! - * Constructs an attribute with \a key and a QWordType \a value. - */ - Attribute(unsigned long long value); - - /*! - * Constructs an attribute with \a key and a WordType \a value. - */ - Attribute(unsigned short value); - - /*! - * Constructs an attribute with \a key and a BoolType \a value. - */ - Attribute(bool value); - - /*! - * Construct an attribute as a copy of \a other. - */ - Attribute(const Attribute &item); - - /*! - * Copies the contents of \a other into this item. - */ - Attribute &operator=(const Attribute &other); - - /*! - * Exchanges the content of the Attribute by the content of \a other. - */ - void swap(Attribute &other); - - /*! - * Destroys the attribute. - */ - virtual ~Attribute(); - - /*! - * Returns type of the value. - */ - AttributeTypes type() const; - - /*! - * Returns the BoolType \a value. - */ - unsigned short toBool() const; - - /*! - * Returns the WordType \a value. - */ - unsigned short toUShort() const; - - /*! - * Returns the DWordType \a value. - */ - unsigned int toUInt() const; - - /*! - * Returns the QWordType \a value. - */ - unsigned long long toULongLong() const; - - /*! - * Returns the UnicodeType \a value. - */ - String toString() const; - - /*! - * Returns the BytesType \a value. - */ - ByteVector toByteVector() const; - - /*! - * Returns the Picture \a value. - */ - Picture toPicture() const; - - /*! - * Returns the language number, or 0 is no stream number was set. - */ - int language() const; - - /*! - * Sets the language number. - */ - void setLanguage(int value); - - /*! - * Returns the stream number, or 0 is no stream number was set. - */ - int stream() const; - - /*! - * Sets the stream number. - */ - void setStream(int value); - -#ifndef DO_NOT_DOCUMENT - /* THIS IS PRIVATE, DON'T TOUCH IT! */ - String parse(ASF::File &file, int kind = 0); -#endif - - //! Returns the size of the stored data - int dataSize() const; - - private: - friend class File; - - ByteVector render(const String &name, int kind = 0) const; - - class AttributePrivate; - AttributePrivate *d; - }; - } // namespace ASF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/asffile.h b/taglib/include/taglib/asffile.h deleted file mode 100644 index 5cabc38..0000000 --- a/taglib/include/taglib/asffile.h +++ /dev/null @@ -1,134 +0,0 @@ -/************************************************************************** - copyright : (C) 2005-2007 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ASFFILE_H -#define TAGLIB_ASFFILE_H - -#include "tag.h" -#include "tfile.h" -#include "taglib_export.h" -#include "asfproperties.h" -#include "asftag.h" - -namespace TagLib { - //! An implementation of ASF (WMA) metadata - namespace ASF { - /*! - * This implements and provides an interface for ASF files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to ASF files. - */ - class TAGLIB_EXPORT File : public TagLib::File - { - public: - - /*! - * Constructs an ASF file from \a file. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an ASF file from \a stream. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns a pointer to the ASF tag of the file. - * - * ASF::Tag implements the tag interface, so this serves as the - * reimplementation of TagLib::File::tag(). - * - * \note The Tag is still owned by the ASF::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - */ - virtual Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - */ - PropertyMap properties() const; - - /*! - * Removes unsupported properties. Forwards to the actual Tag's - * removeUnsupportedProperties() function. - */ - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the ASF audio properties for this file. - */ - virtual Properties *audioProperties() const; - - /*! - * Save the file. - * - * This returns true if the save was successful. - */ - virtual bool save(); - - /*! - * Returns whether or not the given \a stream can be opened as an ASF - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - void read(); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace ASF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/asfpicture.h b/taglib/include/taglib/asfpicture.h deleted file mode 100644 index f1b0ad4..0000000 --- a/taglib/include/taglib/asfpicture.h +++ /dev/null @@ -1,222 +0,0 @@ -/************************************************************************** - copyright : (C) 2010 by Anton Sergunov - email : setosha@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef ASFPICTURE_H -#define ASFPICTURE_H - -#include "tstring.h" -#include "tbytevector.h" -#include "taglib_export.h" -#include "attachedpictureframe.h" - -namespace TagLib -{ - namespace ASF - { - - //! An ASF attached picture interface implementation - - /*! - * This is an implementation of ASF attached pictures interface. Pictures may be - * included in attributes, one per WM/Picture attribute (but there may be multiple WM/Picture - * attribute in a single tag). These pictures are usually in either JPEG or - * PNG format. - * \see Attribute::toPicture() - * \see Attribute::Attribute(const Picture& picture) - */ - class TAGLIB_EXPORT Picture { - public: - - /*! - * This describes the function or content of the picture. - */ - enum Type { - //! A type not enumerated below - Other = 0x00, - //! 32x32 PNG image that should be used as the file icon - FileIcon = 0x01, - //! File icon of a different size or format - OtherFileIcon = 0x02, - //! Front cover image of the album - FrontCover = 0x03, - //! Back cover image of the album - BackCover = 0x04, - //! Inside leaflet page of the album - LeafletPage = 0x05, - //! Image from the album itself - Media = 0x06, - //! Picture of the lead artist or soloist - LeadArtist = 0x07, - //! Picture of the artist or performer - Artist = 0x08, - //! Picture of the conductor - Conductor = 0x09, - //! Picture of the band or orchestra - Band = 0x0A, - //! Picture of the composer - Composer = 0x0B, - //! Picture of the lyricist or text writer - Lyricist = 0x0C, - //! Picture of the recording location or studio - RecordingLocation = 0x0D, - //! Picture of the artists during recording - DuringRecording = 0x0E, - //! Picture of the artists during performance - DuringPerformance = 0x0F, - //! Picture from a movie or video related to the track - MovieScreenCapture = 0x10, - //! Picture of a large, coloured fish - ColouredFish = 0x11, - //! Illustration related to the track - Illustration = 0x12, - //! Logo of the band or performer - BandLogo = 0x13, - //! Logo of the publisher (record company) - PublisherLogo = 0x14 - }; - - /*! - * Constructs an empty picture. - */ - Picture(); - - /*! - * Construct an picture as a copy of \a other. - */ - Picture(const Picture& other); - - /*! - * Destroys the picture. - */ - virtual ~Picture(); - - /*! - * Copies the contents of \a other into this picture. - */ - Picture& operator=(const Picture& other); - - /*! - * Exchanges the content of the Picture by the content of \a other. - */ - void swap(Picture &other); - - /*! - * Returns true if Picture stores valid picture - */ - bool isValid() const; - - /*! - * Returns the mime type of the image. This should in most cases be - * "image/png" or "image/jpeg". - * \see setMimeType(const String &) - * \see picture() - * \see setPicture(const ByteArray&) - */ - String mimeType() const; - - /*! - * Sets the mime type of the image. This should in most cases be - * "image/png" or "image/jpeg". - * \see setMimeType(const String &) - * \see picture() - * \see setPicture(const ByteArray&) - */ - void setMimeType(const String &value); - - /*! - * Returns the type of the image. - * - * \see Type - * \see setType() - */ - Type type() const; - - /*! - * Sets the type for the image. - * - * \see Type - * \see type() - */ - void setType(const ASF::Picture::Type& t); - - /*! - * Returns a text description of the image. - * - * \see setDescription() - */ - String description() const; - - /*! - * Sets a textual description of the image to \a desc. - * - * \see description() - */ - void setDescription(const String &desc); - - /*! - * Returns the image data as a ByteVector. - * - * \note ByteVector has a data() method that returns a const char * which - * should make it easy to export this data to external programs. - * - * \see setPicture() - * \see mimeType() - */ - ByteVector picture() const; - - /*! - * Sets the image data to \a p. \a p should be of the type specified in - * this frame's mime-type specification. - * - * \see picture() - * \see mimeType() - * \see setMimeType() - */ - void setPicture(const ByteVector &p); - - /*! - * Returns picture as binary raw data \a value - */ - ByteVector render() const; - - /*! - * Returns picture as binary raw data \a value - */ - int dataSize() const; - -#ifndef DO_NOT_DOCUMENT - /* THIS IS PRIVATE, DON'T TOUCH IT! */ - void parse(const ByteVector& ); - static Picture fromInvalid(); -#endif - - private: - class PicturePrivate; - PicturePrivate *d; - }; - } // namespace ASF -} // namespace TagLib - -#endif // ASFPICTURE_H diff --git a/taglib/include/taglib/asfproperties.h b/taglib/include/taglib/asfproperties.h deleted file mode 100644 index d17b11d..0000000 --- a/taglib/include/taglib/asfproperties.h +++ /dev/null @@ -1,181 +0,0 @@ -/************************************************************************** - copyright : (C) 2005-2007 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ASFPROPERTIES_H -#define TAGLIB_ASFPROPERTIES_H - -#include "audioproperties.h" -#include "tstring.h" -#include "taglib_export.h" - -namespace TagLib { - namespace ASF { - //! An implementation of ASF audio properties - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - - /*! - * Audio codec types can be used in ASF file. - */ - enum Codec - { - /*! - * Couldn't detect the codec. - */ - Unknown = 0, - - /*! - * Windows Media Audio 1 - */ - WMA1, - - /*! - * Windows Media Audio 2 or above - */ - WMA2, - - /*! - * Windows Media Audio 9 Professional - */ - WMA9Pro, - - /*! - * Windows Media Audio 9 Lossless - */ - WMA9Lossless, - }; - - /*! - * Creates an instance of ASF::Properties. - */ - Properties(); - - /*! - * Destroys this ASF::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample. - */ - int bitsPerSample() const; - - /*! - * Returns the codec used in the file. - * - * \see codecName() - * \see codecDescription() - */ - Codec codec() const; - - /*! - * Returns the concrete codec name, for example "Windows Media Audio 9.1" - * used in the file if available, otherwise an empty string. - * - * \see codec() - * \see codecDescription() - */ - String codecName() const; - - /*! - * Returns the codec description, typically contains the encoder settings, - * for example "VBR Quality 50, 44kHz, stereo 1-pass VBR" if available, - * otherwise an empty string. - * - * \see codec() - * \see codecName() - */ - String codecDescription() const; - - /*! - * Returns whether or not the file is encrypted. - */ - bool isEncrypted() const; - -#ifndef DO_NOT_DOCUMENT - // deprecated - void setLength(int value); - - void setLengthInMilliseconds(int value); - void setBitrate(int value); - void setSampleRate(int value); - void setChannels(int value); - void setBitsPerSample(int value); - void setCodec(int value); - void setCodecName(const String &value); - void setCodecDescription(const String &value); - void setEncrypted(bool value); -#endif - - private: - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace ASF -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/asftag.h b/taglib/include/taglib/asftag.h deleted file mode 100644 index 7f2e355..0000000 --- a/taglib/include/taglib/asftag.h +++ /dev/null @@ -1,211 +0,0 @@ -/************************************************************************** - copyright : (C) 2005-2007 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ASFTAG_H -#define TAGLIB_ASFTAG_H - -#include "tag.h" -#include "tlist.h" -#include "tmap.h" -#include "taglib_export.h" -#include "asfattribute.h" - -namespace TagLib { - - namespace ASF { - - typedef List AttributeList; - typedef Map AttributeListMap; - - class TAGLIB_EXPORT Tag : public TagLib::Tag { - - friend class File; - - public: - - Tag(); - - virtual ~Tag(); - - /*! - * Returns the track name. - */ - virtual String title() const; - - /*! - * Returns the artist name. - */ - virtual String artist() const; - - /*! - * Returns the album name; if no album name is present in the tag - * String::null will be returned. - */ - virtual String album() const; - - /*! - * Returns the track comment. - */ - virtual String comment() const; - - /*! - * Returns the genre name; if no genre is present in the tag String::null - * will be returned. - */ - virtual String genre() const; - - /*! - * Returns the rating. - */ - virtual String rating() const; - - /*! - * Returns the genre name; if no genre is present in the tag String::null - * will be returned. - */ - virtual String copyright() const; - - /*! - * Returns the year; if there is no year set, this will return 0. - */ - virtual unsigned int year() const; - - /*! - * Returns the track number; if there is no track number set, this will - * return 0. - */ - virtual unsigned int track() const; - - /*! - * Sets the title to \a s. - */ - virtual void setTitle(const String &s); - - /*! - * Sets the artist to \a s. - */ - virtual void setArtist(const String &s); - - /*! - * Sets the album to \a s. If \a s is String::null then this value will be - * cleared. - */ - virtual void setAlbum(const String &s); - - /*! - * Sets the comment to \a s. - */ - virtual void setComment(const String &s); - - /*! - * Sets the rating to \a s. - */ - virtual void setRating(const String &s); - - /*! - * Sets the copyright to \a s. - */ - virtual void setCopyright(const String &s); - - /*! - * Sets the genre to \a s. - */ - virtual void setGenre(const String &s); - - /*! - * Sets the year to \a i. If \a s is 0 then this value will be cleared. - */ - virtual void setYear(unsigned int i); - - /*! - * Sets the track to \a i. If \a s is 0 then this value will be cleared. - */ - virtual void setTrack(unsigned int i); - - /*! - * Returns true if the tag does not contain any data. This should be - * reimplemented in subclasses that provide more than the basic tagging - * abilities in this class. - */ - virtual bool isEmpty() const; - - /*! - * \deprecated Use attributeListMap() const, contains(), removeItem(), - * attribute(), setAttribute(), addAttribute(). - */ - AttributeListMap &attributeListMap(); - - /*! - * Returns a reference to the item list map. This is an AttributeListMap of - * all of the items in the tag. - */ - // BIC: return by value - const AttributeListMap &attributeListMap() const; - - /*! - * \return True if a value for \a attribute is currently set. - */ - bool contains(const String &name) const; - - /*! - * Removes the \a key attribute from the tag - */ - void removeItem(const String &name); - - /*! - * \return The list of values for the key \a name, or an empty list if no - * values have been set. - */ - AttributeList attribute(const String &name) const; - - /*! - * Sets the \a key attribute to the value of \a attribute. If an attribute - * with the \a key is already present, it will be replaced. - */ - void setAttribute(const String &name, const Attribute &attribute); - - /*! - * Sets multiple \a values to the key \a name. - */ - void setAttribute(const String &name, const AttributeList &values); - - /*! - * Sets the \a key attribute to the value of \a attribute. If an attribute - * with the \a key is already present, it will be added to the list. - */ - void addAttribute(const String &name, const Attribute &attribute); - - PropertyMap properties() const; - void removeUnsupportedProperties(const StringList& properties); - PropertyMap setProperties(const PropertyMap &properties); - - private: - - class TagPrivate; - TagPrivate *d; - }; - } // namespace ASF -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/attachedpictureframe.h b/taglib/include/taglib/attachedpictureframe.h deleted file mode 100644 index 18755f3..0000000 --- a/taglib/include/taglib/attachedpictureframe.h +++ /dev/null @@ -1,230 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ATTACHEDPICTUREFRAME_H -#define TAGLIB_ATTACHEDPICTUREFRAME_H - -#include "id3v2frame.h" -#include "id3v2header.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An ID3v2 attached picture frame implementation - - /*! - * This is an implementation of ID3v2 attached pictures. Pictures may be - * included in tags, one per APIC frame (but there may be multiple APIC - * frames in a single tag). These pictures are usually in either JPEG or - * PNG format. - */ - - class TAGLIB_EXPORT AttachedPictureFrame : public Frame - { - friend class FrameFactory; - - public: - - /*! - * This describes the function or content of the picture. - */ - enum Type { - //! A type not enumerated below - Other = 0x00, - //! 32x32 PNG image that should be used as the file icon - FileIcon = 0x01, - //! File icon of a different size or format - OtherFileIcon = 0x02, - //! Front cover image of the album - FrontCover = 0x03, - //! Back cover image of the album - BackCover = 0x04, - //! Inside leaflet page of the album - LeafletPage = 0x05, - //! Image from the album itself - Media = 0x06, - //! Picture of the lead artist or soloist - LeadArtist = 0x07, - //! Picture of the artist or performer - Artist = 0x08, - //! Picture of the conductor - Conductor = 0x09, - //! Picture of the band or orchestra - Band = 0x0A, - //! Picture of the composer - Composer = 0x0B, - //! Picture of the lyricist or text writer - Lyricist = 0x0C, - //! Picture of the recording location or studio - RecordingLocation = 0x0D, - //! Picture of the artists during recording - DuringRecording = 0x0E, - //! Picture of the artists during performance - DuringPerformance = 0x0F, - //! Picture from a movie or video related to the track - MovieScreenCapture = 0x10, - //! Picture of a large, coloured fish - ColouredFish = 0x11, - //! Illustration related to the track - Illustration = 0x12, - //! Logo of the band or performer - BandLogo = 0x13, - //! Logo of the publisher (record company) - PublisherLogo = 0x14 - }; - - /*! - * Constructs an empty picture frame. The description, content and text - * encoding should be set manually. - */ - AttachedPictureFrame(); - - /*! - * Constructs an AttachedPicture frame based on \a data. - */ - explicit AttachedPictureFrame(const ByteVector &data); - - /*! - * Destroys the AttahcedPictureFrame instance. - */ - virtual ~AttachedPictureFrame(); - - /*! - * Returns a string containing the description and mime-type - */ - virtual String toString() const; - - /*! - * Returns the text encoding used for the description. - * - * \see setTextEncoding() - * \see description() - */ - String::Type textEncoding() const; - - /*! - * Set the text encoding used for the description. - * - * \see description() - */ - void setTextEncoding(String::Type t); - - /*! - * Returns the mime type of the image. This should in most cases be - * "image/png" or "image/jpeg". - */ - String mimeType() const; - - /*! - * Sets the mime type of the image. This should in most cases be - * "image/png" or "image/jpeg". - */ - void setMimeType(const String &m); - - /*! - * Returns the type of the image. - * - * \see Type - * \see setType() - */ - Type type() const; - - /*! - * Sets the type for the image. - * - * \see Type - * \see type() - */ - void setType(Type t); - - /*! - * Returns a text description of the image. - * - * \see setDescription() - * \see textEncoding() - * \see setTextEncoding() - */ - - String description() const; - - /*! - * Sets a textual description of the image to \a desc. - * - * \see description() - * \see textEncoding() - * \see setTextEncoding() - */ - - void setDescription(const String &desc); - - /*! - * Returns the image data as a ByteVector. - * - * \note ByteVector has a data() method that returns a const char * which - * should make it easy to export this data to external programs. - * - * \see setPicture() - * \see mimeType() - */ - ByteVector picture() const; - - /*! - * Sets the image data to \a p. \a p should be of the type specified in - * this frame's mime-type specification. - * - * \see picture() - * \see mimeType() - * \see setMimeType() - */ - void setPicture(const ByteVector &p); - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - class AttachedPictureFramePrivate; - AttachedPictureFramePrivate *d; - - private: - AttachedPictureFrame(const AttachedPictureFrame &); - AttachedPictureFrame &operator=(const AttachedPictureFrame &); - AttachedPictureFrame(const ByteVector &data, Header *h); - - }; - - //! support for ID3v2.2 PIC frames - class TAGLIB_EXPORT AttachedPictureFrameV22 : public AttachedPictureFrame - { - protected: - virtual void parseFields(const ByteVector &data); - private: - AttachedPictureFrameV22(const ByteVector &data, Header *h); - friend class FrameFactory; - }; - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/audioproperties.h b/taglib/include/taglib/audioproperties.h deleted file mode 100644 index 9ef8210..0000000 --- a/taglib/include/taglib/audioproperties.h +++ /dev/null @@ -1,127 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_AUDIOPROPERTIES_H -#define TAGLIB_AUDIOPROPERTIES_H - -#include "taglib_export.h" - -namespace TagLib { - - //! A simple, abstract interface to common audio properties - - /*! - * The values here are common to most audio formats. For more specific, codec - * dependent values, please see see the subclasses APIs. This is meant to - * compliment the TagLib::File and TagLib::Tag APIs in providing a simple - * interface that is sufficient for most applications. - */ - - class TAGLIB_EXPORT AudioProperties - { - public: - - /*! - * Reading audio properties from a file can sometimes be very time consuming - * and for the most accurate results can often involve reading the entire - * file. Because in many situations speed is critical or the accuracy of the - * values is not particularly important this allows the level of desired - * accuracy to be set. - */ - enum ReadStyle { - //! Read as little of the file as possible - Fast, - //! Read more of the file and make better values guesses - Average, - //! Read as much of the file as needed to report accurate values - Accurate - }; - - /*! - * Destroys this AudioProperties instance. - */ - virtual ~AudioProperties(); - - /*! - * Returns the length of the file in seconds. - */ - virtual int length() const = 0; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the most appropriate bit rate for the file in kb/s. For constant - * bitrate formats this is simply the bitrate of the file. For variable - * bitrate formats this is either the average or nominal bitrate. - */ - virtual int bitrate() const = 0; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const = 0; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const = 0; - - protected: - - /*! - * Construct an audio properties instance. This is protected as this class - * should not be instantiated directly, but should be instantiated via its - * subclasses and can be fetched from the FileRef or File APIs. - * - * \see ReadStyle - */ - AudioProperties(ReadStyle style); - - private: - AudioProperties(const AudioProperties &); - AudioProperties &operator=(const AudioProperties &); - - class AudioPropertiesPrivate; - AudioPropertiesPrivate *d; - }; - -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/chapterframe.h b/taglib/include/taglib/chapterframe.h deleted file mode 100644 index 90c3fc7..0000000 --- a/taglib/include/taglib/chapterframe.h +++ /dev/null @@ -1,249 +0,0 @@ -/*************************************************************************** - copyright : (C) 2013 by Lukas Krejci - email : krejclu6@fel.cvut.cz - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_CHAPTERFRAME -#define TAGLIB_CHAPTERFRAME - -#include "id3v2tag.h" -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - /*! - * This is an implementation of ID3v2 chapter frames. The purpose of this - * frame is to describe a single chapter within an audio file. - */ - - //! An implementation of ID3v2 chapter frames - - class TAGLIB_EXPORT ChapterFrame : public ID3v2::Frame - { - friend class FrameFactory; - - public: - /*! - * Creates a chapter frame based on \a data. \a tagHeader is required as - * the internal frames are parsed based on the tag version. - */ - ChapterFrame(const ID3v2::Header *tagHeader, const ByteVector &data); - - /*! - * Creates a chapter frame with the element ID \a elementID, start time - * \a startTime, end time \a endTime, start offset \a startOffset, - * end offset \a endOffset and optionally a list of embedded frames, - * whose ownership will then be taken over by this Frame, in - * \a embeddedFrames; - * - * All times are in milliseconds. - */ - ChapterFrame(const ByteVector &elementID, - unsigned int startTime, unsigned int endTime, - unsigned int startOffset, unsigned int endOffset, - const FrameList &embeddedFrames = FrameList()); - - /*! - * Destroys the frame. - */ - virtual ~ChapterFrame(); - - /*! - * Returns the element ID of the frame. Element ID - * is a null terminated string, however it's not human-readable. - * - * \see setElementID() - */ - ByteVector elementID() const; - - /*! - * Returns time of chapter's start (in milliseconds). - * - * \see setStartTime() - */ - unsigned int startTime() const; - - /*! - * Returns time of chapter's end (in milliseconds). - * - * \see setEndTime() - */ - unsigned int endTime() const; - - /*! - * Returns zero based byte offset (count of bytes from the beginning - * of the audio file) of chapter's start. - * - * \note If returned value is 0xFFFFFFFF, start time should be used instead. - * \see setStartOffset() - */ - unsigned int startOffset() const; - - /*! - * Returns zero based byte offset (count of bytes from the beginning - * of the audio file) of chapter's end. - * - * \note If returned value is 0xFFFFFFFF, end time should be used instead. - * \see setEndOffset() - */ - unsigned int endOffset() const; - - /*! - * Sets the element ID of the frame to \a eID. If \a eID isn't - * null terminated, a null char is appended automatically. - * - * \see elementID() - */ - void setElementID(const ByteVector &eID); - - /*! - * Sets time of chapter's start (in milliseconds) to \a sT. - * - * \see startTime() - */ - void setStartTime(const unsigned int &sT); - - /*! - * Sets time of chapter's end (in milliseconds) to \a eT. - * - * \see endTime() - */ - void setEndTime(const unsigned int &eT); - - /*! - * Sets zero based byte offset (count of bytes from the beginning - * of the audio file) of chapter's start to \a sO. - * - * \see startOffset() - */ - void setStartOffset(const unsigned int &sO); - - /*! - * Sets zero based byte offset (count of bytes from the beginning - * of the audio file) of chapter's end to \a eO. - * - * \see endOffset() - */ - void setEndOffset(const unsigned int &eO); - - /*! - * Returns a reference to the frame list map. This is an FrameListMap of - * all of the frames embedded in the CHAP frame. - * - * This is the most convenient structure for accessing the CHAP frame's - * embedded frames. Many frame types allow multiple instances of the same - * frame type so this is a map of lists. In most cases however there will - * only be a single frame of a certain type. - * - * \warning You should not modify this data structure directly, instead - * use addEmbeddedFrame() and removeEmbeddedFrame(). - * - * \see embeddedFrameList() - */ - const FrameListMap &embeddedFrameListMap() const; - - /*! - * Returns a reference to the embedded frame list. This is an FrameList - * of all of the frames embedded in the CHAP frame in the order that they - * were parsed. - * - * This can be useful if for example you want iterate over the CHAP frame's - * embedded frames in the order that they occur in the CHAP frame. - * - * \warning You should not modify this data structure directly, instead - * use addEmbeddedFrame() and removeEmbeddedFrame(). - */ - const FrameList &embeddedFrameList() const; - - /*! - * Returns the embedded frame list for frames with the id \a frameID - * or an empty list if there are no embedded frames of that type. This - * is just a convenience and is equivalent to: - * - * \code - * embeddedFrameListMap()[frameID]; - * \endcode - * - * \see embeddedFrameListMap() - */ - const FrameList &embeddedFrameList(const ByteVector &frameID) const; - - /*! - * Add an embedded frame to the CHAP frame. At this point the CHAP frame - * takes ownership of the embedded frame and will handle freeing its memory. - * - * \note Using this method will invalidate any pointers on the list - * returned by embeddedFrameList() - */ - void addEmbeddedFrame(Frame *frame); - - /*! - * Remove an embedded frame from the CHAP frame. If \a del is true the frame's - * memory will be freed; if it is false, it must be deleted by the user. - * - * \note Using this method will invalidate any pointers on the list - * returned by embeddedFrameList() - */ - void removeEmbeddedFrame(Frame *frame, bool del = true); - - /*! - * Remove all embedded frames of type \a id from the CHAP frame and free their - * memory. - * - * \note Using this method will invalidate any pointers on the list - * returned by embeddedFrameList() - */ - void removeEmbeddedFrames(const ByteVector &id); - - virtual String toString() const; - - PropertyMap asProperties() const; - - /*! - * CHAP frames each have a unique element ID. This searches for a CHAP - * frame with the element ID \a eID and returns a pointer to it. This - * can be used to link CTOC and CHAP frames together. - * - * \see elementID() - */ - static ChapterFrame *findByElementID(const Tag *tag, const ByteVector &eID); - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - ChapterFrame(const ID3v2::Header *tagHeader, const ByteVector &data, Header *h); - ChapterFrame(const ChapterFrame &); - ChapterFrame &operator=(const ChapterFrame &); - - class ChapterFramePrivate; - ChapterFramePrivate *d; - }; - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/commentsframe.h b/taglib/include/taglib/commentsframe.h deleted file mode 100644 index e29f8eb..0000000 --- a/taglib/include/taglib/commentsframe.h +++ /dev/null @@ -1,179 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_COMMENTSFRAME_H -#define TAGLIB_COMMENTSFRAME_H - -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An implementation of ID3v2 comments - - /*! - * This implements the ID3v2 comment format. An ID3v2 comment consists of - * a language encoding, a description and a single text field. - */ - - class TAGLIB_EXPORT CommentsFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * Construct an empty comment frame that will use the text encoding - * \a encoding. - */ - explicit CommentsFrame(String::Type encoding = String::Latin1); - - /*! - * Construct a comment based on the data in \a data. - */ - explicit CommentsFrame(const ByteVector &data); - - /*! - * Destroys this CommentFrame instance. - */ - virtual ~CommentsFrame(); - - /*! - * Returns the text of this comment. - * - * \see text() - */ - virtual String toString() const; - - /*! - * Returns the language encoding as a 3 byte encoding as specified by - * ISO-639-2. - * - * \note Most taggers simply ignore this value. - * - * \see setLanguage() - */ - ByteVector language() const; - - /*! - * Returns the description of this comment. - * - * \note Most taggers simply ignore this value. - * - * \see setDescription() - */ - String description() const; - - /*! - * Returns the text of this comment. - * - * \see setText() - */ - String text() const; - - /*! - * Set the language using the 3 byte language code from - * ISO-639-2 to - * \a languageCode. - * - * \see language() - */ - void setLanguage(const ByteVector &languageCode); - - /*! - * Sets the description of the comment to \a s. - * - * \see description() - */ - void setDescription(const String &s); - - /*! - * Sets the text portion of the comment to \a s. - * - * \see text() - */ - virtual void setText(const String &s); - - /*! - * Returns the text encoding that will be used in rendering this frame. - * This defaults to the type that was either specified in the constructor - * or read from the frame when parsed. - * - * \see setTextEncoding() - * \see render() - */ - String::Type textEncoding() const; - - /*! - * Sets the text encoding to be used when rendering this frame to - * \a encoding. - * - * \see textEncoding() - * \see render() - */ - void setTextEncoding(String::Type encoding); - - /*! - * Parses this frame as PropertyMap with a single key. - * - if description() is empty or "COMMENT", the key will be "COMMENT" - * - if description() is not a valid PropertyMap key, the frame will be - * marked unsupported by an entry "COMM/" in the unsupportedData() - * attribute of the returned map. - * - otherwise, the key will be "COMMENT:" - * - The single value will be the frame's text(). - */ - PropertyMap asProperties() const; - - /*! - * Comments each have a unique description. This searches for a comment - * frame with the description \a d and returns a pointer to it. If no - * frame is found that matches the given description null is returned. - * - * \see description() - */ - static CommentsFrame *findByDescription(const Tag *tag, const String &d); - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - CommentsFrame(const ByteVector &data, Header *h); - CommentsFrame(const CommentsFrame &); - CommentsFrame &operator=(const CommentsFrame &); - - class CommentsFramePrivate; - CommentsFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/eventtimingcodesframe.h b/taglib/include/taglib/eventtimingcodesframe.h deleted file mode 100644 index 9146bdc..0000000 --- a/taglib/include/taglib/eventtimingcodesframe.h +++ /dev/null @@ -1,185 +0,0 @@ -/*************************************************************************** - copyright : (C) 2014 by Urs Fleisch - email : ufleisch@users.sourceforge.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_EVENTTIMINGCODESFRAME_H -#define TAGLIB_EVENTTIMINGCODESFRAME_H - -#include "id3v2frame.h" -#include "tlist.h" - -namespace TagLib { - - namespace ID3v2 { - - //! ID3v2 event timing codes frame - /*! - * An implementation of ID3v2 event timing codes. - */ - class TAGLIB_EXPORT EventTimingCodesFrame : public Frame - { - friend class FrameFactory; - - public: - - /*! - * Specifies the timestamp format used. - */ - enum TimestampFormat { - //! The timestamp is of unknown format. - Unknown = 0x00, - //! The timestamp represents the number of MPEG frames since - //! the beginning of the audio stream. - AbsoluteMpegFrames = 0x01, - //! The timestamp represents the number of milliseconds since - //! the beginning of the audio stream. - AbsoluteMilliseconds = 0x02 - }; - - /*! - * Event types defined in id3v2.4.0-frames.txt 4.5. Event timing codes. - */ - enum EventType { - Padding = 0x00, - EndOfInitialSilence = 0x01, - IntroStart = 0x02, - MainPartStart = 0x03, - OutroStart = 0x04, - OutroEnd = 0x05, - VerseStart = 0x06, - RefrainStart = 0x07, - InterludeStart = 0x08, - ThemeStart = 0x09, - VariationStart = 0x0a, - KeyChange = 0x0b, - TimeChange = 0x0c, - MomentaryUnwantedNoise = 0x0d, - SustainedNoise = 0x0e, - SustainedNoiseEnd = 0x0f, - IntroEnd = 0x10, - MainPartEnd = 0x11, - VerseEnd = 0x12, - RefrainEnd = 0x13, - ThemeEnd = 0x14, - Profanity = 0x15, - ProfanityEnd = 0x16, - NotPredefinedSynch0 = 0xe0, - NotPredefinedSynch1 = 0xe1, - NotPredefinedSynch2 = 0xe2, - NotPredefinedSynch3 = 0xe3, - NotPredefinedSynch4 = 0xe4, - NotPredefinedSynch5 = 0xe5, - NotPredefinedSynch6 = 0xe6, - NotPredefinedSynch7 = 0xe7, - NotPredefinedSynch8 = 0xe8, - NotPredefinedSynch9 = 0xe9, - NotPredefinedSynchA = 0xea, - NotPredefinedSynchB = 0xeb, - NotPredefinedSynchC = 0xec, - NotPredefinedSynchD = 0xed, - NotPredefinedSynchE = 0xee, - NotPredefinedSynchF = 0xef, - AudioEnd = 0xfd, - AudioFileEnds = 0xfe - }; - - /*! - * Single entry of time stamp and event. - */ - struct SynchedEvent { - SynchedEvent(unsigned int ms, EventType t) : time(ms), type(t) {} - unsigned int time; - EventType type; - }; - - /*! - * List of synchronized events. - */ - typedef TagLib::List SynchedEventList; - - /*! - * Construct an empty event timing codes frame. - */ - explicit EventTimingCodesFrame(); - - /*! - * Construct a event timing codes frame based on the data in \a data. - */ - explicit EventTimingCodesFrame(const ByteVector &data); - - /*! - * Destroys this EventTimingCodesFrame instance. - */ - virtual ~EventTimingCodesFrame(); - - /*! - * Returns a null string. - */ - virtual String toString() const; - - /*! - * Returns the timestamp format. - */ - TimestampFormat timestampFormat() const; - - /*! - * Returns the events with the time stamps. - */ - SynchedEventList synchedEvents() const; - - /*! - * Set the timestamp format. - * - * \see timestampFormat() - */ - void setTimestampFormat(TimestampFormat f); - - /*! - * Sets the text with the time stamps. - * - * \see text() - */ - void setSynchedEvents(const SynchedEventList &e); - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - EventTimingCodesFrame(const ByteVector &data, Header *h); - EventTimingCodesFrame(const EventTimingCodesFrame &); - EventTimingCodesFrame &operator=(const EventTimingCodesFrame &); - - class EventTimingCodesFramePrivate; - EventTimingCodesFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/fileref.h b/taglib/include/taglib/fileref.h deleted file mode 100644 index db23bbb..0000000 --- a/taglib/include/taglib/fileref.h +++ /dev/null @@ -1,297 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_FILEREF_H -#define TAGLIB_FILEREF_H - -#include "tfile.h" -#include "tstringlist.h" - -#include "taglib_export.h" -#include "audioproperties.h" - -namespace TagLib { - - class Tag; - - //! This class provides a simple abstraction for creating and handling files - - /*! - * FileRef exists to provide a minimal, generic and value-based wrapper around - * a File. It is lightweight and implicitly shared, and as such suitable for - * pass-by-value use. This hides some of the uglier details of TagLib::File - * and the non-generic portions of the concrete file implementations. - * - * This class is useful in a "simple usage" situation where it is desirable - * to be able to get and set some of the tag information that is similar - * across file types. - * - * Also note that it is probably a good idea to plug this into your mime - * type system rather than using the constructor that accepts a file name using - * the FileTypeResolver. - * - * \see FileTypeResolver - * \see addFileTypeResolver() - */ - - class TAGLIB_EXPORT FileRef - { - public: - - //! A class for pluggable file type resolution. - - /*! - * This class is used to add extend TagLib's very basic file name based file - * type resolution. - * - * This can be accomplished with: - * - * \code - * - * class MyFileTypeResolver : FileTypeResolver - * { - * TagLib::File *createFile(TagLib::FileName *fileName, bool, AudioProperties::ReadStyle) const - * { - * if(someCheckForAnMP3File(fileName)) - * return new TagLib::MPEG::File(fileName); - * return 0; - * } - * } - * - * FileRef::addFileTypeResolver(new MyFileTypeResolver); - * - * \endcode - * - * Naturally a less contrived example would be slightly more complex. This - * can be used to plug in mime-type detection systems or to add new file types - * to TagLib. - */ - - class TAGLIB_EXPORT FileTypeResolver - { - TAGLIB_IGNORE_MISSING_DESTRUCTOR - public: - /*! - * This method must be overridden to provide an additional file type - * resolver. If the resolver is able to determine the file type it should - * return a valid File object; if not it should return 0. - * - * \note The created file is then owned by the FileRef and should not be - * deleted. Deletion will happen automatically when the FileRef passes - * out of scope. - */ - virtual File *createFile(FileName fileName, - bool readAudioProperties = true, - AudioProperties::ReadStyle - audioPropertiesStyle = AudioProperties::Average) const = 0; - }; - - class TAGLIB_EXPORT StreamTypeResolver : public FileTypeResolver - { - TAGLIB_IGNORE_MISSING_DESTRUCTOR - public: - virtual File *createFileFromStream(IOStream *stream, - bool readAudioProperties = true, - AudioProperties::ReadStyle - audioPropertiesStyle = AudioProperties::Average) const = 0; - }; - - /*! - * Creates a null FileRef. - */ - FileRef(); - - /*! - * Create a FileRef from \a fileName. If \a readAudioProperties is true then - * the audio properties will be read using \a audioPropertiesStyle. If - * \a readAudioProperties is false then \a audioPropertiesStyle will be - * ignored. - * - * Also see the note in the class documentation about why you may not want to - * use this method in your application. - */ - explicit FileRef(FileName fileName, - bool readAudioProperties = true, - AudioProperties::ReadStyle - audioPropertiesStyle = AudioProperties::Average); - - /*! - * Construct a FileRef from an opened \a IOStream. If \a readAudioProperties - * is true then the audio properties will be read using \a audioPropertiesStyle. - * If \a readAudioProperties is false then \a audioPropertiesStyle will be - * ignored. - * - * Also see the note in the class documentation about why you may not want to - * use this method in your application. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - explicit FileRef(IOStream* stream, - bool readAudioProperties = true, - AudioProperties::ReadStyle - audioPropertiesStyle = AudioProperties::Average); - - /*! - * Construct a FileRef using \a file. The FileRef now takes ownership of the - * pointer and will delete the File when it passes out of scope. - */ - explicit FileRef(File *file); - - /*! - * Make a copy of \a ref. - */ - FileRef(const FileRef &ref); - - /*! - * Destroys this FileRef instance. - */ - virtual ~FileRef(); - - /*! - * Returns a pointer to represented file's tag. - * - * \warning This pointer will become invalid when this FileRef and all - * copies pass out of scope. - * - * \warning Do not cast it to any subclasses of Tag. - * Use tag returning methods of appropriate subclasses of File instead. - * - * \see File::tag() - */ - Tag *tag() const; - - /*! - * Returns the audio properties for this FileRef. If no audio properties - * were read then this will returns a null pointer. - */ - AudioProperties *audioProperties() const; - - /*! - * Returns a pointer to the file represented by this handler class. - * - * As a general rule this call should be avoided since if you need to work - * with file objects directly, you are probably better served instantiating - * the File subclasses (i.e. MPEG::File) manually and working with their APIs. - * - * This handle exists to provide a minimal, generic and value-based - * wrapper around a File. Accessing the file directly generally indicates - * a moving away from this simplicity (and into things beyond the scope of - * FileRef). - * - * \warning This pointer will become invalid when this FileRef and all - * copies pass out of scope. - */ - File *file() const; - - /*! - * Saves the file. Returns true on success. - */ - bool save(); - - /*! - * Adds a FileTypeResolver to the list of those used by TagLib. Each - * additional FileTypeResolver is added to the front of a list of resolvers - * that are tried. If the FileTypeResolver returns zero the next resolver - * is tried. - * - * Returns a pointer to the added resolver (the same one that's passed in -- - * this is mostly so that static initializers have something to use for - * assignment). - * - * \see FileTypeResolver - */ - static const FileTypeResolver *addFileTypeResolver(const FileTypeResolver *resolver); - - /*! - * As is mentioned elsewhere in this class's documentation, the default file - * type resolution code provided by TagLib only works by comparing file - * extensions. - * - * This method returns the list of file extensions that are used by default. - * - * The extensions are all returned in lowercase, though the comparison used - * by TagLib for resolution is case-insensitive. - * - * \note This does not account for any additional file type resolvers that - * are plugged in. Also note that this is not intended to replace a proper - * mime-type resolution system, but is just here for reference. - * - * \see FileTypeResolver - */ - static StringList defaultFileExtensions(); - - /*! - * Returns true if the file (and as such other pointers) are null. - */ - bool isNull() const; - - /*! - * Assign the file pointed to by \a ref to this FileRef. - */ - FileRef &operator=(const FileRef &ref); - - /*! - * Exchanges the content of the FileRef by the content of \a ref. - */ - void swap(FileRef &ref); - - /*! - * Returns true if this FileRef and \a ref point to the same File object. - */ - bool operator==(const FileRef &ref) const; - - /*! - * Returns true if this FileRef and \a ref do not point to the same File - * object. - */ - bool operator!=(const FileRef &ref) const; - - /*! - * A simple implementation of file type guessing. If \a readAudioProperties - * is true then the audio properties will be read using - * \a audioPropertiesStyle. If \a readAudioProperties is false then - * \a audioPropertiesStyle will be ignored. - * - * \note You generally shouldn't use this method, but instead the constructor - * directly. - * - * \deprecated Use FileRef(FileName, bool, AudioProperties::ReadStyle). - */ - static File *create(FileName fileName, - bool readAudioProperties = true, - AudioProperties::ReadStyle audioPropertiesStyle = AudioProperties::Average); - - private: - void parse(FileName fileName, bool readAudioProperties, AudioProperties::ReadStyle audioPropertiesStyle); - void parse(IOStream *stream, bool readAudioProperties, AudioProperties::ReadStyle audioPropertiesStyle); - - class FileRefPrivate; - FileRefPrivate *d; - }; - -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/flacfile.h b/taglib/include/taglib/flacfile.h deleted file mode 100644 index a43c68c..0000000 --- a/taglib/include/taglib/flacfile.h +++ /dev/null @@ -1,343 +0,0 @@ -/*************************************************************************** - copyright : (C) 2003 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_FLACFILE_H -#define TAGLIB_FLACFILE_H - -#include "taglib_export.h" -#include "tfile.h" -#include "tlist.h" -#include "tag.h" - -#include "flacpicture.h" -#include "flacproperties.h" - -namespace TagLib { - - class Tag; - namespace ID3v2 { class FrameFactory; class Tag; } - namespace ID3v1 { class Tag; } - namespace Ogg { class XiphComment; } - - //! An implementation of FLAC metadata - - /*! - * This is implementation of FLAC metadata for non-Ogg FLAC files. At some - * point when Ogg / FLAC is more common there will be a similar implementation - * under the Ogg hierarchy. - * - * This supports ID3v1, ID3v2 and Xiph style comments as well as reading stream - * properties from the file. - */ - - namespace FLAC { - - //! An implementation of TagLib::File with FLAC specific methods - - /*! - * This implements and provides an interface for FLAC files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to FLAC files. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * This set of flags is used for various operations and is suitable for - * being OR-ed together. - */ - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches Vorbis comments. - XiphComment = 0x0001, - //! Matches ID3v1 tags. - ID3v1 = 0x0002, - //! Matches ID3v2 tags. - ID3v2 = 0x0004, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs a FLAC file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - * - * \deprecated This constructor will be dropped in favor of the one below - * in a future version. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an FLAC file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * If this file contains and ID3v2 tag the frames will be created using - * \a frameFactory. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - // BIC: merge with the above constructor - File(FileName file, ID3v2::FrameFactory *frameFactory, - bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs a FLAC file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * If this file contains and ID3v2 tag the frames will be created using - * \a frameFactory. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - // BIC: merge with the above constructor - File(IOStream *stream, ID3v2::FrameFactory *frameFactory, - bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the Tag for this file. This will be a union of XiphComment, - * ID3v1 and ID3v2 tags. - * - * \see ID3v2Tag() - * \see ID3v1Tag() - * \see XiphComment() - */ - virtual TagLib::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * If the file contains more than one tag (e.g. XiphComment and ID3v1), - * only the first one (in the order XiphComment, ID3v2, ID3v1) will be - * converted to the PropertyMap. - */ - PropertyMap properties() const; - - void removeUnsupportedProperties(const StringList &); - - /*! - * Implements the unified property interface -- import function. - * This always creates a Xiph comment, if none exists. The return value - * relates to the Xiph comment only. - * Ignores any changes to ID3v1 or ID3v2 comments since they are not allowed - * in the FLAC specification. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the FLAC::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Save the file. This will primarily save the XiphComment, but - * will also keep any old ID3-tags up to date. If the file - * has no XiphComment, one will be constructed from the ID3-tags. - * - * This returns true if the save was successful. - */ - virtual bool save(); - - /*! - * Returns a pointer to the ID3v2 tag of the file. - * - * If \a create is false (the default) this returns a null pointer - * if there is no valid ID3v2 tag. If \a create is true it will create - * an ID3v2 tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v2 tag. Use hasID3v2Tag() to check if the file - * on disk actually has an ID3v2 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v2Tag() - */ - ID3v2::Tag *ID3v2Tag(bool create = false); - - /*! - * Returns a pointer to the ID3v1 tag of the file. - * - * If \a create is false (the default) this returns a null pointer - * if there is no valid APE tag. If \a create is true it will create - * an APE tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v1 tag. Use hasID3v1Tag() to check if the file - * on disk actually has an ID3v1 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v1Tag() - */ - ID3v1::Tag *ID3v1Tag(bool create = false); - - /*! - * Returns a pointer to the XiphComment for the file. - * - * If \a create is false (the default) this returns a null pointer - * if there is no valid XiphComment. If \a create is true it will create - * a XiphComment if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has a XiphComment. Use hasXiphComment() to check if the - * file on disk actually has a XiphComment. - * - * \note The Tag is still owned by the FLAC::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasXiphComment() - */ - Ogg::XiphComment *xiphComment(bool create = false); - - /*! - * Set the ID3v2::FrameFactory to something other than the default. This - * can be used to specify the way that ID3v2 frames will be interpreted - * when - * - * \see ID3v2FrameFactory - * \deprecated This value should be passed in via the constructor. - */ - TAGLIB_DEPRECATED void setID3v2FrameFactory(const ID3v2::FrameFactory *factory); - - /*! - * Returns the block of data used by FLAC::Properties for parsing the - * stream properties. - * - * \deprecated Always returns an empty vector. - */ - TAGLIB_DEPRECATED ByteVector streamInfoData(); // BIC: remove - - /*! - * Returns the length of the audio-stream, used by FLAC::Properties for - * calculating the bitrate. - * - * \deprecated Always returns zero. - */ - TAGLIB_DEPRECATED long streamLength(); // BIC: remove - - /*! - * Returns a list of pictures attached to the FLAC file. - */ - List pictureList(); - - /*! - * Removes an attached picture. If \a del is true the picture's memory - * will be freed; if it is false, it must be deleted by the user. - */ - void removePicture(Picture *picture, bool del = true); - - /*! - * Remove all attached images. - */ - void removePictures(); - - /*! - * Add a new picture to the file. The file takes ownership of the - * picture and will handle freeing its memory. - * - * \note The file will be saved only after calling save(). - */ - void addPicture(Picture *picture); - - /*! - * This will remove the tags that match the OR-ed together TagTypes from - * the file. By default it removes all tags. - * - * \warning This will also invalidate pointers to the tags as their memory - * will be freed. - * - * \note In order to make the removal permanent save() still needs to be - * called. - * - * \note This won't remove the Vorbis comment block completely. The - * vendor ID will be preserved. - */ - void strip(int tags = AllTags); - - /*! - * Returns whether or not the file on disk actually has a XiphComment. - * - * \see xiphComment() - */ - bool hasXiphComment() const; - - /*! - * Returns whether or not the file on disk actually has an ID3v1 tag. - * - * \see ID3v1Tag() - */ - bool hasID3v1Tag() const; - - /*! - * Returns whether or not the file on disk actually has an ID3v2 tag. - * - * \see ID3v2Tag() - */ - bool hasID3v2Tag() const; - - /*! - * Returns whether or not the given \a stream can be opened as a FLAC - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - void scan(); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace FLAC -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/flacmetadatablock.h b/taglib/include/taglib/flacmetadatablock.h deleted file mode 100644 index 45c7971..0000000 --- a/taglib/include/taglib/flacmetadatablock.h +++ /dev/null @@ -1,70 +0,0 @@ -/************************************************************************** - copyright : (C) 2010 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_FLACMETADATABLOCK_H -#define TAGLIB_FLACMETADATABLOCK_H - -#include "tlist.h" -#include "tbytevector.h" -#include "taglib_export.h" - -namespace TagLib { - namespace FLAC { - class TAGLIB_EXPORT MetadataBlock - { - public: - MetadataBlock(); - virtual ~MetadataBlock(); - - enum BlockType { - StreamInfo = 0, - Padding, - Application, - SeekTable, - VorbisComment, - CueSheet, - Picture - }; - - /*! - * Returns the FLAC metadata block type. - */ - virtual int code() const = 0; - - /*! - * Render the content of the block. - */ - virtual ByteVector render() const = 0; - - private: - MetadataBlock(const MetadataBlock &item); - MetadataBlock &operator=(const MetadataBlock &item); - - class MetadataBlockPrivate; - MetadataBlockPrivate *d; - }; - } // namespace FLAC -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/flacpicture.h b/taglib/include/taglib/flacpicture.h deleted file mode 100644 index 2cde3aa..0000000 --- a/taglib/include/taglib/flacpicture.h +++ /dev/null @@ -1,203 +0,0 @@ -/************************************************************************** - copyright : (C) 2010 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_FLACPICTURE_H -#define TAGLIB_FLACPICTURE_H - -#include "tlist.h" -#include "tstring.h" -#include "tbytevector.h" -#include "taglib_export.h" -#include "flacmetadatablock.h" - -namespace TagLib { - namespace FLAC { - class TAGLIB_EXPORT Picture : public MetadataBlock - { - public: - - /*! - * This describes the function or content of the picture. - */ - enum Type { - //! A type not enumerated below - Other = 0x00, - //! 32x32 PNG image that should be used as the file icon - FileIcon = 0x01, - //! File icon of a different size or format - OtherFileIcon = 0x02, - //! Front cover image of the album - FrontCover = 0x03, - //! Back cover image of the album - BackCover = 0x04, - //! Inside leaflet page of the album - LeafletPage = 0x05, - //! Image from the album itself - Media = 0x06, - //! Picture of the lead artist or soloist - LeadArtist = 0x07, - //! Picture of the artist or performer - Artist = 0x08, - //! Picture of the conductor - Conductor = 0x09, - //! Picture of the band or orchestra - Band = 0x0A, - //! Picture of the composer - Composer = 0x0B, - //! Picture of the lyricist or text writer - Lyricist = 0x0C, - //! Picture of the recording location or studio - RecordingLocation = 0x0D, - //! Picture of the artists during recording - DuringRecording = 0x0E, - //! Picture of the artists during performance - DuringPerformance = 0x0F, - //! Picture from a movie or video related to the track - MovieScreenCapture = 0x10, - //! Picture of a large, coloured fish - ColouredFish = 0x11, - //! Illustration related to the track - Illustration = 0x12, - //! Logo of the band or performer - BandLogo = 0x13, - //! Logo of the publisher (record company) - PublisherLogo = 0x14 - }; - - Picture(); - Picture(const ByteVector &data); - ~Picture(); - - /*! - * Returns the type of the image. - */ - Type type() const; - - /*! - * Sets the type of the image. - */ - void setType(Type type); - - /*! - * Returns the mime type of the image. This should in most cases be - * "image/png" or "image/jpeg". - */ - String mimeType() const; - - /*! - * Sets the mime type of the image. This should in most cases be - * "image/png" or "image/jpeg". - */ - void setMimeType(const String &m); - - /*! - * Returns a text description of the image. - */ - - String description() const; - - /*! - * Sets a textual description of the image to \a desc. - */ - - void setDescription(const String &desc); - - /*! - * Returns the width of the image. - */ - int width() const; - - /*! - * Sets the width of the image. - */ - void setWidth(int w); - - /*! - * Returns the height of the image. - */ - int height() const; - - /*! - * Sets the height of the image. - */ - void setHeight(int h); - - /*! - * Returns the color depth (in bits-per-pixel) of the image. - */ - int colorDepth() const; - - /*! - * Sets the color depth (in bits-per-pixel) of the image. - */ - void setColorDepth(int depth); - - /*! - * Returns the number of colors used on the image.. - */ - int numColors() const; - - /*! - * Sets the number of colors used on the image (for indexed images). - */ - void setNumColors(int numColors); - - /*! - * Returns the image data. - */ - ByteVector data() const; - - /*! - * Sets the image data. - */ - void setData(const ByteVector &data); - - /*! - * Returns the FLAC metadata block type. - */ - int code() const; - - /*! - * Render the content to the FLAC picture block format. - */ - ByteVector render() const; - - /*! - * Parse the picture data in the FLAC picture block format. - */ - bool parse(const ByteVector &rawData); - - private: - Picture(const Picture &item); - Picture &operator=(const Picture &item); - - class PicturePrivate; - PicturePrivate *d; - }; - - typedef List PictureList; - } // namespace FLAC -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/flacproperties.h b/taglib/include/taglib/flacproperties.h deleted file mode 100644 index e58f9ae..0000000 --- a/taglib/include/taglib/flacproperties.h +++ /dev/null @@ -1,148 +0,0 @@ -/*************************************************************************** - copyright : (C) 2003 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_FLACPROPERTIES_H -#define TAGLIB_FLACPROPERTIES_H - -#include "taglib_export.h" -#include "audioproperties.h" - -namespace TagLib { - - namespace FLAC { - - class File; - - //! An implementation of audio property reading for FLAC - - /*! - * This reads the data from an FLAC stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of FLAC::Properties with the data read from the - * ByteVector \a data. - */ - // BIC: switch to const reference - Properties(ByteVector data, long streamLength, ReadStyle style = Average); - - /*! - * Create an instance of FLAC::Properties with the data read from the - * FLAC::File \a file. - */ - // BIC: remove - Properties(File *file, ReadStyle style = Average); - - /*! - * Destroys this FLAC::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample as read from the FLAC - * identification header. - */ - int bitsPerSample() const; - - /*! - * Returns the sample width as read from the FLAC identification - * header. - * - * \note This method is just an alias of bitsPerSample(). - * - * \deprecated Use bitsPerSample(). - */ - TAGLIB_DEPRECATED int sampleWidth() const; - - /*! - * Return the number of sample frames. - */ - unsigned long long sampleFrames() const; - - /*! - * Returns the MD5 signature of the uncompressed audio stream as read - * from the stream info header. - */ - ByteVector signature() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(const ByteVector &data, long streamLength); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace FLAC -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/generalencapsulatedobjectframe.h b/taglib/include/taglib/generalencapsulatedobjectframe.h deleted file mode 100644 index cb797b8..0000000 --- a/taglib/include/taglib/generalencapsulatedobjectframe.h +++ /dev/null @@ -1,179 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - - copyright : (C) 2006 by Aaron VonderHaar - email : avh4@users.sourceforge.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_GENERALENCAPSULATEDOBJECT_H -#define TAGLIB_GENERALENCAPSULATEDOBJECT_H - -#include "id3v2frame.h" -#include "id3v2header.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An ID3v2 general encapsulated object frame implementation - - /*! - * This is an implementation of ID3v2 general encapsulated objects. - * Arbitrary binary data may be included in tags, stored in GEOB frames. - * There may be multiple GEOB frames in a single tag. Each GEOB it - * labelled with a content description (which may be blank), a required - * mime-type, and a file name (may be blank). The content description - * uniquely identifies the GEOB frame in the tag. - */ - - class TAGLIB_EXPORT GeneralEncapsulatedObjectFrame : public Frame - { - friend class FrameFactory; - - public: - - /*! - * Constructs an empty object frame. The description, file name and text - * encoding should be set manually. - */ - GeneralEncapsulatedObjectFrame(); - - /*! - * Constructs a GeneralEncapsulatedObjectFrame frame based on \a data. - * - * \warning This is \em not data for the encapsulated object, for that use - * setObject(). This constructor is used when reading the frame from the - * disk. - */ - explicit GeneralEncapsulatedObjectFrame(const ByteVector &data); - - /*! - * Destroys the GeneralEncapsulatedObjectFrame instance. - */ - virtual ~GeneralEncapsulatedObjectFrame(); - - /*! - * Returns a string containing the description, file name and mime-type - */ - virtual String toString() const; - - /*! - * Returns the text encoding used for the description and file name. - * - * \see setTextEncoding() - * \see description() - * \see fileName() - */ - String::Type textEncoding() const; - - /*! - * Set the text encoding used for the description and file name. - * - * \see description() - * \see fileName() - */ - void setTextEncoding(String::Type encoding); - - /*! - * Returns the mime type of the object. - */ - String mimeType() const; - - /*! - * Sets the mime type of the object. - */ - void setMimeType(const String &type); - - /*! - * Returns the file name of the object. - * - * \see setFileName() - */ - String fileName() const; - - /*! - * Sets the file name for the object. - * - * \see fileName() - */ - void setFileName(const String &name); - - /*! - * Returns the content description of the object. - * - * \see setDescription() - * \see textEncoding() - * \see setTextEncoding() - */ - - String description() const; - - /*! - * Sets the content description of the object to \a desc. - * - * \see description() - * \see textEncoding() - * \see setTextEncoding() - */ - - void setDescription(const String &desc); - - /*! - * Returns the object data as a ByteVector. - * - * \note ByteVector has a data() method that returns a const char * which - * should make it easy to export this data to external programs. - * - * \see setObject() - * \see mimeType() - */ - ByteVector object() const; - - /*! - * Sets the object data to \a data. \a data should be of the type specified in - * this frame's mime-type specification. - * - * \see object() - * \see mimeType() - * \see setMimeType() - */ - void setObject(const ByteVector &object); - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - GeneralEncapsulatedObjectFrame(const ByteVector &data, Header *h); - GeneralEncapsulatedObjectFrame(const GeneralEncapsulatedObjectFrame &); - GeneralEncapsulatedObjectFrame &operator=(const GeneralEncapsulatedObjectFrame &); - - class GeneralEncapsulatedObjectFramePrivate; - GeneralEncapsulatedObjectFramePrivate *d; - }; - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/id3v1genres.h b/taglib/include/taglib/id3v1genres.h deleted file mode 100644 index 92feb34..0000000 --- a/taglib/include/taglib/id3v1genres.h +++ /dev/null @@ -1,66 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V1GENRE_H -#define TAGLIB_ID3V1GENRE_H - -#include "tmap.h" -#include "tstringlist.h" -#include "taglib_export.h" - -namespace TagLib { - namespace ID3v1 { - - typedef Map GenreMap; - - /*! - * Returns the list of canonical ID3v1 genre names in the order that they - * are listed in the standard. - */ - StringList TAGLIB_EXPORT genreList(); - - /*! - * A "reverse mapping" that goes from the canonical ID3v1 genre name to the - * respective genre number. genreMap()["Rock"] == - */ - GenreMap TAGLIB_EXPORT genreMap(); - - /*! - * Returns the name of the genre at \a index in the ID3v1 genre list. If - * \a index is out of range -- less than zero or greater than 191 -- a null - * string will be returned. - */ - String TAGLIB_EXPORT genre(int index); - - /*! - * Returns the genre index for the (case sensitive) genre \a name. If the - * genre is not in the list 255 (which signifies an unknown genre in ID3v1) - * will be returned. - */ - int TAGLIB_EXPORT genreIndex(const String &name); - } // namespace ID3v1 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/id3v1tag.h b/taglib/include/taglib/id3v1tag.h deleted file mode 100644 index 5803312..0000000 --- a/taglib/include/taglib/id3v1tag.h +++ /dev/null @@ -1,202 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V1TAG_H -#define TAGLIB_ID3V1TAG_H - -#include "tag.h" -#include "tbytevector.h" -#include "taglib_export.h" - -namespace TagLib { - - class File; - - //! An ID3v1 implementation - - namespace ID3v1 { - - //! A abstraction for the string to data encoding in ID3v1 tags. - - /*! - * ID3v1 should in theory always contain ISO-8859-1 (Latin1) data. In - * practice it does not. TagLib by default only supports ISO-8859-1 data - * in ID3v1 tags. - * - * However by subclassing this class and reimplementing parse() and render() - * and setting your reimplementation as the default with - * ID3v1::Tag::setStringHandler() you can define how you would like these - * transformations to be done. - * - * \warning It is advisable not to write non-ISO-8859-1 data to ID3v1 - * tags. Please consider disabling the writing of ID3v1 tags in the case - * that the data is not ISO-8859-1. - * - * \see ID3v1::Tag::setStringHandler() - */ - - class TAGLIB_EXPORT StringHandler - { - TAGLIB_IGNORE_MISSING_DESTRUCTOR - public: - // BIC: Add virtual destructor. - StringHandler(); - - /*! - * Decode a string from \a data. The default implementation assumes that - * \a data is an ISO-8859-1 (Latin1) character array. - */ - virtual String parse(const ByteVector &data) const; - - /*! - * Encode a ByteVector with the data from \a s. The default implementation - * assumes that \a s is an ISO-8859-1 (Latin1) string. If the string is - * does not conform to ISO-8859-1, no value is written. - * - * \warning It is recommended that you not override this method, but - * instead do not write an ID3v1 tag in the case that the data is not - * ISO-8859-1. - */ - virtual ByteVector render(const String &s) const; - }; - - //! The main class in the ID3v1 implementation - - /*! - * This is an implementation of the ID3v1 format. ID3v1 is both the simplest - * and most common of tag formats but is rather limited. Because of its - * pervasiveness and the way that applications have been written around the - * fields that it provides, the generic TagLib::Tag API is a mirror of what is - * provided by ID3v1. - * - * ID3v1 tags should generally only contain Latin1 information. However because - * many applications do not follow this rule there is now support for overriding - * the ID3v1 string handling using the ID3v1::StringHandler class. Please see - * the documentation for that class for more information. - * - * \see StringHandler - * - * \note Most fields are truncated to a maximum of 28-30 bytes. The - * truncation happens automatically when the tag is rendered. - */ - - class TAGLIB_EXPORT Tag : public TagLib::Tag - { - public: - /*! - * Create an ID3v1 tag with default values. - */ - Tag(); - - /*! - * Create an ID3v1 tag and parse the data in \a file starting at - * \a tagOffset. - */ - Tag(File *file, long tagOffset); - - /*! - * Destroys this Tag instance. - */ - virtual ~Tag(); - - /*! - * Renders the in memory values to a ByteVector suitable for writing to - * the file. - */ - ByteVector render() const; - - /*! - * Returns the string "TAG" suitable for usage in locating the tag in a - * file. - */ - static ByteVector fileIdentifier(); - - // Reimplementations. - - virtual String title() const; - virtual String artist() const; - virtual String album() const; - virtual String comment() const; - virtual String genre() const; - virtual unsigned int year() const; - virtual unsigned int track() const; - - virtual void setTitle(const String &s); - virtual void setArtist(const String &s); - virtual void setAlbum(const String &s); - virtual void setComment(const String &s); - virtual void setGenre(const String &s); - virtual void setYear(unsigned int i); - virtual void setTrack(unsigned int i); - - /*! - * Returns the genre in number. - * - * \note Normally 255 indicates that this tag contains no genre. - */ - unsigned int genreNumber() const; - - /*! - * Sets the genre in number to \a i. - * - * \note Valid value is from 0 up to 255. Normally 255 indicates that - * this tag contains no genre. - */ - void setGenreNumber(unsigned int i); - - /*! - * Sets the string handler that decides how the ID3v1 data will be - * converted to and from binary data. - * If the parameter \a handler is null, the previous handler is - * released and default ISO-8859-1 handler is restored. - * - * \note The caller is responsible for deleting the previous handler - * as needed after it is released. - * - * \see StringHandler - */ - static void setStringHandler(const StringHandler *handler); - - protected: - /*! - * Reads from the file specified in the constructor. - */ - void read(); - /*! - * Pareses the body of the tag in \a data. - */ - void parse(const ByteVector &data); - - private: - Tag(const Tag &); - Tag &operator=(const Tag &); - - class TagPrivate; - TagPrivate *d; - }; - } // namespace ID3v1 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/id3v2.h b/taglib/include/taglib/id3v2.h deleted file mode 100644 index 36e7642..0000000 --- a/taglib/include/taglib/id3v2.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef TAGLIB_ID3V2_H -#define TAGLIB_ID3V2_H - -namespace TagLib { - //! An ID3v2 implementation - - /*! - * This is a relatively complete and flexible framework for working with ID3v2 - * tags. - * - * \see ID3v2::Tag - */ - namespace ID3v2 { - /*! - * Used to specify which version of the ID3 standard to use when saving tags. - */ - enum Version { - v3 = 3, //3.2) - */ - - class TAGLIB_EXPORT ExtendedHeader - { - public: - /*! - * Constructs an empty ID3v2 extended header. - */ - ExtendedHeader(); - - /*! - * Destroys the extended header. - */ - virtual ~ExtendedHeader(); - - /*! - * Returns the size of the extended header. This is variable for the - * extended header. - */ - unsigned int size() const; - - /*! - * Sets the data that will be used as the extended header. Since the - * length is not known before the extended header has been parsed, this - * should just be a pointer to the first byte of the extended header. It - * will determine the length internally and make that available through - * size(). - */ - void setData(const ByteVector &data); - - protected: - /*! - * Called by setData() to parse the extended header data. It makes this - * information available through the public API. - */ - void parse(const ByteVector &data); - - private: - ExtendedHeader(const ExtendedHeader &); - ExtendedHeader &operator=(const ExtendedHeader &); - - class ExtendedHeaderPrivate; - ExtendedHeaderPrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/id3v2footer.h b/taglib/include/taglib/id3v2footer.h deleted file mode 100644 index 12c51c3..0000000 --- a/taglib/include/taglib/id3v2footer.h +++ /dev/null @@ -1,82 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V2FOOTER_H -#define TAGLIB_ID3V2FOOTER_H - -#include "taglib_export.h" -#include "tbytevector.h" - -namespace TagLib { - - namespace ID3v2 { - - class Header; - - //! ID3v2 footer implementation - - /*! - * Per the ID3v2 specification, the tag's footer is just a copy of the - * information in the header. As such there is no API for reading the - * data from the header, it can just as easily be done from the header. - * - * In fact, at this point, TagLib does not even parse the footer since - * it is not useful internally. However, if the flag to include a footer - * has been set in the ID3v2::Tag, TagLib will render a footer. - */ - - class TAGLIB_EXPORT Footer - { - public: - /*! - * Constructs an empty ID3v2 footer. - */ - Footer(); - /*! - * Destroys the footer. - */ - virtual ~Footer(); - - /*! - * Returns the size of the footer. Presently this is always 10 bytes. - */ - static unsigned int size(); - - /*! - * Renders the footer based on the data in \a header. - */ - ByteVector render(const Header *header) const; - - private: - Footer(const Footer &); - Footer &operator=(const Footer &); - - class FooterPrivate; - FooterPrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/id3v2frame.h b/taglib/include/taglib/id3v2frame.h deleted file mode 100644 index 5beeddb..0000000 --- a/taglib/include/taglib/id3v2frame.h +++ /dev/null @@ -1,523 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V2FRAME_H -#define TAGLIB_ID3V2FRAME_H - -#include "tstring.h" -#include "tbytevector.h" -#include "taglib_export.h" - -namespace TagLib { - - class StringList; - class PropertyMap; - - namespace ID3v2 { - - class Tag; - class FrameFactory; - - //! ID3v2 frame implementation - - /*! - * This class is the main ID3v2 frame implementation. In ID3v2, a tag is - * split between a collection of frames (which are in turn split into fields - * (Structure, 4) - * (Frames). This class provides an API for - * gathering information about and modifying ID3v2 frames. Functionality - * specific to a given frame type is handed in one of the many subclasses. - */ - - class TAGLIB_EXPORT Frame - { - friend class Tag; - friend class FrameFactory; - friend class TableOfContentsFrame; - friend class ChapterFrame; - - public: - - /*! - * Creates a textual frame which corresponds to a single key in the PropertyMap - * interface. These are all (User)TextIdentificationFrames except TIPL and TMCL, - * all (User)URLLinkFrames, CommentsFrames, and UnsynchronizedLyricsFrame. - */ - static Frame *createTextualFrame(const String &key, const StringList &values); - - /*! - * Destroys this Frame instance. - */ - virtual ~Frame(); - - /*! - * Returns the Frame ID (Structure, 4) - * (Frames, 4) - */ - ByteVector frameID() const; - - /*! - * Returns the size of the frame. - */ - unsigned int size() const; - - /*! - * Returns the size of the frame header - * - * \deprecated This is only accurate for ID3v2.3 or ID3v2.4. Please use - * the call below which accepts an ID3v2 version number. In the next - * non-binary compatible release this will be made into a non-static - * member that checks the internal ID3v2 version. - */ - static unsigned int headerSize(); // BIC: make non-static - - /*! - * Returns the size of the frame header for the given ID3v2 version. - * - * \deprecated Please see the explanation above. - */ - // BIC: remove - static unsigned int headerSize(unsigned int version); - - /*! - * Sets the data that will be used as the frame. Since the length is not - * known before the frame has been parsed, this should just be a pointer to - * the first byte of the frame. It will determine the length internally - * and make that available through size(). - */ - void setData(const ByteVector &data); - - /*! - * Set the text of frame in the sanest way possible. This should only be - * reimplemented in frames where there is some logical mapping to text. - * - * \note If the frame type supports multiple text encodings, this will not - * change the text encoding of the frame; the string will be converted to - * that frame's encoding. Please use the specific APIs of the frame types - * to set the encoding if that is desired. - */ - virtual void setText(const String &text); - - /*! - * This returns the textual representation of the data in the frame. - * Subclasses must reimplement this method to provide a string - * representation of the frame's data. - */ - virtual String toString() const = 0; - - /*! - * Render the frame back to its binary format in a ByteVector. - */ - ByteVector render() const; - - /*! - * Returns the text delimiter that is used between fields for the string - * type \a t. - */ - static ByteVector textDelimiter(String::Type t); - - /*! - * The string with which an instrument name is prefixed to build a key in a PropertyMap; - * used to translate PropertyMaps to TMCL frames. In the current implementation, this - * is "PERFORMER:". - */ - static const String instrumentPrefix; - /*! - * The PropertyMap key prefix which triggers the use of a COMM frame instead of a TXXX - * frame for a non-standard key. In the current implementation, this is "COMMENT:". - */ - static const String commentPrefix; - /*! - * The PropertyMap key prefix which triggers the use of a USLT frame instead of a TXXX - * frame for a non-standard key. In the current implementation, this is "LYRICS:". - */ - static const String lyricsPrefix; - /*! - * The PropertyMap key prefix which triggers the use of a WXXX frame instead of a TXX - * frame for a non-standard key. In the current implementation, this is "URL:". - */ - static const String urlPrefix; - - protected: - class Header; - - /*! - * Constructs an ID3v2 frame using \a data to read the header information. - * All other processing of \a data should be handled in a subclass. - * - * \note This need not contain anything more than a frame ID, but - * \e must contain at least that. - */ - explicit Frame(const ByteVector &data); - - /*! - * This creates an Frame using the header \a h. - * - * The ownership of this header will be assigned to the frame and the - * header will be deleted when the frame is destroyed. - */ - Frame(Header *h); - - /*! - * Returns a pointer to the frame header. - */ - Header *header() const; - - /*! - * Sets the header to \a h. If \a deleteCurrent is true, this will free - * the memory of the current header. - * - * The ownership of this header will be assigned to the frame and the - * header will be deleted when the frame is destroyed. - */ - void setHeader(Header *h, bool deleteCurrent = true); - - /*! - * Called by setData() to parse the frame data. It makes this information - * available through the public API. - */ - void parse(const ByteVector &data); - - /*! - * Called by parse() to parse the field data. It makes this information - * available through the public API. This must be overridden by the - * subclasses. - */ - virtual void parseFields(const ByteVector &data) = 0; - - /*! - * Render the field data back to a binary format in a ByteVector. This - * must be overridden by subclasses. - */ - virtual ByteVector renderFields() const = 0; - - /*! - * Returns a ByteVector containing the field data given the frame data. - * This correctly adjusts for the header size plus any additional frame - * data that's specified in the frame header flags. - */ - ByteVector fieldData(const ByteVector &frameData) const; - - /*! - * Reads a String of type \a encoding from the ByteVector \a data. If \a - * position is passed in it is used both as the starting point and is - * updated to return the position just after the string that has been read. - * This is useful for reading strings sequentially. - */ - String readStringField(const ByteVector &data, String::Type encoding, - int *position = 0); - - /*! - * Checks a the list of string values to see if they can be used with the - * specified encoding and returns the recommended encoding. - */ - // BIC: remove and make non-static - static String::Type checkEncoding(const StringList &fields, - String::Type encoding); - - /*! - * Checks a the list of string values to see if they can be used with the - * specified encoding and returns the recommended encoding. This method - * also checks the ID3v2 version and makes sure the encoding can be used - * in the specified version. - */ - // BIC: remove and make non-static - static String::Type checkEncoding(const StringList &fields, - String::Type encoding, unsigned int version); - - /*! - * Checks a the list of string values to see if they can be used with the - * specified encoding and returns the recommended encoding. This method - * also checks the ID3v2 version and makes sure the encoding can be used - * in the version specified by the frame's header. - */ - String::Type checkTextEncoding(const StringList &fields, - String::Type encoding) const; - - - /*! - * Parses the contents of this frame as PropertyMap. If that fails, the returned - * PropertyMap will be empty, and its unsupportedData() will contain this frame's - * ID. - * BIC: Will be a virtual function in future releases. - */ - PropertyMap asProperties() const; - - /*! - * Returns an appropriate ID3 frame ID for the given free-form tag key. This method - * will return an empty ByteVector if no specialized translation is found. - */ - static ByteVector keyToFrameID(const String &); - - /*! - * Returns a free-form tag name for the given ID3 frame ID. Note that this does not work - * for general frame IDs such as TXXX or WXXX; in such a case an empty string is returned. - */ - static String frameIDToKey(const ByteVector &); - - /*! - * Returns an appropriate TXXX frame description for the given free-form tag key. - */ - static String keyToTXXX(const String &); - - /*! - * Returns a free-form tag name for the given ID3 frame description. - */ - static String txxxToKey(const String &); - - /*! - * This helper function splits the PropertyMap \a original into three ProperytMaps - * \a singleFrameProperties, \a tiplProperties, and \a tmclProperties, such that: - * - \a singleFrameProperties contains only of keys which can be represented with - * exactly one ID3 frame per key. In the current implementation - * this is everything except for the fixed "involved people" keys and keys of the - * form "TextIdentificationFrame::instrumentPrefix" + "instrument", which are - * mapped to a TMCL frame. - * - \a tiplProperties will consist of those keys that are present in - * TextIdentificationFrame::involvedPeopleMap() - * - \a tmclProperties contains the "musician credits" keys which should be mapped - * to a TMCL frame - */ - static void splitProperties(const PropertyMap &original, PropertyMap &singleFrameProperties, - PropertyMap &tiplProperties, PropertyMap &tmclProperties); - - private: - Frame(const Frame &); - Frame &operator=(const Frame &); - - class FramePrivate; - friend class FramePrivate; - FramePrivate *d; - }; - - //! ID3v2 frame header implementation - - /*! - * The ID3v2 Frame Header (Structure, 4) - * - * Every ID3v2::Frame has an associated header that gives some general - * properties of the frame and also makes it possible to identify the frame - * type. - * - * As such when reading an ID3v2 tag ID3v2::FrameFactory first creates the - * frame headers and then creates the appropriate Frame subclass based on - * the type and attaches the header. - */ - - class TAGLIB_EXPORT Frame::Header - { - public: - /*! - * Construct a Frame Header based on \a data. \a data must at least - * contain a 4 byte frame ID, and optionally can contain flag data and the - * frame size. i.e. Just the frame id -- "TALB" -- is a valid value. - * - * \deprecated Please use the constructor below that accepts a version - * number. - */ - TAGLIB_DEPRECATED Header(const ByteVector &data, bool synchSafeInts); - - /*! - * Construct a Frame Header based on \a data. \a data must at least - * contain a 4 byte frame ID, and optionally can contain flag data and the - * frame size. i.e. Just the frame id -- "TALB" -- is a valid value. - * - * \a version should be the ID3v2 version of the tag. - */ - explicit Header(const ByteVector &data, unsigned int version = 4); - - /*! - * Destroys this Header instance. - */ - virtual ~Header(); - - /*! - * Sets the data for the Header. - * - * \deprecated Please use the version below that accepts an ID3v2 version - * number. - */ - TAGLIB_DEPRECATED void setData(const ByteVector &data, bool synchSafeInts); - - /*! - * Sets the data for the Header. \a version should indicate the ID3v2 - * version number of the tag that this frame is contained in. - */ - void setData(const ByteVector &data, unsigned int version = 4); - - /*! - * Returns the Frame ID (Structure, 4) - * (Frames, 4) - */ - ByteVector frameID() const; - - /*! - * Sets the frame's ID to \a id. Only the first four bytes of \a id will - * be used. - * - * \warning This method should in general be avoided. It exists simply to - * provide a mechanism for transforming frames from a deprecated frame type - * to a newer one -- i.e. TYER to TDRC from ID3v2.3 to ID3v2.4. - */ - void setFrameID(const ByteVector &id); - - /*! - * Returns the size of the frame data portion, as set when setData() was - * called or set explicitly via setFrameSize(). - */ - unsigned int frameSize() const; - - /*! - * Sets the size of the frame data portion. - */ - void setFrameSize(unsigned int size); - - /*! - * Returns the ID3v2 version of the header, as passed in from the - * construction of the header or set via setVersion(). - */ - unsigned int version() const; - - /*! - * Sets the ID3v2 version of the header, changing has impact on the - * correct parsing/rendering of frame data. - */ - void setVersion(unsigned int version); - - /*! - * Returns the size of the frame header in bytes. - * - * \deprecated Please use the version of this method that accepts a - * version. This is only accurate for ID3v2.3 and ID3v2.4. This will be - * removed in the next binary incompatible release (2.0) and will be - * replaced with a non-static method that checks the frame version. - */ - // BIC: make non-static - static unsigned int size(); - - /*! - * Returns the size of the frame header in bytes for the ID3v2 version - * that's given. - * - * \deprecated Please see the explanation in the version above. - */ - // BIC: remove - static unsigned int size(unsigned int version); - - /*! - * Returns true if the flag for tag alter preservation is set. - * - * The semantics are a little backwards from what would seem natural - * (setting the preservation flag to throw away the frame), but this - * follows the ID3v2 standard. - * - * \see setTagAlterPreservation() - */ - bool tagAlterPreservation() const; - - /*! - * Sets the flag for preservation of this frame if the tag is set. If - * this is set to true the frame will not be written when the tag is - * saved. - * - * The semantics are a little backwards from what would seem natural - * (setting the preservation flag to throw away the frame), but this - * follows the ID3v2 standard. - * - * \see tagAlterPreservation() - */ - void setTagAlterPreservation(bool discard); - - /*! - * Returns true if the flag for file alter preservation is set. - * - * \note This flag is currently ignored internally in TagLib. - */ - bool fileAlterPreservation() const; - - /*! - * Returns true if the frame is meant to be read only. - * - * \note This flag is currently ignored internally in TagLib. - */ - bool readOnly() const; - - /*! - * Returns true if the flag for the grouping identity is set. - * - * \note This flag is currently ignored internally in TagLib. - */ - bool groupingIdentity() const; - - /*! - * Returns true if compression is enabled for this frame. - * - * \note This flag is currently ignored internally in TagLib. - */ - bool compression() const; - - /*! - * Returns true if encryption is enabled for this frame. - * - * \note This flag is currently ignored internally in TagLib. - */ - bool encryption() const; - -#ifndef DO_NOT_DOCUMENT - bool unsycronisation() const; -#endif - - /*! - * Returns true if unsynchronisation is enabled for this frame. - */ - bool unsynchronisation() const; - - /*! - * Returns true if the flag for a data length indicator is set. - */ - bool dataLengthIndicator() const; - - /*! - * Render the Header back to binary format in a ByteVector. - */ - ByteVector render() const; - - /*! - * \deprecated Use fileAlterPreservation(). - */ - TAGLIB_DEPRECATED bool frameAlterPreservation() const; - - private: - Header(const Header &); - Header &operator=(const Header &); - - class HeaderPrivate; - HeaderPrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/id3v2framefactory.h b/taglib/include/taglib/id3v2framefactory.h deleted file mode 100644 index 95e08d5..0000000 --- a/taglib/include/taglib/id3v2framefactory.h +++ /dev/null @@ -1,169 +0,0 @@ - /*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V2FRAMEFACTORY_H -#define TAGLIB_ID3V2FRAMEFACTORY_H - -#include "taglib_export.h" -#include "tbytevector.h" -#include "id3v2frame.h" -#include "id3v2header.h" - -namespace TagLib { - - namespace ID3v2 { - - class TextIdentificationFrame; - - //! A factory for creating ID3v2 frames during parsing - - /*! - * This factory abstracts away the frame creation process and instantiates - * the appropriate ID3v2::Frame subclasses based on the contents of the - * data. - * - * Reimplementing this factory is the key to adding support for frame types - * not directly supported by TagLib to your application. To do so you would - * subclass this factory and reimplement createFrame(). Then by setting your - * factory to be the default factory in ID3v2::Tag constructor you can - * implement behavior that will allow for new ID3v2::Frame subclasses (also - * provided by you) to be used. - * - * This implements both abstract factory and singleton patterns - * of which more information is available on the web and in software design - * textbooks (Notably Design Patters). - * - * \note You do not need to use this factory to create new frames to add to - * an ID3v2::Tag. You can instantiate frame subclasses directly (with new) - * and add them to a tag using ID3v2::Tag::addFrame() - * - * \see ID3v2::Tag::addFrame() - */ - - class TAGLIB_EXPORT FrameFactory - { - public: - static FrameFactory *instance(); - /*! - * Create a frame based on \a data. \a synchSafeInts should only be set - * false if we are parsing an old tag (v2.3 or older) that does not support - * synchsafe ints. - * - * \deprecated Please use the method below that accepts a ID3v2::Header - * instance in new code. - */ - TAGLIB_DEPRECATED Frame *createFrame(const ByteVector &data, bool synchSafeInts) const; - - /*! - * Create a frame based on \a data. \a version should indicate the ID3v2 - * version of the tag. As ID3v2.4 is the most current version of the - * standard 4 is the default. - * - * \deprecated Please use the method below that accepts a ID3v2::Header - * instance in new code. - */ - TAGLIB_DEPRECATED Frame *createFrame(const ByteVector &data, unsigned int version = 4) const; - - /*! - * \deprecated Use createFrame(const ByteVector &, const Header *) const. - */ - // BIC: remove - Frame *createFrame(const ByteVector &data, Header *tagHeader) const; - /*! - * Create a frame based on \a data. \a tagHeader should be a valid - * ID3v2::Header instance. - */ - // BIC: make virtual - Frame *createFrame(const ByteVector &data, const Header *tagHeader) const; - - /*! - * After a tag has been read, this tries to rebuild some of them - * information, most notably the recording date, from frames that - * have been deprecated and can't be upgraded directly. - */ - // BIC: Make virtual - void rebuildAggregateFrames(ID3v2::Tag *tag) const; - - /*! - * Returns the default text encoding for text frames. If setTextEncoding() - * has not been explicitly called this will only be used for new text - * frames. However, if this value has been set explicitly all frames will be - * converted to this type (unless it's explicitly set differently for the - * individual frame) when being rendered. - * - * \see setDefaultTextEncoding() - */ - String::Type defaultTextEncoding() const; - - /*! - * Set the default text encoding for all text frames that are created to - * \a encoding. If no value is set the frames with either default to the - * encoding type that was parsed and new frames default to Latin1. - * - * Valid string types for ID3v2 tags are Latin1, UTF8, UTF16 and UTF16BE. - * - * \see defaultTextEncoding() - */ - void setDefaultTextEncoding(String::Type encoding); - - protected: - /*! - * Constructs a frame factory. Because this is a singleton this method is - * protected, but may be used for subclasses. - */ - FrameFactory(); - - /*! - * Destroys the frame factory. - */ - virtual ~FrameFactory(); - - /*! - * This method checks for compliance to the current ID3v2 standard (2.4) - * and does nothing in the common case. However if a frame is found that - * is not compatible with the current standard, this method either updates - * the frame or indicates that it should be discarded. - * - * This method with return true (with or without changes to the frame) if - * this frame should be kept or false if it should be discarded. - * - * See the id3v2.4.0-changes.txt document for further information. - */ - virtual bool updateFrame(Frame::Header *header) const; - - private: - FrameFactory(const FrameFactory &); - FrameFactory &operator=(const FrameFactory &); - - static FrameFactory factory; - - class FrameFactoryPrivate; - FrameFactoryPrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/id3v2header.h b/taglib/include/taglib/id3v2header.h deleted file mode 100644 index edfe417..0000000 --- a/taglib/include/taglib/id3v2header.h +++ /dev/null @@ -1,176 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V2HEADER_H -#define TAGLIB_ID3V2HEADER_H - -#include "tbytevector.h" -#include "taglib_export.h" -#include "id3v2.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An implementation of ID3v2 headers - - /*! - * This class implements ID3v2 headers. It attempts to follow, both - * semantically and programmatically, the structure specified in - * the ID3v2 standard. The API is based on the properties of ID3v2 headers - * specified there. If any of the terms used in this documentation are - * unclear please check the specification in the linked section. - * (Structure, 3.1) - */ - - class TAGLIB_EXPORT Header - { - public: - /*! - * Constructs an empty ID3v2 header. - */ - Header(); - - /*! - * Constructs an ID3v2 header based on \a data. parse() is called - * immediately. - */ - Header(const ByteVector &data); - - /*! - * Destroys the header. - */ - virtual ~Header(); - - /*! - * Returns the major version number. (Note: This is the 4, not the 2 in - * ID3v2.4.0. The 2 is implied.) - */ - unsigned int majorVersion() const; - - /*! - * Set the the major version number to \a version. (Note: This is - * the 4, not the 2 in ID3v2.4.0. The 2 is implied.) - * \see majorVersion() - * - * \note This is used by the internal parser; this will not change the - * version which is written and in general should not be called by API - * users. - */ - void setMajorVersion(unsigned int version); - - /*! - * Returns the revision number. (Note: This is the 0, not the 4 in - * ID3v2.4.0. The 2 is implied.) - */ - unsigned int revisionNumber() const; - - /*! - * Returns true if unsynchronisation has been applied to all frames. - */ - bool unsynchronisation() const; - - /*! - * Returns true if an extended header is present in the tag. - */ - bool extendedHeader() const; - - /*! - * Returns true if the experimental indicator flag is set. - */ - bool experimentalIndicator() const; - - /*! - * Returns true if a footer is present in the tag. - */ - bool footerPresent() const; - /*! - * Returns the tag size in bytes. This is the size of the frame content. - * The size of the \e entire tag will be this plus the header size (10 - * bytes) and, if present, the footer size (potentially another 10 bytes). - * - * \note This is the value as read from the header to which TagLib attempts - * to provide an API to; it was not a design decision on the part of TagLib - * to not include the mentioned portions of the tag in the \e size. - * - * \see completeTagSize() - */ - unsigned int tagSize() const; - - /*! - * Returns the tag size, including the header and, if present, the footer - * size. - * - * \see tagSize() - */ - unsigned int completeTagSize() const; - - /*! - * Set the tag size to \a s. - * \see tagSize() - */ - void setTagSize(unsigned int s); - - /*! - * Returns the size of the header. Presently this is always 10 bytes. - */ - static unsigned int size(); - - /*! - * Returns the string used to identify and ID3v2 tag inside of a file. - * Presently this is always "ID3". - */ - static ByteVector fileIdentifier(); - - /*! - * Sets the data that will be used as the header. 10 bytes, starting from - * the beginning of \a data are used. - */ - void setData(const ByteVector &data); - - /*! - * Renders the Header back to binary format. - */ - ByteVector render() const; - - protected: - /*! - * Called by setData() to parse the header data. It makes this information - * available through the public API. - */ - void parse(const ByteVector &data); - - private: - Header(const Header &); - Header &operator=(const Header &); - - class HeaderPrivate; - HeaderPrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/id3v2synchdata.h b/taglib/include/taglib/id3v2synchdata.h deleted file mode 100644 index 0edce13..0000000 --- a/taglib/include/taglib/id3v2synchdata.h +++ /dev/null @@ -1,70 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V2SYNCHDATA_H -#define TAGLIB_ID3V2SYNCHDATA_H - -#include "tbytevector.h" -#include "taglib.h" - -namespace TagLib { - - namespace ID3v2 { - - //! A few functions for ID3v2 synch safe integer conversion - - /*! - * In the ID3v2.4 standard most integer values are encoded as "synch safe" - * integers which are encoded in such a way that they will not give false - * MPEG syncs and confuse MPEG decoders. This namespace provides some - * methods for converting to and from these values to ByteVectors for - * things rendering and parsing ID3v2 data. - */ - - namespace SynchData - { - /*! - * This returns the unsigned integer value of \a data where \a data is a - * ByteVector that contains a \e synchsafe integer (Structure, - * 6.2). The default \a length of - * 4 is used if another value is not specified. - */ - TAGLIB_EXPORT unsigned int toUInt(const ByteVector &data); - - /*! - * Returns a 4 byte (32 bit) synchsafe integer based on \a value. - */ - TAGLIB_EXPORT ByteVector fromUInt(unsigned int value); - - /*! - * Convert the data from unsynchronized data to its original format. - */ - TAGLIB_EXPORT ByteVector decode(const ByteVector &input); - } // namespace SynchData - - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/id3v2tag.h b/taglib/include/taglib/id3v2tag.h deleted file mode 100644 index b0b6174..0000000 --- a/taglib/include/taglib/id3v2tag.h +++ /dev/null @@ -1,411 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ID3V2TAG_H -#define TAGLIB_ID3V2TAG_H - -#include "tag.h" -#include "tbytevector.h" -#include "tstring.h" -#include "tlist.h" -#include "tmap.h" -#include "taglib_export.h" - -#include "id3v2.h" -#include "id3v2framefactory.h" - -namespace TagLib { - - class File; - - namespace ID3v2 { - - class Header; - class ExtendedHeader; - class Footer; - - typedef List FrameList; - typedef Map FrameListMap; - - //! An abstraction for the ISO-8859-1 string to data encoding in ID3v2 tags. - - /*! - * ID3v2 tag can store strings in ISO-8859-1 (Latin1), and TagLib only - * supports genuine ISO-8859-1 by default. However, in practice, non - * ISO-8859-1 encodings are often used instead of ISO-8859-1, such as - * Windows-1252 for western languages, Shift_JIS for Japanese and so on. - * - * Here is an option to read such tags by subclassing this class, - * reimplementing parse() and setting your reimplementation as the default - * with ID3v2::Tag::setStringHandler(). - * - * \note Writing non-ISO-8859-1 tags is not implemented intentionally. - * Use UTF-16 or UTF-8 instead. - * - * \see ID3v2::Tag::setStringHandler() - */ - class TAGLIB_EXPORT Latin1StringHandler - { - public: - Latin1StringHandler(); - virtual ~Latin1StringHandler(); - - /*! - * Decode a string from \a data. The default implementation assumes that - * \a data is an ISO-8859-1 (Latin1) character array. - */ - virtual String parse(const ByteVector &data) const; - }; - - //! The main class in the ID3v2 implementation - - /*! - * This is the main class in the ID3v2 implementation. It serves two - * functions. This first, as is obvious from the public API, is to provide a - * container for the other ID3v2 related classes. In addition, through the - * read() and parse() protected methods, it provides the most basic level of - * parsing. In these methods the ID3v2 tag is extracted from the file and - * split into data components. - * - * ID3v2 tags have several parts, TagLib attempts to provide an interface - * for them all. header(), footer() and extendedHeader() correspond to those - * data structures in the ID3v2 standard and the APIs for the classes that - * they return attempt to reflect this. - * - * Also ID3v2 tags are built up from a list of frames, which are in turn - * have a header and a list of fields. TagLib provides two ways of accessing - * the list of frames that are in a given ID3v2 tag. The first is simply - * via the frameList() method. This is just a list of pointers to the frames. - * The second is a map from the frame type -- i.e. "COMM" for comments -- and - * a list of frames of that type. (In some cases ID3v2 allows for multiple - * frames of the same type, hence this being a map to a list rather than just - * a map to an individual frame.) - * - * More information on the structure of frames can be found in the ID3v2::Frame - * class. - * - * read() and parse() pass binary data to the other ID3v2 class structures, - * they do not handle parsing of flags or fields, for instance. Those are - * handled by similar functions within those classes. - * - * \note All pointers to data structures within the tag will become invalid - * when the tag is destroyed. - * - * \warning Dealing with the nasty details of ID3v2 is not for the faint of - * heart and should not be done without much meditation on the spec. It's - * rather long, but if you're planning on messing with this class and others - * that deal with the details of ID3v2 (rather than the nice, safe, abstract - * TagLib::Tag and friends), it's worth your time to familiarize yourself - * with said spec (which is distributed with the TagLib sources). TagLib - * tries to do most of the work, but with a little luck, you can still - * convince it to generate invalid ID3v2 tags. The APIs for ID3v2 assume a - * working knowledge of ID3v2 structure. You're been warned. - */ - - class TAGLIB_EXPORT Tag : public TagLib::Tag - { - public: - /*! - * Constructs an empty ID3v2 tag. - * - * \note You must create at least one frame for this tag to be valid. - */ - Tag(); - - /*! - * Constructs an ID3v2 tag read from \a file starting at \a tagOffset. - * \a factory specifies which FrameFactory will be used for the - * construction of new frames. - * - * \note You should be able to ignore the \a factory parameter in almost - * all situations. You would want to specify your own FrameFactory - * subclass in the case that you are extending TagLib to support additional - * frame types, which would be incorporated into your factory. - * - * \see FrameFactory - */ - Tag(File *file, long tagOffset, - const FrameFactory *factory = FrameFactory::instance()); - - /*! - * Destroys this Tag instance. - */ - virtual ~Tag(); - - // Reimplementations. - - virtual String title() const; - virtual String artist() const; - virtual String album() const; - virtual String comment() const; - virtual String genre() const; - virtual unsigned int year() const; - virtual unsigned int track() const; - - virtual void setTitle(const String &s); - virtual void setArtist(const String &s); - virtual void setAlbum(const String &s); - virtual void setComment(const String &s); - virtual void setGenre(const String &s); - virtual void setYear(unsigned int i); - virtual void setTrack(unsigned int i); - - virtual bool isEmpty() const; - - /*! - * Returns a pointer to the tag's header. - */ - Header *header() const; - - /*! - * Returns a pointer to the tag's extended header or null if there is no - * extended header. - */ - ExtendedHeader *extendedHeader() const; - - /*! - * Returns a pointer to the tag's footer or null if there is no footer. - * - * \deprecated I don't see any reason to keep this around since there's - * nothing useful to be retrieved from the footer, but well, again, I'm - * prone to change my mind, so this gets to stay around until near a - * release. - */ - TAGLIB_DEPRECATED Footer *footer() const; - - /*! - * Returns a reference to the frame list map. This is an FrameListMap of - * all of the frames in the tag. - * - * This is the most convenient structure for accessing the tag's frames. - * Many frame types allow multiple instances of the same frame type so this - * is a map of lists. In most cases however there will only be a single - * frame of a certain type. - * - * Let's say for instance that you wanted to access the frame for total - * beats per minute -- the TBPM frame. - * - * \code - * TagLib::MPEG::File f("foo.mp3"); - * - * // Check to make sure that it has an ID3v2 tag - * - * if(f.ID3v2Tag()) { - * - * // Get the list of frames for a specific frame type - * - * TagLib::ID3v2::FrameList l = f.ID3v2Tag()->frameListMap()["TBPM"]; - * - * if(!l.isEmpty()) - * std::cout << l.front()->toString() << std::endl; - * } - * - * \endcode - * - * \warning You should not modify this data structure directly, instead - * use addFrame() and removeFrame(). - * - * \see frameList() - */ - const FrameListMap &frameListMap() const; - - /*! - * Returns a reference to the frame list. This is an FrameList of all of - * the frames in the tag in the order that they were parsed. - * - * This can be useful if for example you want iterate over the tag's frames - * in the order that they occur in the tag. - * - * \warning You should not modify this data structure directly, instead - * use addFrame() and removeFrame(). - */ - const FrameList &frameList() const; - - /*! - * Returns the frame list for frames with the id \a frameID or an empty - * list if there are no frames of that type. This is just a convenience - * and is equivalent to: - * - * \code - * frameListMap()[frameID]; - * \endcode - * - * \see frameListMap() - */ - const FrameList &frameList(const ByteVector &frameID) const; - - /*! - * Add a frame to the tag. At this point the tag takes ownership of - * the frame and will handle freeing its memory. - * - * \note Using this method will invalidate any pointers on the list - * returned by frameList() - */ - void addFrame(Frame *frame); - - /*! - * Remove a frame from the tag. If \a del is true the frame's memory - * will be freed; if it is false, it must be deleted by the user. - * - * \note Using this method will invalidate any pointers on the list - * returned by frameList() - */ - void removeFrame(Frame *frame, bool del = true); - - /*! - * Remove all frames of type \a id from the tag and free their memory. - * - * \note Using this method will invalidate any pointers on the list - * returned by frameList() - */ - void removeFrames(const ByteVector &id); - - /*! - * Implements the unified property interface -- export function. - * This function does some work to translate the hard-specified ID3v2 - * frame types into a free-form string-to-stringlist PropertyMap: - * - if ID3v2 frame ID is known by Frame::frameIDToKey(), the returned - * key is used - * - if the frame ID is "TXXX" (user text frame), the description() is - * used as key - * - if the frame ID is "WXXX" (user url frame), - * - if the description is empty or "URL", the key "URL" is used - * - otherwise, the key "URL:" is used; - * - if the frame ID is "COMM" (comments frame), - * - if the description is empty or "COMMENT", the key "COMMENT" - * is used - * - otherwise, the key "COMMENT:" is used; - * - if the frame ID is "USLT" (unsynchronized lyrics), - * - if the description is empty or "LYRICS", the key "LYRICS" is used - * - otherwise, the key "LYRICS:" is used; - * - if the frame ID is "TIPL" (involved peoples list), and if all the - * roles defined in the frame are known in TextIdentificationFrame::involvedPeopleMap(), - * then "=" will be contained in the returned object for each - * - if the frame ID is "TMCL" (musician credit list), then - * "PERFORMER:=" will be contained in the returned - * PropertyMap for each defined musician - * In any other case, the unsupportedData() of the returned object will contain - * the frame's ID and, in case of a frame ID which is allowed to appear more than - * once, the description, separated by a "/". - * - */ - PropertyMap properties() const; - - /*! - * Removes unsupported frames given by \a properties. The elements of - * \a properties must be taken from properties().unsupportedData(); they - * are of one of the following forms: - * - a four-character frame ID, if the ID3 specification allows only one - * frame with that ID (thus, the frame is uniquely determined) - * - frameID + "/" + description(), when the ID is one of "TXXX", "WXXX", - * "COMM", or "USLT", - * - "UNKNOWN/" + frameID, for frames that could not be parsed by TagLib. - * In that case, *all* unknown frames with the given ID will be removed. - */ - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - * See the comments in properties(). - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Render the tag back to binary data, suitable to be written to disk. - */ - ByteVector render() const; - - /*! - * \deprecated Use render(Version) const. - */ - TAGLIB_DEPRECATED ByteVector render(int version) const; - - /*! - * Render the tag back to binary data, suitable to be written to disk. - * - * The \a version parameter specifies whether ID3v2.4 (default) or ID3v2.3 - * should be used. - */ - ByteVector render(Version version) const; - - /*! - * Gets the current string handler that decides how the "Latin-1" data - * will be converted to and from binary data. - * - * \see Latin1StringHandler - */ - static Latin1StringHandler const *latin1StringHandler(); - - /*! - * Sets the string handler that decides how the "Latin-1" data will be - * converted to and from binary data. - * If the parameter \a handler is null, the previous handler is - * released and default ISO-8859-1 handler is restored. - * - * \note The caller is responsible for deleting the previous handler - * as needed after it is released. - * - * \see Latin1StringHandler - */ - static void setLatin1StringHandler(const Latin1StringHandler *handler); - - protected: - /*! - * Reads data from the file specified in the constructor. It does basic - * parsing of the data in the largest chunks. It partitions the tag into - * the Header, the body of the tag (which contains the ExtendedHeader and - * frames) and Footer. - */ - void read(); - - /*! - * This is called by read to parse the body of the tag. It determines if an - * extended header exists and adds frames to the FrameListMap. - */ - void parse(const ByteVector &data); - - /*! - * Sets the value of the text frame with the Frame ID \a id to \a value. - * If the frame does not exist, it is created. - */ - void setTextFrame(const ByteVector &id, const String &value); - - /*! - * Downgrade frames from ID3v2.4 (used internally and by default) to ID3v2.3. - */ - void downgradeFrames(FrameList *existingFrames, FrameList *newFrames) const; - - private: - Tag(const Tag &); - Tag &operator=(const Tag &); - - class TagPrivate; - TagPrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/infotag.h b/taglib/include/taglib/infotag.h deleted file mode 100644 index 431d86c..0000000 --- a/taglib/include/taglib/infotag.h +++ /dev/null @@ -1,193 +0,0 @@ -/*************************************************************************** - copyright : (C) 2012 by Tsuda Kageyu - email : tsuda.kageyu@gmail.com - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_INFOTAG_H -#define TAGLIB_INFOTAG_H - -#include "tag.h" -#include "tmap.h" -#include "tstring.h" -#include "tstringlist.h" -#include "tbytevector.h" -#include "taglib_export.h" - -namespace TagLib { - - class File; - - //! A RIFF INFO tag implementation. - namespace RIFF { - namespace Info { - - typedef Map FieldListMap; - - //! A abstraction for the string to data encoding in Info tags. - - /*! - * RIFF INFO tag has no clear definitions about character encodings. - * In practice, local encoding of each system is largely used and UTF-8 is - * popular too. - * - * Here is an option to read and write tags in your preferred encoding - * by subclassing this class, reimplementing parse() and render() and setting - * your reimplementation as the default with Info::Tag::setStringHandler(). - * - * \see ID3v1::Tag::setStringHandler() - */ - - class TAGLIB_EXPORT StringHandler - { - public: - StringHandler(); - ~StringHandler(); - - /*! - * Decode a string from \a data. The default implementation assumes that - * \a data is an UTF-8 character array. - */ - virtual String parse(const ByteVector &data) const; - - /*! - * Encode a ByteVector with the data from \a s. The default implementation - * assumes that \a s is an UTF-8 string. - */ - virtual ByteVector render(const String &s) const; - }; - - //! The main class in the ID3v2 implementation - - /*! - * This is the main class in the INFO tag implementation. RIFF INFO tag is a - * metadata format found in WAV audio and AVI video files. Though it is a part - * of Microsoft/IBM's RIFF specification, the author could not find the official - * documents about it. So, this implementation is referring to unofficial documents - * online and some applications' behaviors especially Windows Explorer. - */ - class TAGLIB_EXPORT Tag : public TagLib::Tag - { - public: - /*! - * Constructs an empty INFO tag. - */ - Tag(); - - /*! - * Constructs an INFO tag read from \a data which is contents of "LIST" chunk. - */ - Tag(const ByteVector &data); - - virtual ~Tag(); - - // Reimplementations - - virtual String title() const; - virtual String artist() const; - virtual String album() const; - virtual String comment() const; - virtual String genre() const; - virtual unsigned int year() const; - virtual unsigned int track() const; - - virtual void setTitle(const String &s); - virtual void setArtist(const String &s); - virtual void setAlbum(const String &s); - virtual void setComment(const String &s); - virtual void setGenre(const String &s); - virtual void setYear(unsigned int i); - virtual void setTrack(unsigned int i); - - virtual bool isEmpty() const; - - /*! - * Returns a copy of the internal fields of the tag. The returned map directly - * reflects the contents of the "INFO" chunk. - * - * \note Modifying this map does not affect the tag's internal data. - * Use setFieldText() and removeField() instead. - * - * \see setFieldText() - * \see removeField() - */ - FieldListMap fieldListMap() const; - - /* - * Gets the value of the field with the ID \a id. - */ - String fieldText(const ByteVector &id) const; - - /* - * Sets the value of the field with the ID \a id to \a s. - * If the field does not exist, it is created. - * If \s is empty, the field is removed. - * - * \note fieldId must be four-byte long pure ASCII string. This function - * performs nothing if fieldId is invalid. - */ - void setFieldText(const ByteVector &id, const String &s); - - /* - * Removes the field with the ID \a id. - */ - void removeField(const ByteVector &id); - - /*! - * Render the tag back to binary data, suitable to be written to disk. - * - * \note Returns empty ByteVector is the tag contains no fields. - */ - ByteVector render() const; - - /*! - * Sets the string handler that decides how the text data will be - * converted to and from binary data. - * If the parameter \a handler is null, the previous handler is - * released and default UTF-8 handler is restored. - * - * \note The caller is responsible for deleting the previous handler - * as needed after it is released. - * - * \see StringHandler - */ - static void setStringHandler(const StringHandler *handler); - - protected: - /*! - * Pareses the body of the tag in \a data. - */ - void parse(const ByteVector &data); - - - private: - Tag(const Tag &); - Tag &operator=(const Tag &); - - class TagPrivate; - TagPrivate *d; - }; - } // namespace Info -} // namespace RIFF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/itfile.h b/taglib/include/taglib/itfile.h deleted file mode 100644 index 29e575f..0000000 --- a/taglib/include/taglib/itfile.h +++ /dev/null @@ -1,109 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * - * MA 02110-1301 USA * - ***************************************************************************/ - -#ifndef TAGLIB_ITFILE_H -#define TAGLIB_ITFILE_H - -#include "tfile.h" -#include "audioproperties.h" -#include "taglib_export.h" -#include "modfilebase.h" -#include "modtag.h" -#include "itproperties.h" - -namespace TagLib { - - namespace IT { - - class TAGLIB_EXPORT File : public Mod::FileBase { - public: - /*! - * Constructs a Impulse Tracker file from \a file. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - */ - File(FileName file, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Constructs a Impulse Tracker file from \a stream. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - File(IOStream *stream, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - Mod::Tag *tag() const; - - /*! - * Forwards to Mod::Tag::properties(). - * BIC: will be removed once File::toDict() is made virtual - */ - PropertyMap properties() const; - - /*! - * Forwards to Mod::Tag::setProperties(). - * BIC: will be removed once File::setProperties() is made virtual - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the IT::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - IT::Properties *audioProperties() const; - - /*! - * Save the file. - * This is the same as calling save(AllTags); - * - * \note Saving Impulse Tracker tags is not supported. - */ - bool save(); - - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace IT -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/itproperties.h b/taglib/include/taglib/itproperties.h deleted file mode 100644 index d4bce6d..0000000 --- a/taglib/include/taglib/itproperties.h +++ /dev/null @@ -1,107 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_ITPROPERTIES_H -#define TAGLIB_ITPROPERTIES_H - -#include "taglib.h" -#include "audioproperties.h" - -namespace TagLib { - namespace IT { - class TAGLIB_EXPORT Properties : public AudioProperties { - friend class File; - public: - /*! Flag bits. */ - enum { - Stereo = 1, - Vol0MixOptimizations = 2, - UseInstruments = 4, - LinearSlides = 8, - OldEffects = 16, - LinkEffects = 32, - UseMidiPitchController = 64, - RequestEmbeddedMidiConf = 128 - }; - - /*! Special bits. */ - enum { - MessageAttached = 1, - MidiConfEmbedded = 8 - }; - - Properties(AudioProperties::ReadStyle propertiesStyle); - virtual ~Properties(); - - int length() const; - int lengthInSeconds() const; - int lengthInMilliseconds() const; - int bitrate() const; - int sampleRate() const; - int channels() const; - - unsigned short lengthInPatterns() const; - bool stereo() const; - unsigned short instrumentCount() const; - unsigned short sampleCount() const; - unsigned short patternCount() const; - unsigned short version() const; - unsigned short compatibleVersion() const; - unsigned short flags() const; - unsigned short special() const; - unsigned char globalVolume() const; - unsigned char mixVolume() const; - unsigned char tempo() const; - unsigned char bpmSpeed() const; - unsigned char panningSeparation() const; - unsigned char pitchWheelDepth() const; - - void setChannels(int channels); - void setLengthInPatterns(unsigned short lengthInPatterns); - void setInstrumentCount(unsigned short instrumentCount); - void setSampleCount (unsigned short sampleCount); - void setPatternCount(unsigned short patternCount); - void setVersion (unsigned short version); - void setCompatibleVersion(unsigned short compatibleVersion); - void setFlags (unsigned short flags); - void setSpecial (unsigned short special); - void setGlobalVolume(unsigned char globalVolume); - void setMixVolume (unsigned char mixVolume); - void setTempo (unsigned char tempo); - void setBpmSpeed (unsigned char bpmSpeed); - void setPanningSeparation(unsigned char panningSeparation); - void setPitchWheelDepth (unsigned char pitchWheelDepth); - - private: - Properties(const Properties&); - Properties &operator=(const Properties&); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace IT -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/modfile.h b/taglib/include/taglib/modfile.h deleted file mode 100644 index 2d17dbe..0000000 --- a/taglib/include/taglib/modfile.h +++ /dev/null @@ -1,109 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MODFILE_H -#define TAGLIB_MODFILE_H - -#include "tfile.h" -#include "audioproperties.h" -#include "taglib_export.h" -#include "modfilebase.h" -#include "modtag.h" -#include "modproperties.h" - -namespace TagLib { - namespace Mod { - class TAGLIB_EXPORT File : public TagLib::Mod::FileBase - { - public: - /*! - * Constructs a Protracker file from \a file. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - */ - File(FileName file, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Constructs a Protracker file from \a stream. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - File(IOStream *stream, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - Mod::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * Forwards to Mod::Tag::properties(). - */ - PropertyMap properties() const; - - /*! - * Implements the unified property interface -- import function. - * Forwards to Mod::Tag::setProperties(). - */ - PropertyMap setProperties(const PropertyMap &); - /*! - * Returns the Mod::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - Mod::Properties *audioProperties() const; - - /*! - * Save the file. - * This is the same as calling save(AllTags); - * - * \note Saving Protracker tags is not supported. - */ - bool save(); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace Mod -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/modfilebase.h b/taglib/include/taglib/modfilebase.h deleted file mode 100644 index d452b2b..0000000 --- a/taglib/include/taglib/modfilebase.h +++ /dev/null @@ -1,61 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MODFILEBASE_H -#define TAGLIB_MODFILEBASE_H - -#include "taglib.h" -#include "tfile.h" -#include "tstring.h" -#include "tlist.h" -#include "taglib_export.h" - -#include - -namespace TagLib { - namespace Mod { - class TAGLIB_EXPORT FileBase : public TagLib::File - { - protected: - FileBase(FileName file); - FileBase(IOStream *stream); - - void writeString(const String &s, unsigned long size, char padding = 0); - void writeByte(unsigned char byte); - void writeU16L(unsigned short number); - void writeU32L(unsigned long number); - void writeU16B(unsigned short number); - void writeU32B(unsigned long number); - - bool readString(String &s, unsigned long size); - bool readByte(unsigned char &byte); - bool readU16L(unsigned short &number); - bool readU32L(unsigned long &number); - bool readU16B(unsigned short &number); - bool readU32B(unsigned long &number); - }; - } // namespace Mod -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/modproperties.h b/taglib/include/taglib/modproperties.h deleted file mode 100644 index 51bd924..0000000 --- a/taglib/include/taglib/modproperties.h +++ /dev/null @@ -1,66 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MODPROPERTIES_H -#define TAGLIB_MODPROPERTIES_H - -#include "taglib.h" -#include "audioproperties.h" - -namespace TagLib { - namespace Mod { - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - Properties(AudioProperties::ReadStyle propertiesStyle); - virtual ~Properties(); - - int length() const; - int lengthInSeconds() const; - int lengthInMilliseconds() const; - int bitrate() const; - int sampleRate() const; - int channels() const; - - unsigned int instrumentCount() const; - unsigned char lengthInPatterns() const; - - void setChannels(int channels); - - void setInstrumentCount(unsigned int sampleCount); - void setLengthInPatterns(unsigned char lengthInPatterns); - - private: - friend class File; - - Properties(const Properties&); - Properties &operator=(const Properties&); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace Mod -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/modtag.h b/taglib/include/taglib/modtag.h deleted file mode 100644 index f51a2e4..0000000 --- a/taglib/include/taglib/modtag.h +++ /dev/null @@ -1,189 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MODTAG_H -#define TAGLIB_MODTAG_H - -#include "tag.h" - -namespace TagLib { - namespace Mod { - /*! - * Tags for module files (Mod, S3M, IT, XM). - * - * Note that only the \a title is supported as such by most - * module file formats. Except for XM files the \a trackerName - * is derived from the file format or the flavour of the file - * format. For XM files it is stored in the file. - * - * The \a comment tag is not strictly supported by module files, - * but it is common practice to abuse instrument/sample/pattern - * names as multiline comments. TagLib does so as well. - */ - class TAGLIB_EXPORT Tag : public TagLib::Tag - { - public: - Tag(); - virtual ~Tag(); - - /*! - * Returns the track name; if no track name is present in the tag - * String::null will be returned. - */ - virtual String title() const; - - /*! - * Not supported by module files. Therefore always returns String::null. - */ - virtual String artist() const; - - /*! - * Not supported by module files. Therefore always returns String::null. - */ - virtual String album() const; - - /*! - * Returns the track comment derived from the instrument/sample/pattern - * names; if no comment is present in the tag String::null will be - * returned. - */ - virtual String comment() const; - - /*! - * Not supported by module files. Therefore always returns String::null. - */ - virtual String genre() const; - - /*! - * Not supported by module files. Therefore always returns 0. - */ - virtual unsigned int year() const; - - /*! - * Not supported by module files. Therefore always returns 0. - */ - virtual unsigned int track() const; - - /*! - * 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 - * (Mod, S3M, IT) this is derived from the file type or the flavour of - * the file type. Therefore only XM files might have an empty - * (String::null) tracker name. - */ - String trackerName() const; - - /*! - * Sets the title to \a title. If \a title is String::null then this - * value will be cleared. - * - * The length limits per file type are (1 character = 1 byte): - * Mod 20 characters, S3M 27 characters, IT 25 characters and XM 20 - * characters. - */ - virtual void setTitle(const String &title); - - /*! - * Not supported by module files and therefore ignored. - */ - virtual void setArtist(const String &artist); - - /*! - * Not supported by module files and therefore ignored. - */ - virtual void setAlbum(const String &album); - - /*! - * Sets the comment to \a comment. If \a comment is String::null then - * this value will be cleared. - * - * Note that module file formats don't actually support a comment tag. - * Instead the names of instruments/patterns/samples are abused as - * a multiline comment. Because of this the number of lines in a - * module file is fixed to the number of instruments/patterns/samples. - * - * Also note that the instrument/pattern/sample name length is limited - * an thus the line length in comments are limited. Too big comments - * will be truncated. - * - * The line length limits per file type are (1 character = 1 byte): - * Mod 22 characters, S3M 27 characters, IT 25 characters and XM 22 - * characters. - */ - virtual void setComment(const String &comment); - - /*! - * Not supported by module files and therefore ignored. - */ - virtual void setGenre(const String &genre); - - /*! - * Not supported by module files and therefore ignored. - */ - virtual void setYear(unsigned int year); - - /*! - * Not supported by module files and therefore ignored. - */ - virtual void setTrack(unsigned int track); - - /*! - * Sets the tracker name to \a trackerName. If \a trackerName is - * String::null then this value will be cleared. - * - * Note that only XM files support this tag. Setting the - * tracker name for other module file formats will be ignored. - * - * The length of this tag is limited to 20 characters (1 character - * = 1 byte). - */ - void setTrackerName(const String &trackerName); - - /*! - * Implements the unified property interface -- export function. - * Since the module tag is very limited, the exported map is as well. - */ - PropertyMap properties() const; - - /*! - * Implements the unified property interface -- import function. - * Because of the limitations of the module file tag, any tags besides - * COMMENT, TITLE and, if it is an XM file, TRACKERNAME, will be - * returned. Additionally, if the map contains tags with multiple values, - * all but the first will be contained in the returned map of unsupported - * properties. - */ - PropertyMap setProperties(const PropertyMap &); - - private: - Tag(const Tag &); - Tag &operator=(const Tag &); - - class TagPrivate; - TagPrivate *d; - }; - } // namespace Mod -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/mp4atom.h b/taglib/include/taglib/mp4atom.h deleted file mode 100644 index 0a0669e..0000000 --- a/taglib/include/taglib/mp4atom.h +++ /dev/null @@ -1,107 +0,0 @@ -/************************************************************************** - copyright : (C) 2007,2011 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -// This file is not part of the public API! - -#ifndef DO_NOT_DOCUMENT - -#ifndef TAGLIB_MP4ATOM_H -#define TAGLIB_MP4ATOM_H - -#include "tfile.h" -#include "tlist.h" - -namespace TagLib { - namespace MP4 { - class Atom; - typedef TagLib::List AtomList; - - enum AtomDataType - { - TypeImplicit = 0, // for use with tags for which no type needs to be indicated because only one type is allowed - TypeUTF8 = 1, // without any count or null terminator - TypeUTF16 = 2, // also known as UTF-16BE - TypeSJIS = 3, // deprecated unless it is needed for special Japanese characters - TypeHTML = 6, // the HTML file header specifies which HTML version - TypeXML = 7, // the XML header must identify the DTD or schemas - TypeUUID = 8, // also known as GUID; stored as 16 bytes in binary (valid as an ID) - TypeISRC = 9, // stored as UTF-8 text (valid as an ID) - TypeMI3P = 10, // stored as UTF-8 text (valid as an ID) - TypeGIF = 12, // (deprecated) a GIF image - TypeJPEG = 13, // a JPEG image - TypePNG = 14, // a PNG image - TypeURL = 15, // absolute, in UTF-8 characters - TypeDuration = 16, // in milliseconds, 32-bit integer - TypeDateTime = 17, // in UTC, counting seconds since midnight, January 1, 1904; 32 or 64-bits - TypeGenred = 18, // a list of enumerated values - TypeInteger = 21, // a signed big-endian integer with length one of { 1,2,3,4,8 } bytes - TypeRIAAPA = 24, // RIAA parental advisory; { -1=no, 1=yes, 0=unspecified }, 8-bit integer - TypeUPC = 25, // Universal Product Code, in text UTF-8 format (valid as an ID) - TypeBMP = 27, // Windows bitmap image - TypeUndefined = 255 // undefined - }; - - struct AtomData { - AtomData(AtomDataType type, ByteVector data) : type(type), locale(0), data(data) {} - AtomDataType type; - int locale; - ByteVector data; - }; - - typedef TagLib::List AtomDataList; - - class TAGLIB_EXPORT Atom - { - public: - Atom(File *file); - ~Atom(); - Atom *find(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0); - bool path(AtomList &path, const char *name1, const char *name2 = 0, const char *name3 = 0); - AtomList findall(const char *name, bool recursive = false); - long offset; - long length; - TagLib::ByteVector name; - AtomList children; - private: - static const int numContainers = 11; - static const char *const containers[11]; - }; - - //! Root-level atoms - class TAGLIB_EXPORT Atoms - { - public: - Atoms(File *file); - ~Atoms(); - Atom *find(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0); - AtomList path(const char *name1, const char *name2 = 0, const char *name3 = 0, const char *name4 = 0); - AtomList atoms; - }; - } // namespace MP4 -} // namespace TagLib - -#endif - -#endif diff --git a/taglib/include/taglib/mp4coverart.h b/taglib/include/taglib/mp4coverart.h deleted file mode 100644 index 6368480..0000000 --- a/taglib/include/taglib/mp4coverart.h +++ /dev/null @@ -1,79 +0,0 @@ -/************************************************************************** - copyright : (C) 2009 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MP4COVERART_H -#define TAGLIB_MP4COVERART_H - -#include "tlist.h" -#include "tbytevector.h" -#include "taglib_export.h" -#include "mp4atom.h" - -namespace TagLib { - namespace MP4 { - class TAGLIB_EXPORT CoverArt - { - public: - /*! - * This describes the image type. - */ - enum Format { - JPEG = TypeJPEG, - PNG = TypePNG, - BMP = TypeBMP, - GIF = TypeGIF, - Unknown = TypeImplicit, - }; - - CoverArt(Format format, const ByteVector &data); - ~CoverArt(); - - CoverArt(const CoverArt &item); - - /*! - * Copies the contents of \a item into this CoverArt. - */ - CoverArt &operator=(const CoverArt &item); - - /*! - * Exchanges the content of the CoverArt by the content of \a item. - */ - void swap(CoverArt &item); - - //! Format of the image - Format format() const; - - //! The image data - ByteVector data() const; - - private: - class CoverArtPrivate; - CoverArtPrivate *d; - }; - - typedef List CoverArtList; - } // namespace MP4 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/mp4file.h b/taglib/include/taglib/mp4file.h deleted file mode 100644 index b8f0a7c..0000000 --- a/taglib/include/taglib/mp4file.h +++ /dev/null @@ -1,160 +0,0 @@ -/************************************************************************** - copyright : (C) 2007 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MP4FILE_H -#define TAGLIB_MP4FILE_H - -#include "tag.h" -#include "tfile.h" -#include "taglib_export.h" -#include "mp4properties.h" -#include "mp4tag.h" - -namespace TagLib { - //! An implementation of MP4 (AAC, ALAC, ...) metadata - namespace MP4 { - class Atoms; - - /*! - * This implements and provides an interface for MP4 files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to MP4 files. - */ - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * This set of flags is used for strip() and is suitable for - * being OR-ed together. - */ - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches MP4 tags. - MP4 = 0x0001, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs an MP4 file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle audioPropertiesStyle = Properties::Average); - - /*! - * Constructs an MP4 file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle audioPropertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns a pointer to the MP4 tag of the file. - * - * MP4::Tag implements the tag interface, so this serves as the - * reimplementation of TagLib::File::tag(). - * - * \note The Tag is still owned by the MP4::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - */ - Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - */ - PropertyMap properties() const; - - /*! - * Removes unsupported properties. Forwards to the actual Tag's - * removeUnsupportedProperties() function. - */ - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the MP4 audio properties for this file. - */ - Properties *audioProperties() const; - - /*! - * Save the file. - * - * This returns true if the save was successful. - */ - bool save(); - - /*! - * This will strip the tags that match the OR-ed together TagTypes from the - * file. By default it strips all tags. It returns true if the tags are - * successfully stripped. - * - * \note This will update the file immediately. - */ - bool strip(int tags = AllTags); - - /*! - * Returns whether or not the file on disk actually has an MP4 tag, or the - * file has a Metadata Item List (ilst) atom. - */ - bool hasMP4Tag() const; - - /*! - * Returns whether or not the given \a stream can be opened as an ASF - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace MP4 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/mp4item.h b/taglib/include/taglib/mp4item.h deleted file mode 100644 index 526c3a6..0000000 --- a/taglib/include/taglib/mp4item.h +++ /dev/null @@ -1,88 +0,0 @@ -/************************************************************************** - copyright : (C) 2007 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MP4ITEM_H -#define TAGLIB_MP4ITEM_H - -#include "tstringlist.h" -#include "mp4coverart.h" -#include "taglib_export.h" - -namespace TagLib { - namespace MP4 { - class TAGLIB_EXPORT Item - { - public: - struct IntPair { - int first, second; - }; - - Item(); - Item(const Item &item); - - /*! - * Copies the contents of \a item into this Item. - */ - Item &operator=(const Item &item); - - /*! - * Exchanges the content of the Item by the content of \a item. - */ - void swap(Item &item); - - ~Item(); - - Item(int value); - Item(unsigned char value); - Item(unsigned int value); - Item(long long value); - Item(bool value); - Item(int first, int second); - Item(const StringList &value); - Item(const ByteVectorList &value); - Item(const CoverArtList &value); - - void setAtomDataType(AtomDataType type); - AtomDataType atomDataType() const; - - int toInt() const; - unsigned char toByte() const; - unsigned int toUInt() const; - long long toLongLong() const; - bool toBool() const; - IntPair toIntPair() const; - StringList toStringList() const; - ByteVectorList toByteVectorList() const; - CoverArtList toCoverArtList() const; - - bool isValid() const; - - private: - class ItemPrivate; - ItemPrivate *d; - }; - } // namespace MP4 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/mp4properties.h b/taglib/include/taglib/mp4properties.h deleted file mode 100644 index 5ad3f21..0000000 --- a/taglib/include/taglib/mp4properties.h +++ /dev/null @@ -1,115 +0,0 @@ -/************************************************************************** - copyright : (C) 2007 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MP4PROPERTIES_H -#define TAGLIB_MP4PROPERTIES_H - -#include "taglib_export.h" -#include "audioproperties.h" - -namespace TagLib { - namespace MP4 { - class Atoms; - class File; - - //! An implementation of MP4 audio properties - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - enum Codec { - Unknown = 0, - AAC, - ALAC - }; - - Properties(File *file, Atoms *atoms, ReadStyle style = Average); - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample. - */ - virtual int bitsPerSample() const; - - /*! - * Returns whether or not the file is encrypted. - */ - bool isEncrypted() const; - - /*! - * Returns the codec used in the file. - */ - Codec codec() const; - - private: - void read(File *file, Atoms *atoms); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace MP4 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/mp4tag.h b/taglib/include/taglib/mp4tag.h deleted file mode 100644 index 42b3d4b..0000000 --- a/taglib/include/taglib/mp4tag.h +++ /dev/null @@ -1,164 +0,0 @@ -/************************************************************************** - copyright : (C) 2007,2011 by Lukáš Lalinský - email : lalinsky@gmail.com - **************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MP4TAG_H -#define TAGLIB_MP4TAG_H - -#include "tag.h" -#include "tbytevectorlist.h" -#include "tfile.h" -#include "tmap.h" -#include "tstringlist.h" -#include "taglib_export.h" -#include "mp4atom.h" -#include "mp4item.h" - -namespace TagLib { - namespace MP4 { - /*! - * \deprecated Use ItemMap. - */ - TAGLIB_DEPRECATED typedef TagLib::Map ItemListMap; - typedef TagLib::Map ItemMap; - - class TAGLIB_EXPORT Tag: public TagLib::Tag - { - public: - Tag(); - Tag(TagLib::File *file, Atoms *atoms); - virtual ~Tag(); - bool save(); - - virtual String title() const; - virtual String artist() const; - virtual String album() const; - virtual String comment() const; - virtual String genre() const; - virtual unsigned int year() const; - virtual unsigned int track() const; - - virtual void setTitle(const String &value); - virtual void setArtist(const String &value); - virtual void setAlbum(const String &value); - virtual void setComment(const String &value); - virtual void setGenre(const String &value); - virtual void setYear(unsigned int value); - virtual void setTrack(unsigned int value); - - virtual bool isEmpty() const; - - /*! - * \deprecated Use the item() and setItem() API instead. - */ - TAGLIB_DEPRECATED ItemMap &itemListMap(); - - /*! - * Returns a string-keyed map of the MP4::Items for this tag. - */ - const ItemMap &itemMap() const; - - /*! - * \return The item, if any, corresponding to \a key. - */ - Item item(const String &key) const; - - /*! - * Sets the value of \a key to \a value, overwriting any previous value. - */ - void setItem(const String &key, const Item &value); - - /*! - * Removes the entry with \a key from the tag, or does nothing if it does - * not exist. - */ - void removeItem(const String &key); - - /*! - * \return True if the tag contains an entry for \a key. - */ - bool contains(const String &key) const; - - /*! - * Saves the associated file with the tag stripped. - */ - bool strip(); - - PropertyMap properties() const; - void removeUnsupportedProperties(const StringList& properties); - PropertyMap setProperties(const PropertyMap &properties); - - protected: - /*! - * Sets the value of \a key to \a value, overwriting any previous value. - * If \a value is empty, the item is removed. - */ - void setTextItem(const String &key, const String &value); - - private: - AtomDataList parseData2(const Atom *atom, int expectedFlags = -1, - bool freeForm = false); - ByteVectorList parseData(const Atom *atom, int expectedFlags = -1, - bool freeForm = false); - void parseText(const Atom *atom, int expectedFlags = 1); - void parseFreeForm(const Atom *atom); - void parseInt(const Atom *atom); - void parseByte(const Atom *atom); - void parseUInt(const Atom *atom); - void parseLongLong(const Atom *atom); - void parseGnre(const Atom *atom); - void parseIntPair(const Atom *atom); - void parseBool(const Atom *atom); - void parseCovr(const Atom *atom); - - ByteVector padIlst(const ByteVector &data, int length = -1) const; - ByteVector renderAtom(const ByteVector &name, const ByteVector &data) const; - ByteVector renderData(const ByteVector &name, int flags, - const ByteVectorList &data) const; - ByteVector renderText(const ByteVector &name, const Item &item, - int flags = TypeUTF8) const; - ByteVector renderFreeForm(const String &name, const Item &item) const; - ByteVector renderBool(const ByteVector &name, const Item &item) const; - ByteVector renderInt(const ByteVector &name, const Item &item) const; - ByteVector renderByte(const ByteVector &name, const Item &item) const; - ByteVector renderUInt(const ByteVector &name, const Item &item) const; - ByteVector renderLongLong(const ByteVector &name, const Item &item) const; - ByteVector renderIntPair(const ByteVector &name, const Item &item) const; - ByteVector renderIntPairNoTrailing(const ByteVector &name, const Item &item) const; - ByteVector renderCovr(const ByteVector &name, const Item &item) const; - - void updateParents(const AtomList &path, long delta, int ignore = 0); - void updateOffsets(long delta, long offset); - - void saveNew(ByteVector data); - void saveExisting(ByteVector data, const AtomList &path); - - void addItem(const String &name, const Item &value); - - class TagPrivate; - TagPrivate *d; - }; - } // namespace MP4 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/mpcfile.h b/taglib/include/taglib/mpcfile.h deleted file mode 100644 index c983673..0000000 --- a/taglib/include/taglib/mpcfile.h +++ /dev/null @@ -1,238 +0,0 @@ -/*************************************************************************** - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MPCFILE_H -#define TAGLIB_MPCFILE_H - -#include "taglib_export.h" -#include "tfile.h" -#include "tag.h" - -#include "mpcproperties.h" - -#include "tlist.h" - -namespace TagLib { - - class Tag; - - namespace ID3v1 { class Tag; } - namespace APE { class Tag; } - - //! An implementation of MPC metadata - - /*! - * This is implementation of MPC metadata. - * - * This supports ID3v1 and APE (v1 and v2) style comments as well as reading stream - * properties from the file. ID3v2 tags are invalid in MPC-files, but will be skipped - * and ignored. - */ - - namespace MPC { - - //! An implementation of TagLib::File with MPC specific methods - - /*! - * This implements and provides an interface for MPC files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to MPC files. - * The only invalid tag combination supported is an ID3v1 tag after an APE tag. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * This set of flags is used for various operations and is suitable for - * being OR-ed together. - */ - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches ID3v1 tags. - ID3v1 = 0x0001, - //! Matches ID3v2 tags. - ID3v2 = 0x0002, - //! Matches APE tags. - APE = 0x0004, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs an MPC file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an MPC file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the Tag for this file. This will be an APE tag, an ID3v1 tag - * or a combination of the two. - */ - virtual TagLib::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * If the file contains both an APE and an ID3v1 tag, only the APE - * tag will be converted to the PropertyMap. - */ - PropertyMap properties() const; - - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - * Affects only the APEv2 tag which will be created if necessary. - * If an ID3v1 tag exists, it will be updated as well. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the MPC::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Saves the file. - * - * This returns true if the save was successful. - */ - virtual bool save(); - - /*! - * Returns a pointer to the ID3v1 tag of the file. - * - * If \a create is false (the default) this returns a null pointer - * if there is no valid APE tag. If \a create is true it will create - * an APE tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v1 tag. Use hasID3v1Tag() to check if the file - * on disk actually has an ID3v1 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v1Tag() - */ - ID3v1::Tag *ID3v1Tag(bool create = false); - - /*! - * Returns a pointer to the APE tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid APE tag. If \a create is true it will create - * an APE tag if one does not exist and returns a valid pointer. If - * there already be an ID3v1 tag, the new APE tag will be placed before it. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an APE tag. Use hasAPETag() to check if the file - * on disk actually has an APE tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasAPETag() - */ - APE::Tag *APETag(bool create = false); - - /*! - * This will remove the tags that match the OR-ed together TagTypes from the - * file. By default it removes all tags. - * - * \warning This will also invalidate pointers to the tags - * as their memory will be freed. - * - * \note In order to make the removal permanent save() still needs to be called. - */ - void strip(int tags = AllTags); - - /*! - * \deprecated Use strip(). - * \see strip - */ - TAGLIB_DEPRECATED void remove(int tags = AllTags); - - /*! - * Returns whether or not the file on disk actually has an ID3v1 tag. - * - * \see ID3v1Tag() - */ - bool hasID3v1Tag() const; - - /*! - * Returns whether or not the file on disk actually has an APE tag. - * - * \see APETag() - */ - bool hasAPETag() const; - - /*! - * Returns whether or not the given \a stream can be opened as an MPC - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace MPC -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/mpcproperties.h b/taglib/include/taglib/mpcproperties.h deleted file mode 100644 index 1db925d..0000000 --- a/taglib/include/taglib/mpcproperties.h +++ /dev/null @@ -1,158 +0,0 @@ -/*************************************************************************** - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MPCPROPERTIES_H -#define TAGLIB_MPCPROPERTIES_H - -#include "taglib_export.h" -#include "audioproperties.h" - -namespace TagLib { - - namespace MPC { - - class File; - - static const unsigned int HeaderSize = 8 * 7; - - //! An implementation of audio property reading for MPC - - /*! - * This reads the data from an MPC stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of MPC::Properties with the data read from the - * ByteVector \a data. - * - * This constructor is deprecated. It only works for MPC version up to 7. - */ - Properties(const ByteVector &data, long streamLength, ReadStyle style = Average); - - /*! - * Create an instance of MPC::Properties with the data read directly - * from a MPC::File. - */ - Properties(File *file, long streamLength, ReadStyle style = Average); - - /*! - * Destroys this MPC::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the version of the bitstream (SV4-SV8) - */ - int mpcVersion() const; - - unsigned int totalFrames() const; - unsigned int sampleFrames() const; - - /*! - * Returns the track gain as an integer value, - * to convert to dB: trackGain in dB = 64.82 - (trackGain / 256) - */ - int trackGain() const; - - /*! - * Returns the track peak as an integer value, - * to convert to dB: trackPeak in dB = trackPeak / 256 - * to convert to floating [-1..1]: trackPeak = 10^(trackPeak / 256 / 20)/32768 - */ - int trackPeak() const; - - /*! - * Returns the album gain as an integer value, - * to convert to dB: albumGain in dB = 64.82 - (albumGain / 256) - */ - int albumGain() const; - - /*! - * Returns the album peak as an integer value, - * to convert to dB: albumPeak in dB = albumPeak / 256 - * to convert to floating [-1..1]: albumPeak = 10^(albumPeak / 256 / 20)/32768 - */ - int albumPeak() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void readSV7(const ByteVector &data, long streamLength); - void readSV8(File *file, long streamLength); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace MPC -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/mpegfile.h b/taglib/include/taglib/mpegfile.h deleted file mode 100644 index 381d89a..0000000 --- a/taglib/include/taglib/mpegfile.h +++ /dev/null @@ -1,387 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MPEGFILE_H -#define TAGLIB_MPEGFILE_H - -#include "taglib_export.h" -#include "tfile.h" -#include "tag.h" - -#include "mpegproperties.h" - -#include "id3v2.h" - -namespace TagLib { - - namespace ID3v2 { class Tag; class FrameFactory; } - namespace ID3v1 { class Tag; } - namespace APE { class Tag; } - - //! An implementation of TagLib::File with MPEG (MP3) specific methods - - namespace MPEG { - - //! An MPEG file class with some useful methods specific to MPEG - - /*! - * This implements the generic TagLib::File API and additionally provides - * access to properties that are distinct to MPEG files, notably access - * to the different ID3 tags. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * This set of flags is used for various operations and is suitable for - * being OR-ed together. - */ - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches ID3v1 tags. - ID3v1 = 0x0001, - //! Matches ID3v2 tags. - ID3v2 = 0x0002, - //! Matches APE tags. - APE = 0x0004, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs an MPEG file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - * - * \deprecated This constructor will be dropped in favor of the one below - * in a future version. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an MPEG file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * If this file contains and ID3v2 tag the frames will be created using - * \a frameFactory. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - // BIC: merge with the above constructor - File(FileName file, ID3v2::FrameFactory *frameFactory, - bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an MPEG file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * If this file contains and ID3v2 tag the frames will be created using - * \a frameFactory. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, ID3v2::FrameFactory *frameFactory, - bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns a pointer to a tag that is the union of the ID3v2 and ID3v1 - * tags. The ID3v2 tag is given priority in reading the information -- if - * requested information exists in both the ID3v2 tag and the ID3v1 tag, - * the information from the ID3v2 tag will be returned. - * - * If you would like more granular control over the content of the tags, - * with the concession of generality, use the tag-type specific calls. - * - * \note As this tag is not implemented as an ID3v2 tag or an ID3v1 tag, - * but a union of the two this pointer may not be cast to the specific - * tag types. - * - * \see ID3v1Tag() - * \see ID3v2Tag() - * \see APETag() - */ - virtual Tag *tag() const; - - /*! - * Implements the reading part of the unified property interface. - * If the file contains more than one tag, only the - * first one (in the order ID3v2, APE, ID3v1) will be converted to the - * PropertyMap. - */ - PropertyMap properties() const; - - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the writing part of the unified tag dictionary interface. - * In order to avoid problems with deprecated tag formats, this method - * always creates an ID3v2 tag if necessary. - * If an ID3v1 tag exists, it will be updated as well, within the - * limitations of that format. - * The returned PropertyMap refers to the ID3v2 tag only. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the MPEG::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Save the file. If at least one tag -- ID3v1 or ID3v2 -- exists this - * will duplicate its content into the other tag. This returns true - * if saving was successful. - * - * If neither exists or if both tags are empty, this will strip the tags - * from the file. - * - * This is the same as calling save(AllTags); - * - * If you would like more granular control over the content of the tags, - * with the concession of generality, use parameterized save call below. - * - * \see save(int tags) - */ - virtual bool save(); - - /*! - * Save the file. This will attempt to save all of the tag types that are - * specified by OR-ing together TagTypes values. The save() method above - * uses AllTags. This returns true if saving was successful. - * - * This strips all tags not included in the mask, but does not modify them - * in memory, so later calls to save() which make use of these tags will - * remain valid. This also strips empty tags. - */ - bool save(int tags); - - /*! - * \deprecated Use save(int, StripTags, ID3v2::Version, DuplicateTags). - */ - // BIC: combine with the above method - TAGLIB_DEPRECATED bool save(int tags, bool stripOthers); - - /*! - * \deprecated Use save(int, StripTags, ID3v2::Version, DuplicateTags). - */ - // BIC: combine with the above method - TAGLIB_DEPRECATED bool save(int tags, bool stripOthers, int id3v2Version); - - /*! - * \deprecated Use save(int, StripTags, ID3v2::Version, DuplicateTags). - */ - // BIC: combine with the above method - TAGLIB_DEPRECATED bool save(int tags, bool stripOthers, int id3v2Version, bool duplicateTags); - - /*! - * Save the file. This will attempt to save all of the tag types that are - * specified by OR-ing together TagTypes values. - * - * \a strip can be set to strip all tags except those in \a tags. Those - * tags will not be modified in memory, and thus remain valid. - * - * \a version specifies the ID3v2 version to be used for writing tags. By - * default, the latest standard, ID3v2.4 is used. - * - * If \a duplicate is set to DuplicateTags and at least one tag -- ID3v1 - * or ID3v2 -- exists this will duplicate its content into the other tag. - */ - bool save(int tags, StripTags strip, - ID3v2::Version version = ID3v2::v4, - DuplicateTags duplicate = Duplicate); - - /*! - * Returns a pointer to the ID3v2 tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid ID3v2 tag. If \a create is true it will create - * an ID3v2 tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v2 tag. Use hasID3v2Tag() to check if the file - * on disk actually has an ID3v2 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v2Tag() - */ - ID3v2::Tag *ID3v2Tag(bool create = false); - - /*! - * Returns a pointer to the ID3v1 tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid ID3v1 tag. If \a create is true it will create - * an ID3v1 tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v1 tag. Use hasID3v1Tag() to check if the file - * on disk actually has an ID3v1 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v1Tag() - */ - ID3v1::Tag *ID3v1Tag(bool create = false); - - /*! - * Returns a pointer to the APE tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid APE tag. If \a create is true it will create - * an APE tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an APE tag. Use hasAPETag() to check if the file - * on disk actually has an APE tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasAPETag() - */ - APE::Tag *APETag(bool create = false); - - /*! - * This will strip the tags that match the OR-ed together TagTypes from the - * file. By default it strips all tags. It returns true if the tags are - * successfully stripped. - * - * This is equivalent to strip(tags, true) - * - * \note This will also invalidate pointers to the ID3 and APE tags - * as their memory will be freed. - * - * \note This will update the file immediately. - */ - bool strip(int tags = AllTags); - - /*! - * This will strip the tags that match the OR-ed together TagTypes from the - * file. By default it strips all tags. It returns true if the tags are - * successfully stripped. - * - * If \a freeMemory is true the ID3 and APE tags will be deleted and - * pointers to them will be invalidated. - * - * \note This will update the file immediately. - */ - // BIC: merge with the method above - bool strip(int tags, bool freeMemory); - - /*! - * Set the ID3v2::FrameFactory to something other than the default. - * - * \see ID3v2FrameFactory - * \deprecated This value should be passed in via the constructor. - */ - TAGLIB_DEPRECATED void setID3v2FrameFactory(const ID3v2::FrameFactory *factory); - - /*! - * Returns the position in the file of the first MPEG frame. - */ - long firstFrameOffset(); - - /*! - * Returns the position in the file of the next MPEG frame, - * using the current position as start - */ - long nextFrameOffset(long position); - - /*! - * Returns the position in the file of the previous MPEG frame, - * using the current position as start - */ - long previousFrameOffset(long position); - - /*! - * Returns the position in the file of the last MPEG frame. - */ - long lastFrameOffset(); - - /*! - * Returns whether or not the file on disk actually has an ID3v1 tag. - * - * \see ID3v1Tag() - */ - bool hasID3v1Tag() const; - - /*! - * Returns whether or not the file on disk actually has an ID3v2 tag. - * - * \see ID3v2Tag() - */ - bool hasID3v2Tag() const; - - /*! - * Returns whether or not the file on disk actually has an APE tag. - * - * \see APETag() - */ - bool hasAPETag() const; - - /*! - * Returns whether or not the given \a stream can be opened as an MPEG - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - long findID3v2(); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace MPEG -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/mpegheader.h b/taglib/include/taglib/mpegheader.h deleted file mode 100644 index cb8eb25..0000000 --- a/taglib/include/taglib/mpegheader.h +++ /dev/null @@ -1,178 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MPEGHEADER_H -#define TAGLIB_MPEGHEADER_H - -#include "taglib_export.h" - -namespace TagLib { - - class ByteVector; - class File; - - namespace MPEG { - - //! An implementation of MP3 frame headers - - /*! - * This is an implementation of MPEG Layer III headers. The API follows more - * or less the binary format of these headers. I've used - * this - * document as a reference. - */ - - class TAGLIB_EXPORT Header - { - public: - /*! - * Parses an MPEG header based on \a data. - * - * \deprecated Use Header(File *, long, bool). - */ - TAGLIB_DEPRECATED Header(const ByteVector &data); - - /*! - * Parses an MPEG header based on \a file and \a offset. - * - * \note If \a checkLength is true, this requires the next MPEG frame to - * check if the frame length is parsed and calculated correctly. So it's - * suitable for seeking for the first valid frame. - */ - Header(File *file, long offset, bool checkLength = true); - - /*! - * Does a shallow copy of \a h. - */ - Header(const Header &h); - - /*! - * Destroys this Header instance. - */ - virtual ~Header(); - - /*! - * Returns true if the frame is at least an appropriate size and has - * legal values. - */ - bool isValid() const; - - /*! - * The MPEG Version. - */ - enum Version { - //! MPEG Version 1 - Version1 = 0, - //! MPEG Version 2 - Version2 = 1, - //! MPEG Version 2.5 - Version2_5 = 2 - }; - - /*! - * Returns the MPEG Version of the header. - */ - Version version() const; - - /*! - * Returns the layer version. This will be between the values 1-3. - */ - int layer() const; - - /*! - * Returns true if the MPEG protection bit is enabled. - */ - bool protectionEnabled() const; - - /*! - * Returns the bitrate encoded in the header. - */ - int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - int sampleRate() const; - - /*! - * Returns true if the frame is padded. - */ - bool isPadded() const; - - /*! - * There are a few combinations or one or two channel audio that are - * possible: - */ - enum ChannelMode { - //! Stereo - Stereo = 0, - //! Stereo - JointStereo = 1, - //! Dual Mono - DualChannel = 2, - //! Mono - SingleChannel = 3 - }; - - /*! - * Returns the channel mode for this frame. - */ - ChannelMode channelMode() const; - - /*! - * Returns true if the copyrighted bit is set. - */ - bool isCopyrighted() const; - - /*! - * Returns true if the "original" bit is set. - */ - bool isOriginal() const; - - /*! - * Returns the frame length in bytes. - */ - int frameLength() const; - - /*! - * Returns the number of frames per sample. - */ - int samplesPerFrame() const; - - /*! - * Makes a shallow copy of the header. - */ - Header &operator=(const Header &h); - - private: - void parse(File *file, long offset, bool checkLength); - - class HeaderPrivate; - HeaderPrivate *d; - }; - } // namespace MPEG -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/mpegproperties.h b/taglib/include/taglib/mpegproperties.h deleted file mode 100644 index 18e7ca1..0000000 --- a/taglib/include/taglib/mpegproperties.h +++ /dev/null @@ -1,152 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MPEGPROPERTIES_H -#define TAGLIB_MPEGPROPERTIES_H - -#include "taglib_export.h" -#include "audioproperties.h" - -#include "mpegheader.h" - -namespace TagLib { - - namespace MPEG { - - class File; - class XingHeader; - - //! An implementation of audio property reading for MP3 - - /*! - * This reads the data from an MPEG Layer III stream found in the - * AudioProperties API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of MPEG::Properties with the data read from the - * MPEG::File \a file. - */ - Properties(File *file, ReadStyle style = Average); - - /*! - * Destroys this MPEG Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns a pointer to the Xing/VBRI header if one exists or null if no - * Xing/VBRI header was found. - */ - const XingHeader *xingHeader() const; - - /*! - * Returns the MPEG Version of the file. - */ - Header::Version version() const; - - /*! - * Returns the layer version. This will be between the values 1-3. - */ - int layer() const; - - /*! - * Returns true if the MPEG protection bit is enabled. - */ - bool protectionEnabled() const; - - /*! - * Returns the channel mode for this frame. - */ - Header::ChannelMode channelMode() const; - - /*! - * Returns true if the copyrighted bit is set. - */ - bool isCopyrighted() const; - - /*! - * Returns true if the "original" bit is set. - */ - bool isOriginal() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace MPEG -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/oggfile.h b/taglib/include/taglib/oggfile.h deleted file mode 100644 index a5d20c2..0000000 --- a/taglib/include/taglib/oggfile.h +++ /dev/null @@ -1,127 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#include "taglib_export.h" -#include "tfile.h" -#include "tbytevectorlist.h" - -#ifndef TAGLIB_OGGFILE_H -#define TAGLIB_OGGFILE_H - -namespace TagLib { - - //! A namespace for the classes used by Ogg-based metadata files - - namespace Ogg { - - class PageHeader; - - //! An implementation of TagLib::File with some helpers for Ogg based formats - - /*! - * This is an implementation of Ogg file page and packet rendering and is of - * use to Ogg based formats. While the API is small this handles the - * non-trivial details of breaking up an Ogg stream into packets and makes - * these available (via subclassing) to the codec meta data implementations. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - virtual ~File(); - - /*! - * Returns the packet contents for the i-th packet (starting from zero) - * in the Ogg bitstream. - * - * \warning This requires reading at least the packet header for every page - * up to the requested page. - */ - ByteVector packet(unsigned int i); - - /*! - * Sets the packet with index \a i to the value \a p. - */ - void setPacket(unsigned int i, const ByteVector &p); - - /*! - * Returns a pointer to the PageHeader for the first page in the stream or - * null if the page could not be found. - */ - const PageHeader *firstPageHeader(); - - /*! - * Returns a pointer to the PageHeader for the last page in the stream or - * null if the page could not be found. - */ - const PageHeader *lastPageHeader(); - - virtual bool save(); - - protected: - /*! - * Constructs an Ogg file from \a file. - * - * \note This constructor is protected since Ogg::File shouldn't be - * instantiated directly but rather should be used through the codec - * specific subclasses. - */ - File(FileName file); - - /*! - * Constructs an Ogg file from \a stream. - * - * \note This constructor is protected since Ogg::File shouldn't be - * instantiated directly but rather should be used through the codec - * specific subclasses. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - File(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - /*! - * Reads the pages from the beginning of the file until enough to compose - * the requested packet. - */ - bool readPages(unsigned int i); - - /*! - * Writes the requested packet to the file. - */ - void writePacket(unsigned int i, const ByteVector &packet); - - class FilePrivate; - FilePrivate *d; - }; - - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/oggflacfile.h b/taglib/include/taglib/oggflacfile.h deleted file mode 100644 index b2686e4..0000000 --- a/taglib/include/taglib/oggflacfile.h +++ /dev/null @@ -1,170 +0,0 @@ -/*************************************************************************** - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_OGGFLACFILE_H -#define TAGLIB_OGGFLACFILE_H - -#include "taglib_export.h" -#include "oggfile.h" -#include "xiphcomment.h" - -#include "flacproperties.h" - -namespace TagLib { - - class Tag; - - namespace Ogg { - - //! An implementation of Ogg FLAC metadata - - /*! - * This is implementation of FLAC metadata for Ogg FLAC files. For "pure" - * FLAC files look under the FLAC hierarchy. - * - * Unlike "pure" FLAC-files, Ogg FLAC only supports Xiph-comments, - * while the audio-properties are the same. - */ - namespace FLAC { - - using TagLib::FLAC::Properties; - - //! An implementation of TagLib::File with Ogg/FLAC specific methods - - /*! - * This implements and provides an interface for Ogg/FLAC files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to Ogg FLAC files. - */ - - class TAGLIB_EXPORT File : public Ogg::File - { - public: - /*! - * Constructs an Ogg/FLAC file from \a file. If \a readProperties is true - * the file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an Ogg/FLAC file from \a stream. If \a readProperties is true - * the file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the Tag for this file. This will always be a XiphComment. - * - * \note This always returns a valid pointer regardless of whether or not - * the file on disk has a XiphComment. Use hasXiphComment() to check if - * the file on disk actually has a XiphComment. - * - * \note The Tag is still owned by the FLAC::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasXiphComment() - */ - virtual XiphComment *tag() const; - - /*! - * Returns the FLAC::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - - /*! - * Implements the unified property interface -- export function. - * This forwards directly to XiphComment::properties(). - */ - PropertyMap properties() const; - - /*! - * Implements the unified tag dictionary interface -- import function. - * Like properties(), this is a forwarder to the file's XiphComment. - */ - PropertyMap setProperties(const PropertyMap &); - - - /*! - * Save the file. This will primarily save and update the XiphComment. - * Returns true if the save is successful. - */ - virtual bool save(); - - /*! - * Returns the length of the audio-stream, used by FLAC::Properties for - * calculating the bitrate. - */ - long streamLength(); - - /*! - * Returns whether or not the file on disk actually has a XiphComment. - * - * \see tag() - */ - bool hasXiphComment() const; - - /*! - * Check if the given \a stream can be opened as an Ogg FLAC file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties, Properties::ReadStyle propertiesStyle); - void scan(); - ByteVector streamInfoData(); - ByteVector xiphCommentData(); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace FLAC - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/oggpage.h b/taglib/include/taglib/oggpage.h deleted file mode 100644 index 4829b07..0000000 --- a/taglib/include/taglib/oggpage.h +++ /dev/null @@ -1,228 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_OGGPAGE_H -#define TAGLIB_OGGPAGE_H - -#include "taglib_export.h" -#include "tbytevectorlist.h" - -namespace TagLib { - - namespace Ogg { - - class File; - class PageHeader; - - //! An implementation of Ogg pages - - /*! - * This is an implementation of the pages that make up an Ogg stream. - * This handles parsing pages and breaking them down into packets and handles - * the details of packets spanning multiple pages and pages that contain - * multiple packets. - * - * In most Xiph.org formats the comments are found in the first few packets, - * this however is a reasonably complete implementation of Ogg pages that - * could potentially be useful for non-meta data purposes. - */ - - class TAGLIB_EXPORT Page - { - public: - /*! - * Read an Ogg page from the \a file at the position \a pageOffset. - */ - Page(File *file, long pageOffset); - - virtual ~Page(); - - /*! - * Returns the page's position within the file (in bytes). - */ - long fileOffset() const; - - /*! - * Returns a pointer to the header for this page. This pointer will become - * invalid when the page is deleted. - */ - const PageHeader *header() const; - - /*! - * Returns the index of the page within the Ogg stream. This helps make it - * possible to determine if pages have been lost. - * - * \see setPageSequenceNumber() - */ - int pageSequenceNumber() const; - - /*! - * Sets the page's position in the stream to \a sequenceNumber. - * - * \see pageSequenceNumber() - */ - void setPageSequenceNumber(int sequenceNumber); - - /*! - * Returns a copy of the page with \a sequenceNumber set as sequence number. - * - * \see header() - * \see PageHeader::setPageSequenceNumber() - * - * \deprecated Always returns null. - */ - TAGLIB_DEPRECATED Page *getCopyWithNewPageSequenceNumber(int sequenceNumber); - - /*! - * Returns the index of the first packet wholly or partially contained in - * this page. - * - * \see setFirstPacketIndex() - */ - int firstPacketIndex() const; - - /*! - * Sets the index of the first packet in the page. - * - * \see firstPacketIndex() - */ - void setFirstPacketIndex(int index); - - /*! - * When checking to see if a page contains a given packet this set of flags - * represents the possible values for that packets status in the page. - * - * \see containsPacket() - */ - enum ContainsPacketFlags { - //! No part of the packet is contained in the page - DoesNotContainPacket = 0x0000, - //! The packet is wholly contained in the page - CompletePacket = 0x0001, - //! The page starts with the given packet - BeginsWithPacket = 0x0002, - //! The page ends with the given packet - EndsWithPacket = 0x0004 - }; - - /*! - * Checks to see if the specified \a packet is contained in the current - * page. - * - * \see ContainsPacketFlags - */ - ContainsPacketFlags containsPacket(int index) const; - - /*! - * Returns the number of packets (whole or partial) in this page. - */ - unsigned int packetCount() const; - - /*! - * Returns a list of the packets in this page. - * - * \note Either or both the first and last packets may be only partial. - * \see PageHeader::firstPacketContinued() - */ - ByteVectorList packets() const; - - /*! - * Returns the size of the page in bytes. - */ - int size() const; - - ByteVector render() const; - - /*! - * Defines a strategy for pagination, or grouping pages into Ogg packets, - * for use with pagination methods. - * - * \note Yes, I'm aware that this is not a canonical "Strategy Pattern", - * the term was simply convenient. - */ - enum PaginationStrategy { - /*! - * Attempt to put the specified set of packets into a single Ogg packet. - * If the sum of the packet data is greater than will fit into a single - * Ogg page -- 65280 bytes -- this will fall back to repagination using - * the recommended page sizes. - */ - SinglePagePerGroup, - /*! - * Split the packet or group of packets into pages that conform to the - * sizes recommended in the Ogg standard. - */ - Repaginate - }; - - /*! - * Pack \a packets into Ogg pages using the \a strategy for pagination. - * The page number indicator inside of the rendered packets will start - * with \a firstPage and be incremented for each page rendered. - * \a containsLastPacket should be set to true if \a packets contains the - * last page in the stream and will set the appropriate flag in the last - * rendered Ogg page's header. \a streamSerialNumber should be set to - * the serial number for this stream. - * - * \note The "absolute granule position" is currently always zeroed using - * this method as this suffices for the comment headers. - * - * \warning The pages returned by this method must be deleted by the user. - * You can use List::setAutoDelete(true) to set these pages to be - * automatically deleted when this list passes out of scope. - * - * \see PaginationStrategy - * \see List::setAutoDelete() - */ - static List paginate(const ByteVectorList &packets, - PaginationStrategy strategy, - unsigned int streamSerialNumber, - int firstPage, - bool firstPacketContinued = false, - bool lastPacketCompleted = true, - bool containsLastPacket = false); - - protected: - /*! - * Creates an Ogg packet based on the data in \a packets. The page number - * for each page will be set to \a pageNumber. - */ - Page(const ByteVectorList &packets, - unsigned int streamSerialNumber, - int pageNumber, - bool firstPacketContinued = false, - bool lastPacketCompleted = true, - bool containsLastPacket = false); - - private: - Page(const Page &); - Page &operator=(const Page &); - - class PagePrivate; - PagePrivate *d; - }; - } // namespace Ogg -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/oggpageheader.h b/taglib/include/taglib/oggpageheader.h deleted file mode 100644 index d62feb3..0000000 --- a/taglib/include/taglib/oggpageheader.h +++ /dev/null @@ -1,232 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_OGGPAGEHEADER_H -#define TAGLIB_OGGPAGEHEADER_H - -#include "tlist.h" -#include "tbytevector.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace Ogg { - - class File; - - //! An implementation of the page headers associated with each Ogg::Page - - /*! - * This class implements Ogg page headers which contain the information - * about Ogg pages needed to break them into packets which can be passed on - * to the codecs. - */ - - class TAGLIB_EXPORT PageHeader - { - public: - /*! - * Reads a PageHeader from \a file starting at \a pageOffset. The defaults - * create a page with no (and as such, invalid) data that must be set - * later. - */ - PageHeader(File *file = 0, long pageOffset = -1); - - /*! - * Deletes this instance of the PageHeader. - */ - virtual ~PageHeader(); - - /*! - * Returns true if the header parsed properly and is valid. - */ - bool isValid() const; - - /*! - * Ogg pages contain a list of packets (which are used by the contained - * codecs). The sizes of these pages is encoded in the page header. This - * returns a list of the packet sizes in bytes. - * - * \see setPacketSizes() - */ - List packetSizes() const; - - /*! - * Sets the sizes of the packets in this page to \a sizes. Internally this - * updates the lacing values in the header. - * - * \see packetSizes() - */ - void setPacketSizes(const List &sizes); - - /*! - * Some packets can be continued across multiple pages. If the - * first packet in the current page is a continuation this will return - * true. If this is page starts with a new packet this will return false. - * - * \see lastPacketCompleted() - * \see setFirstPacketContinued() - */ - bool firstPacketContinued() const; - - /*! - * Sets the internal flag indicating if the first packet in this page is - * continued to \a continued. - * - * \see firstPacketContinued() - */ - void setFirstPacketContinued(bool continued); - - /*! - * Returns true if the last packet of this page is completely contained in - * this page. - * - * \see firstPacketContinued() - * \see setLastPacketCompleted() - */ - bool lastPacketCompleted() const; - - /*! - * Sets the internal flag indicating if the last packet in this page is - * complete to \a completed. - * - * \see lastPacketCompleted() - */ - void setLastPacketCompleted(bool completed); - - /*! - * This returns true if this is the first page of the Ogg (logical) stream. - * - * \see setFirstPageOfStream() - */ - bool firstPageOfStream() const; - - /*! - * Marks this page as the first page of the Ogg stream. - * - * \see firstPageOfStream() - */ - void setFirstPageOfStream(bool first); - - /*! - * This returns true if this is the last page of the Ogg (logical) stream. - * - * \see setLastPageOfStream() - */ - bool lastPageOfStream() const; - - /*! - * Marks this page as the last page of the Ogg stream. - * - * \see lastPageOfStream() - */ - void setLastPageOfStream(bool last); - - /*! - * A special value of containing the position of the packet to be - * interpreted by the codec. In the case of Vorbis this contains the PCM - * value and is used to calculate the length of the stream. - * - * \see setAbsoluteGranularPosition() - */ - long long absoluteGranularPosition() const; - - /*! - * A special value of containing the position of the packet to be - * interpreted by the codec. It is only supported here so that it may be - * copied from one page to another. - * - * \see absoluteGranularPosition() - */ - void setAbsoluteGranularPosition(long long agp); - - /*! - * Every Ogg logical stream is given a random serial number which is common - * to every page in that logical stream. This returns the serial number of - * the stream associated with this packet. - * - * \see setStreamSerialNumber() - */ - unsigned int streamSerialNumber() const; - - /*! - * Every Ogg logical stream is given a random serial number which is common - * to every page in that logical stream. This sets this pages serial - * number. This method should be used when adding new pages to a logical - * stream. - * - * \see streamSerialNumber() - */ - void setStreamSerialNumber(unsigned int n); - - /*! - * Returns the index of the page within the Ogg stream. This helps make it - * possible to determine if pages have been lost. - * - * \see setPageSequenceNumber() - */ - int pageSequenceNumber() const; - - /*! - * Sets the page's position in the stream to \a sequenceNumber. - * - * \see pageSequenceNumber() - */ - void setPageSequenceNumber(int sequenceNumber); - - /*! - * Returns the complete header size. - */ - int size() const; - - /*! - * Returns the size of the data portion of the page -- i.e. the size of the - * page less the header size. - */ - int dataSize() const; - - /*! - * Render the page header to binary data. - * - * \note The checksum -- bytes 22 - 25 -- will be left empty and must be - * filled in when rendering the entire page. - */ - ByteVector render() const; - - private: - PageHeader(const PageHeader &); - PageHeader &operator=(const PageHeader &); - - void read(Ogg::File *file, long pageOffset); - ByteVector lacingValues() const; - - class PageHeaderPrivate; - PageHeaderPrivate *d; - }; - - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/opusfile.h b/taglib/include/taglib/opusfile.h deleted file mode 100644 index bc78514..0000000 --- a/taglib/include/taglib/opusfile.h +++ /dev/null @@ -1,138 +0,0 @@ -/*************************************************************************** - copyright : (C) 2012 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - (original Vorbis implementation) -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_OPUSFILE_H -#define TAGLIB_OPUSFILE_H - -#include "oggfile.h" -#include "xiphcomment.h" - -#include "opusproperties.h" - -namespace TagLib { - - namespace Ogg { - - //! A namespace containing classes for Opus metadata - - namespace Opus { - - //! An implementation of Ogg::File with Opus specific methods - - /*! - * This is the central class in the Ogg Opus metadata processing collection - * of classes. It's built upon Ogg::File which handles processing of the Ogg - * logical bitstream and breaking it down into pages which are handled by - * the codec implementations, in this case Opus specifically. - */ - - class TAGLIB_EXPORT File : public Ogg::File - { - public: - /*! - * Constructs an Opus file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an Opus file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the XiphComment for this file. XiphComment implements the tag - * interface, so this serves as the reimplementation of - * TagLib::File::tag(). - */ - virtual Ogg::XiphComment *tag() const; - - /*! - * Implements the unified property interface -- export function. - * This forwards directly to XiphComment::properties(). - */ - PropertyMap properties() const; - - /*! - * Implements the unified tag dictionary interface -- import function. - * Like properties(), this is a forwarder to the file's XiphComment. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the Opus::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Save the file. - * - * This returns true if the save was successful. - */ - virtual bool save(); - - /*! - * Returns whether or not the given \a stream can be opened as an Opus - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace Opus - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/opusproperties.h b/taglib/include/taglib/opusproperties.h deleted file mode 100644 index 2624fe1..0000000 --- a/taglib/include/taglib/opusproperties.h +++ /dev/null @@ -1,134 +0,0 @@ -/*************************************************************************** - copyright : (C) 2012 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - (original Vorbis implementation) -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_OPUSPROPERTIES_H -#define TAGLIB_OPUSPROPERTIES_H - -#include "audioproperties.h" - -namespace TagLib { - - namespace Ogg { - - namespace Opus { - - class File; - - //! An implementation of audio property reading for Ogg Opus - - /*! - * This reads the data from an Ogg Opus stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of Opus::Properties with the data read from the - * Opus::File \a file. - */ - Properties(File *file, ReadStyle style = Average); - - /*! - * Destroys this Opus::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - * - * \note Always returns 48000, because Opus can decode any stream at a - * sample rate of 8, 12, 16, 24, or 48 kHz, - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * The Opus codec supports decoding at multiple sample rates, there is no - * single sample rate of the encoded stream. This returns the sample rate - * of the original audio stream. - */ - int inputSampleRate() const; - - /*! - * Returns the Opus version, in the range 0...255. - */ - int opusVersion() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace Opus - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/ownershipframe.h b/taglib/include/taglib/ownershipframe.h deleted file mode 100644 index 24113b1..0000000 --- a/taglib/include/taglib/ownershipframe.h +++ /dev/null @@ -1,151 +0,0 @@ -/*************************************************************************** - copyright : (C) 2012 by Rupert Daniel - email : rupert@cancelmonday.com - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_OWNERSHIPFRAME_H -#define TAGLIB_OWNERSHIPFRAME_H - -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An implementation of ID3v2 "ownership" - - /*! - * This implements the ID3v2 ownership (OWNE frame). It consists of - * a price paid, a date purchased (YYYYMMDD) and the name of the seller. - */ - - class TAGLIB_EXPORT OwnershipFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * Construct an empty ownership frame. - */ - explicit OwnershipFrame(String::Type encoding = String::Latin1); - - /*! - * Construct a ownership based on the data in \a data. - */ - explicit OwnershipFrame(const ByteVector &data); - - /*! - * Destroys this OwnershipFrame instance. - */ - virtual ~OwnershipFrame(); - - /*! - * Returns the text of this popularimeter. - * - * \see text() - */ - virtual String toString() const; - - /*! - * Returns the date purchased. - * - * \see setDatePurchased() - */ - String datePurchased() const; - - /*! - * Set the date purchased. - * - * \see datePurchased() - */ - void setDatePurchased(const String &datePurchased); - - /*! - * Returns the price paid. - * - * \see setPricePaid() - */ - String pricePaid() const; - - /*! - * Set the price paid. - * - * \see pricePaid() - */ - void setPricePaid(const String &pricePaid); - - /*! - * Returns the seller. - * - * \see setSeller() - */ - String seller() const; - - /*! - * Set the seller. - * - * \see seller() - */ - void setSeller(const String &seller); - - /*! - * Returns the text encoding that will be used in rendering this frame. - * This defaults to the type that was either specified in the constructor - * or read from the frame when parsed. - * - * \see setTextEncoding() - * \see render() - */ - String::Type textEncoding() const; - - /*! - * Sets the text encoding to be used when rendering this frame to - * \a encoding. - * - * \see textEncoding() - * \see render() - */ - void setTextEncoding(String::Type encoding); - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - OwnershipFrame(const ByteVector &data, Header *h); - OwnershipFrame(const OwnershipFrame &); - OwnershipFrame &operator=(const OwnershipFrame &); - - class OwnershipFramePrivate; - OwnershipFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/podcastframe.h b/taglib/include/taglib/podcastframe.h deleted file mode 100644 index a4a02f4..0000000 --- a/taglib/include/taglib/podcastframe.h +++ /dev/null @@ -1,82 +0,0 @@ -/*************************************************************************** - copyright : (C) 2015 by Urs Fleisch - email : ufleisch@users.sourceforge.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_PODCASTFRAME_H -#define TAGLIB_PODCASTFRAME_H - -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! ID3v2 podcast frame - /*! - * An implementation of ID3v2 podcast flag, a frame with four zero bytes. - */ - class TAGLIB_EXPORT PodcastFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * Construct a podcast frame. - */ - PodcastFrame(); - - /*! - * Destroys this PodcastFrame instance. - */ - virtual ~PodcastFrame(); - - /*! - * Returns a null string. - */ - virtual String toString() const; - - PropertyMap asProperties() const; - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - PodcastFrame(const ByteVector &data, Header *h); - PodcastFrame(const PodcastFrame &); - PodcastFrame &operator=(const PodcastFrame &); - - class PodcastFramePrivate; - PodcastFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/popularimeterframe.h b/taglib/include/taglib/popularimeterframe.h deleted file mode 100644 index 59860b4..0000000 --- a/taglib/include/taglib/popularimeterframe.h +++ /dev/null @@ -1,132 +0,0 @@ -/*************************************************************************** - copyright : (C) 2008 by Lukas Lalinsky - email : lalinsky@gmail.com - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_POPULARIMETERFRAME_H -#define TAGLIB_POPULARIMETERFRAME_H - -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An implementation of ID3v2 "popularimeter" - - /*! - * This implements the ID3v2 popularimeter (POPM frame). It consists of - * an email, a rating and an optional counter. - */ - - class TAGLIB_EXPORT PopularimeterFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * Construct an empty popularimeter frame. - */ - explicit PopularimeterFrame(); - - /*! - * Construct a popularimeter based on the data in \a data. - */ - explicit PopularimeterFrame(const ByteVector &data); - - /*! - * Destroys this PopularimeterFrame instance. - */ - virtual ~PopularimeterFrame(); - - /*! - * Returns the text of this popularimeter. - * - * \see text() - */ - virtual String toString() const; - - /*! - * Returns the email. - * - * \see setEmail() - */ - String email() const; - - /*! - * Set the email. - * - * \see email() - */ - void setEmail(const String &email); - - /*! - * Returns the rating. - * - * \see setRating() - */ - int rating() const; - - /*! - * Set the rating. - * - * \see rating() - */ - void setRating(int rating); - - /*! - * Returns the counter. - * - * \see setCounter() - */ - unsigned int counter() const; - - /*! - * Set the counter. - * - * \see counter() - */ - void setCounter(unsigned int counter); - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - PopularimeterFrame(const ByteVector &data, Header *h); - PopularimeterFrame(const PopularimeterFrame &); - PopularimeterFrame &operator=(const PopularimeterFrame &); - - class PopularimeterFramePrivate; - PopularimeterFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/privateframe.h b/taglib/include/taglib/privateframe.h deleted file mode 100644 index eeed521..0000000 --- a/taglib/include/taglib/privateframe.h +++ /dev/null @@ -1,111 +0,0 @@ -/*************************************************************************** - copyright : (C) 2008 by Serkan Kalyoncu - copyright : (C) 2008 by Scott Wheeler - email : wheeler@kde.org -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_PRIVATEFRAME_H -#define TAGLIB_PRIVATEFRAME_H - -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An implementation of ID3v2 privateframe - - class TAGLIB_EXPORT PrivateFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * Construct an empty private frame. - */ - PrivateFrame(); - - /*! - * Construct a private frame based on the data in \a data. - * - * \note This is the constructor used when parsing the frame from a file. - */ - explicit PrivateFrame(const ByteVector &data); - - /*! - * Destroys this private frame instance. - */ - virtual ~PrivateFrame(); - - /*! - * Returns the text of this private frame, currently just the owner. - * - * \see text() - */ - virtual String toString() const; - - /*! - * \return The owner of the private frame. - * \note This should contain an email address or link to a website. - */ - String owner() const; - - /*! - * - */ - ByteVector data() const; - - /*! - * Sets the owner of the frame to \a s. - * \note This should contain an email address or link to a website. - */ - void setOwner(const String &s); - - /*! - * - */ - void setData(const ByteVector &v); - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - PrivateFrame(const ByteVector &data, Header *h); - - PrivateFrame(const PrivateFrame &); - PrivateFrame &operator=(const PrivateFrame &); - - class PrivateFramePrivate; - PrivateFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/relativevolumeframe.h b/taglib/include/taglib/relativevolumeframe.h deleted file mode 100644 index a3ff9bd..0000000 --- a/taglib/include/taglib/relativevolumeframe.h +++ /dev/null @@ -1,274 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_RELATIVEVOLUMEFRAME_H -#define TAGLIB_RELATIVEVOLUMEFRAME_H - -#include "tlist.h" -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! An ID3v2 relative volume adjustment frame implementation - - /*! - * This is an implementation of ID3v2 relative volume adjustment. The - * presence of this frame makes it possible to specify an increase in volume - * for an audio file or specific audio tracks in that file. - * - * Multiple relative volume adjustment frames may be present in the tag - * each with a unique identification and describing volume adjustment for - * different channel types. - */ - - class TAGLIB_EXPORT RelativeVolumeFrame : public Frame - { - friend class FrameFactory; - - public: - - /*! - * This indicates the type of volume adjustment that should be applied. - */ - enum ChannelType { - //! A type not enumerated below - Other = 0x00, - //! The master volume for the track - MasterVolume = 0x01, - //! The front right audio channel - FrontRight = 0x02, - //! The front left audio channel - FrontLeft = 0x03, - //! The back right audio channel - BackRight = 0x04, - //! The back left audio channel - BackLeft = 0x05, - //! The front center audio channel - FrontCentre = 0x06, - //! The back center audio channel - BackCentre = 0x07, - //! The subwoofer audio channel - Subwoofer = 0x08 - }; - - //! Struct that stores the relevant values for ID3v2 peak volume - - /*! - * The peak volume is described as a series of bits that is padded to fill - * a block of bytes. These two values should always be updated in tandem. - */ - struct PeakVolume - { - /*! - * Constructs an empty peak volume description. - */ - PeakVolume() : bitsRepresentingPeak(0) {} - /*! - * The number of bits (in the range of 0 to 255) used to describe the - * peak volume. - */ - unsigned char bitsRepresentingPeak; - /*! - * The array of bits (represented as a series of bytes) used to describe - * the peak volume. - */ - ByteVector peakVolume; - }; - - /*! - * Constructs a RelativeVolumeFrame. The relevant data should be set - * manually. - */ - RelativeVolumeFrame(); - - /*! - * Constructs a RelativeVolumeFrame based on the contents of \a data. - */ - RelativeVolumeFrame(const ByteVector &data); - - /*! - * Destroys the RelativeVolumeFrame instance. - */ - virtual ~RelativeVolumeFrame(); - - /*! - * Returns the frame's identification. - * - * \see identification() - */ - virtual String toString() const; - - /*! - * Returns a list of channels with information currently in the frame. - */ - List channels() const; - - /*! - * \deprecated Always returns master volume. - */ - TAGLIB_DEPRECATED ChannelType channelType() const; - - /*! - * \deprecated This method no longer has any effect. - */ - TAGLIB_DEPRECATED void setChannelType(ChannelType t); - - /* - * There was a terrible API goof here, and while this can't be changed to - * the way it appears below for binary compatibility reasons, let's at - * least pretend that it looks clean. - */ - -#ifdef DOXYGEN - - /*! - * Returns the relative volume adjustment "index". As indicated by the - * ID3v2 standard this is a 16-bit signed integer that reflects the - * decibels of adjustment when divided by 512. - * - * This defaults to returning the value for the master volume channel if - * available and returns 0 if the specified channel does not exist. - * - * \see setVolumeAdjustmentIndex() - * \see volumeAdjustment() - */ - short volumeAdjustmentIndex(ChannelType type = MasterVolume) const; - - /*! - * Set the volume adjustment to \a index. As indicated by the ID3v2 - * standard this is a 16-bit signed integer that reflects the decibels of - * adjustment when divided by 512. - * - * By default this sets the value for the master volume. - * - * \see volumeAdjustmentIndex() - * \see setVolumeAdjustment() - */ - void setVolumeAdjustmentIndex(short index, ChannelType type = MasterVolume); - - /*! - * Returns the relative volume adjustment in decibels. - * - * \note Because this is actually stored internally as an "index" to this - * value the value returned by this method may not be identical to the - * value set using setVolumeAdjustment(). - * - * This defaults to returning the value for the master volume channel if - * available and returns 0 if the specified channel does not exist. - * - * \see setVolumeAdjustment() - * \see volumeAdjustmentIndex() - */ - float volumeAdjustment(ChannelType type = MasterVolume) const; - - /*! - * Set the relative volume adjustment in decibels to \a adjustment. - * - * By default this sets the value for the master volume. - * - * \note Because this is actually stored internally as an "index" to this - * value the value set by this method may not be identical to the one - * returned by volumeAdjustment(). - * - * \see setVolumeAdjustment() - * \see volumeAdjustmentIndex() - */ - void setVolumeAdjustment(float adjustment, ChannelType type = MasterVolume); - - /*! - * Returns the peak volume (represented as a length and a string of bits). - * - * This defaults to returning the value for the master volume channel if - * available and returns 0 if the specified channel does not exist. - * - * \see setPeakVolume() - */ - PeakVolume peakVolume(ChannelType type = MasterVolume) const; - - /*! - * Sets the peak volume to \a peak. - * - * By default this sets the value for the master volume. - * - * \see peakVolume() - */ - void setPeakVolume(const PeakVolume &peak, ChannelType type = MasterVolume); - -#else - - // BIC: Combine each of the following pairs of functions (or maybe just - // rework this junk altogether). - - short volumeAdjustmentIndex(ChannelType type) const; - short volumeAdjustmentIndex() const; - - void setVolumeAdjustmentIndex(short index, ChannelType type); - void setVolumeAdjustmentIndex(short index); - - float volumeAdjustment(ChannelType type) const; - float volumeAdjustment() const; - - void setVolumeAdjustment(float adjustment, ChannelType type); - void setVolumeAdjustment(float adjustment); - - PeakVolume peakVolume(ChannelType type) const; - PeakVolume peakVolume() const; - - void setPeakVolume(const PeakVolume &peak, ChannelType type); - void setPeakVolume(const PeakVolume &peak); - -#endif - - /*! - * Returns the identification for this frame. - */ - String identification() const; - - /*! - * Sets the identification of the frame to \a s. The string - * is used to identify the situation and/or device where this - * adjustment should apply. - */ - void setIdentification(const String &s); - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - RelativeVolumeFrame(const ByteVector &data, Header *h); - RelativeVolumeFrame(const RelativeVolumeFrame &); - RelativeVolumeFrame &operator=(const RelativeVolumeFrame &); - - class RelativeVolumeFramePrivate; - RelativeVolumeFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/rifffile.h b/taglib/include/taglib/rifffile.h deleted file mode 100644 index 1ed4950..0000000 --- a/taglib/include/taglib/rifffile.h +++ /dev/null @@ -1,161 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_RIFFFILE_H -#define TAGLIB_RIFFFILE_H - -#include "taglib_export.h" -#include "tfile.h" - -namespace TagLib { - - //! An implementation of TagLib::File with RIFF specific methods - - namespace RIFF { - - //! An RIFF file class with some useful methods specific to RIFF - - /*! - * This implements the generic TagLib::File API and additionally provides - * access to properties that are distinct to RIFF files, notably access - * to the different ID3 tags. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - protected: - - enum Endianness { BigEndian, LittleEndian }; - - File(FileName file, Endianness endianness); - File(IOStream *stream, Endianness endianness); - - /*! - * \return The size of the main RIFF chunk. - */ - unsigned int riffSize() const; - - /*! - * \return The number of chunks in the file. - */ - unsigned int chunkCount() const; - - /*! - * \return The offset within the file for the selected chunk number. - */ - unsigned int chunkOffset(unsigned int i) const; - - /*! - * \return The size of the chunk data. - */ - unsigned int chunkDataSize(unsigned int i) const; - - /*! - * \return The size of the padding after the chunk (can be either 0 or 1). - */ - unsigned int chunkPadding(unsigned int i) const; - - /*! - * \return The name of the specified chunk, for instance, "COMM" or "ID3 " - */ - ByteVector chunkName(unsigned int i) const; - - /*! - * Reads the chunk data from the file and returns it. - * - * \note This \e will move the read pointer for the file. - */ - ByteVector chunkData(unsigned int i); - - /*! - * Sets the data for the specified chunk to \a data. - * - * \warning This will update the file immediately. - */ - void setChunkData(unsigned int i, const ByteVector &data); - - /*! - * Sets the data for the chunk \a name to \a data. If a chunk with the - * given name already exists it will be overwritten, otherwise it will be - * created after the existing chunks. - * - * \warning This will update the file immediately. - */ - void setChunkData(const ByteVector &name, const ByteVector &data); - - /*! - * Sets the data for the chunk \a name to \a data. If a chunk with the - * given name already exists it will be overwritten, otherwise it will be - * created after the existing chunks. - * - * \note If \a alwaysCreate is true, a new chunk is created regardless of - * whether or not the chunk \a name exists. It should only be used for - * "LIST" chunks. - * - * \warning This will update the file immediately. - */ - void setChunkData(const ByteVector &name, const ByteVector &data, bool alwaysCreate); - - /*! - * Removes the specified chunk. - * - * \warning This will update the file immediately. - */ - void removeChunk(unsigned int i); - - /*! - * Removes the chunk \a name. - * - * \warning This will update the file immediately. - * \warning This removes all the chunks with the given name. - */ - void removeChunk(const ByteVector &name); - - private: - File(const File &); - File &operator=(const File &); - - void read(); - void writeChunk(const ByteVector &name, const ByteVector &data, - unsigned long offset, unsigned long replace = 0); - - /*! - * Update the global RIFF size based on the current internal structure. - */ - void updateGlobalSize(); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace RIFF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/s3mfile.h b/taglib/include/taglib/s3mfile.h deleted file mode 100644 index f9ff605..0000000 --- a/taglib/include/taglib/s3mfile.h +++ /dev/null @@ -1,112 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_S3MFILE_H -#define TAGLIB_S3MFILE_H - -#include "tfile.h" -#include "audioproperties.h" -#include "taglib_export.h" -#include "modfilebase.h" -#include "modtag.h" -#include "s3mproperties.h" - -namespace TagLib { - - namespace S3M { - - class TAGLIB_EXPORT File : public Mod::FileBase { - public: - /*! - * Constructs a ScreamTracker III from \a file. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - */ - File(FileName file, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Constructs a ScreamTracker III file from \a stream. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - File(IOStream *stream, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - Mod::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * Forwards to Mod::Tag::properties(). - */ - PropertyMap properties() const; - - /*! - * Implements the unified property interface -- import function. - * Forwards to Mod::Tag::setProperties(). - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the S3M::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - S3M::Properties *audioProperties() const; - - /*! - * Save the file. - * This is the same as calling save(AllTags); - * - * \note Saving ScreamTracker III tags is not supported. - */ - bool save(); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace S3M -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/s3mproperties.h b/taglib/include/taglib/s3mproperties.h deleted file mode 100644 index fda5952..0000000 --- a/taglib/include/taglib/s3mproperties.h +++ /dev/null @@ -1,94 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_S3MPROPERTIES_H -#define TAGLIB_S3MPROPERTIES_H - -#include "taglib.h" -#include "audioproperties.h" - -namespace TagLib { - namespace S3M { - class TAGLIB_EXPORT Properties : public AudioProperties { - friend class File; - public: - /*! Flag bits. */ - enum { - ST2Vibrato = 1, - ST2Tempo = 2, - AmigaSlides = 4, - Vol0MixOptimizations = 8, - AmigaLimits = 16, - EnableFilter = 32, - CustomData = 128 - }; - - Properties(AudioProperties::ReadStyle propertiesStyle); - virtual ~Properties(); - - int length() const; - int lengthInSeconds() const; - int lengthInMilliseconds() const; - int bitrate() const; - int sampleRate() const; - int channels() const; - - unsigned short lengthInPatterns() const; - bool stereo() const; - unsigned short sampleCount() const; - unsigned short patternCount() const; - unsigned short flags() const; - unsigned short trackerVersion() const; - unsigned short fileFormatVersion() const; - unsigned char globalVolume() const; - unsigned char masterVolume() const; - unsigned char tempo() const; - unsigned char bpmSpeed() const; - - void setChannels(int channels); - - void setLengthInPatterns (unsigned short lengthInPatterns); - void setStereo (bool stereo); - void setSampleCount (unsigned short sampleCount); - void setPatternCount (unsigned short patternCount); - void setFlags (unsigned short flags); - void setTrackerVersion (unsigned short trackerVersion); - void setFileFormatVersion(unsigned short fileFormatVersion); - void setGlobalVolume (unsigned char globalVolume); - void setMasterVolume (unsigned char masterVolume); - void setTempo (unsigned char tempo); - void setBpmSpeed (unsigned char bpmSpeed); - - private: - Properties(const Properties&); - Properties &operator=(const Properties&); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace S3M -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/speexfile.h b/taglib/include/taglib/speexfile.h deleted file mode 100644 index f8c002a..0000000 --- a/taglib/include/taglib/speexfile.h +++ /dev/null @@ -1,138 +0,0 @@ -/*************************************************************************** - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - (original Vorbis implementation) -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_SPEEXFILE_H -#define TAGLIB_SPEEXFILE_H - -#include "oggfile.h" -#include "xiphcomment.h" - -#include "speexproperties.h" - -namespace TagLib { - - namespace Ogg { - - //! A namespace containing classes for Speex metadata - - namespace Speex { - - //! An implementation of Ogg::File with Speex specific methods - - /*! - * This is the central class in the Ogg Speex metadata processing collection - * of classes. It's built upon Ogg::File which handles processing of the Ogg - * logical bitstream and breaking it down into pages which are handled by - * the codec implementations, in this case Speex specifically. - */ - - class TAGLIB_EXPORT File : public Ogg::File - { - public: - /*! - * Constructs a Speex file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs a Speex file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the XiphComment for this file. XiphComment implements the tag - * interface, so this serves as the reimplementation of - * TagLib::File::tag(). - */ - virtual Ogg::XiphComment *tag() const; - - /*! - * Implements the unified property interface -- export function. - * This forwards directly to XiphComment::properties(). - */ - PropertyMap properties() const; - - /*! - * Implements the unified tag dictionary interface -- import function. - * Like properties(), this is a forwarder to the file's XiphComment. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the Speex::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Save the file. - * - * This returns true if the save was successful. - */ - virtual bool save(); - - /*! - * Returns whether or not the given \a stream can be opened as a Speex - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace Speex - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/speexproperties.h b/taglib/include/taglib/speexproperties.h deleted file mode 100644 index 12f09e0..0000000 --- a/taglib/include/taglib/speexproperties.h +++ /dev/null @@ -1,129 +0,0 @@ -/*************************************************************************** - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - (original Vorbis implementation) -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_SPEEXPROPERTIES_H -#define TAGLIB_SPEEXPROPERTIES_H - -#include "audioproperties.h" - -namespace TagLib { - - namespace Ogg { - - namespace Speex { - - class File; - - //! An implementation of audio property reading for Ogg Speex - - /*! - * This reads the data from an Ogg Speex stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of Speex::Properties with the data read from the - * Speex::File \a file. - */ - Properties(File *file, ReadStyle style = Average); - - /*! - * Destroys this Speex::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the nominal bit rate as read from the Speex header in kb/s. - */ - int bitrateNominal() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the Speex version, currently "0" (as specified by the spec). - */ - int speexVersion() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace Speex - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/synchronizedlyricsframe.h b/taglib/include/taglib/synchronizedlyricsframe.h deleted file mode 100644 index a701d21..0000000 --- a/taglib/include/taglib/synchronizedlyricsframe.h +++ /dev/null @@ -1,231 +0,0 @@ -/*************************************************************************** - copyright : (C) 2014 by Urs Fleisch - email : ufleisch@users.sourceforge.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_SYNCHRONIZEDLYRICSFRAME_H -#define TAGLIB_SYNCHRONIZEDLYRICSFRAME_H - -#include "id3v2frame.h" -#include "tlist.h" - -namespace TagLib { - - namespace ID3v2 { - - //! ID3v2 synchronized lyrics frame - /*! - * An implementation of ID3v2 synchronized lyrics. - */ - class TAGLIB_EXPORT SynchronizedLyricsFrame : public Frame - { - friend class FrameFactory; - - public: - - /*! - * Specifies the timestamp format used. - */ - enum TimestampFormat { - //! The timestamp is of unknown format. - Unknown = 0x00, - //! The timestamp represents the number of MPEG frames since - //! the beginning of the audio stream. - AbsoluteMpegFrames = 0x01, - //! The timestamp represents the number of milliseconds since - //! the beginning of the audio stream. - AbsoluteMilliseconds = 0x02 - }; - - /*! - * Specifies the type of text contained. - */ - enum Type { - //! The text is some other type of text. - Other = 0x00, - //! The text contains lyrical data. - Lyrics = 0x01, - //! The text contains a transcription. - TextTranscription = 0x02, - //! The text lists the movements in the piece. - Movement = 0x03, - //! The text describes events that occur. - Events = 0x04, - //! The text contains chord changes that occur in the music. - Chord = 0x05, - //! The text contains trivia or "pop up" information about the media. - Trivia = 0x06, - //! The text contains URLs for relevant webpages. - WebpageUrls = 0x07, - //! The text contains URLs for relevant images. - ImageUrls = 0x08 - }; - - /*! - * Single entry of time stamp and lyrics text. - */ - struct SynchedText { - SynchedText(unsigned int ms, String str) : time(ms), text(str) {} - unsigned int time; - String text; - }; - - /*! - * List of synchronized lyrics. - */ - typedef TagLib::List SynchedTextList; - - /*! - * Construct an empty synchronized lyrics frame that will use the text - * encoding \a encoding. - */ - explicit SynchronizedLyricsFrame(String::Type encoding = String::Latin1); - - /*! - * Construct a synchronized lyrics frame based on the data in \a data. - */ - explicit SynchronizedLyricsFrame(const ByteVector &data); - - /*! - * Destroys this SynchronizedLyricsFrame instance. - */ - virtual ~SynchronizedLyricsFrame(); - - /*! - * Returns the description of this synchronized lyrics frame. - * - * \see description() - */ - virtual String toString() const; - - /*! - * Returns the text encoding that will be used in rendering this frame. - * This defaults to the type that was either specified in the constructor - * or read from the frame when parsed. - * - * \see setTextEncoding() - * \see render() - */ - String::Type textEncoding() const; - - /*! - * Returns the language encoding as a 3 byte encoding as specified by - * ISO-639-2. - * - * \note Most taggers simply ignore this value. - * - * \see setLanguage() - */ - ByteVector language() const; - - /*! - * Returns the timestamp format. - */ - TimestampFormat timestampFormat() const; - - /*! - * Returns the type of text contained. - */ - Type type() const; - - /*! - * Returns the description of this synchronized lyrics frame. - * - * \note Most taggers simply ignore this value. - * - * \see setDescription() - */ - String description() const; - - /*! - * Returns the text with the time stamps. - */ - SynchedTextList synchedText() const; - - /*! - * Sets the text encoding to be used when rendering this frame to - * \a encoding. - * - * \see textEncoding() - * \see render() - */ - void setTextEncoding(String::Type encoding); - - /*! - * Set the language using the 3 byte language code from - * ISO-639-2 to - * \a languageCode. - * - * \see language() - */ - void setLanguage(const ByteVector &languageCode); - - /*! - * Set the timestamp format. - * - * \see timestampFormat() - */ - void setTimestampFormat(TimestampFormat f); - - /*! - * Set the type of text contained. - * - * \see type() - */ - void setType(Type t); - - /*! - * Sets the description of the synchronized lyrics frame to \a s. - * - * \see description() - */ - void setDescription(const String &s); - - /*! - * Sets the text with the time stamps. - * - * \see text() - */ - void setSynchedText(const SynchedTextList &t); - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - SynchronizedLyricsFrame(const ByteVector &data, Header *h); - SynchronizedLyricsFrame(const SynchronizedLyricsFrame &); - SynchronizedLyricsFrame &operator=(const SynchronizedLyricsFrame &); - - class SynchronizedLyricsFramePrivate; - SynchronizedLyricsFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/tableofcontentsframe.h b/taglib/include/taglib/tableofcontentsframe.h deleted file mode 100644 index 1f327e9..0000000 --- a/taglib/include/taglib/tableofcontentsframe.h +++ /dev/null @@ -1,260 +0,0 @@ -/*************************************************************************** - copyright : (C) 2013 by Lukas Krejci - email : krejclu6@fel.cvut.cz - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_TABLEOFCONTENTSFRAME -#define TAGLIB_TABLEOFCONTENTSFRAME - -#include "id3v2tag.h" -#include "id3v2frame.h" - -#include "tbytevectorlist.h" - -namespace TagLib { - - namespace ID3v2 { - - /*! - * This is an implementation of ID3v2 table of contents frames. Purpose - * of this frame is to allow a table of contents to be defined. - */ - - //! An implementation of ID3v2 table of contents frames - - class TAGLIB_EXPORT TableOfContentsFrame : public ID3v2::Frame - { - friend class FrameFactory; - - public: - /*! - * Creates a table of contents frame based on \a data. \a tagHeader is - * required as the internal frames are parsed based on the tag version. - */ - TableOfContentsFrame(const ID3v2::Header *tagHeader, const ByteVector &data); - - /*! - * Creates a table of contents frame with the element ID \a elementID, - * the child elements \a children and embedded frames, which become owned - * by this frame, in \a embeddedFrames. - */ - TableOfContentsFrame(const ByteVector &elementID, - const ByteVectorList &children = ByteVectorList(), - const FrameList &embeddedFrames = FrameList()); - - /*! - * Destroys the frame. - */ - ~TableOfContentsFrame(); - - /*! - * Returns the elementID of the frame. Element ID - * is a null terminated string, however it's not human-readable. - * - * \see setElementID() - */ - ByteVector elementID() const; - - /*! - * Returns true, if the frame is top-level (doesn't have - * any parent CTOC frame). - * - * \see setIsTopLevel() - */ - bool isTopLevel() const; - - /*! - * Returns true, if the child elements list entries - * are ordered. - * - * \see setIsOrdered() - */ - bool isOrdered() const; - - /*! - * Returns count of child elements of the frame. It always - * corresponds to size of child elements list. - * - * \see childElements() - */ - unsigned int entryCount() const; - - /*! - * Returns list of child elements of the frame. - * - * \see setChildElements() - */ - ByteVectorList childElements() const; - - /*! - * Sets the elementID of the frame to \a eID. If \a eID isn't - * null terminated, a null char is appended automatically. - * - * \see elementID() - */ - void setElementID(const ByteVector &eID); - - /*! - * Sets, if the frame is top-level (doesn't have - * any parent CTOC frame). - * - * \see isTopLevel() - */ - void setIsTopLevel(const bool &t); - - /*! - * Sets, if the child elements list entries - * are ordered. - * - * \see isOrdered() - */ - void setIsOrdered(const bool &o); - - /*! - * Sets list of child elements of the frame to \a l. - * - * \see childElements() - */ - void setChildElements(const ByteVectorList &l); - - /*! - * Adds \a cE to list of child elements of the frame. - * - * \see childElements() - */ - void addChildElement(const ByteVector &cE); - - /*! - * Removes \a cE to list of child elements of the frame. - * - * \see childElements() - */ - void removeChildElement(const ByteVector &cE); - - /*! - * Returns a reference to the frame list map. This is an FrameListMap of - * all of the frames embedded in the CTOC frame. - * - * This is the most convenient structure for accessing the CTOC frame's - * embedded frames. Many frame types allow multiple instances of the same - * frame type so this is a map of lists. In most cases however there will - * only be a single frame of a certain type. - * - * \warning You should not modify this data structure directly, instead - * use addEmbeddedFrame() and removeEmbeddedFrame(). - * - * \see embeddedFrameList() - */ - const FrameListMap &embeddedFrameListMap() const; - - /*! - * Returns a reference to the embedded frame list. This is an FrameList - * of all of the frames embedded in the CTOC frame in the order that they - * were parsed. - * - * This can be useful if for example you want iterate over the CTOC frame's - * embedded frames in the order that they occur in the CTOC frame. - * - * \warning You should not modify this data structure directly, instead - * use addEmbeddedFrame() and removeEmbeddedFrame(). - */ - const FrameList &embeddedFrameList() const; - - /*! - * Returns the embedded frame list for frames with the id \a frameID - * or an empty list if there are no embedded frames of that type. This - * is just a convenience and is equivalent to: - * - * \code - * embeddedFrameListMap()[frameID]; - * \endcode - * - * \see embeddedFrameListMap() - */ - const FrameList &embeddedFrameList(const ByteVector &frameID) const; - - /*! - * Add an embedded frame to the CTOC frame. At this point the CTOC frame - * takes ownership of the embedded frame and will handle freeing its memory. - * - * \note Using this method will invalidate any pointers on the list - * returned by embeddedFrameList() - */ - void addEmbeddedFrame(Frame *frame); - - /*! - * Remove an embedded frame from the CTOC frame. If \a del is true the frame's - * memory will be freed; if it is false, it must be deleted by the user. - * - * \note Using this method will invalidate any pointers on the list - * returned by embeddedFrameList() - */ - void removeEmbeddedFrame(Frame *frame, bool del = true); - - /*! - * Remove all embedded frames of type \a id from the CTOC frame and free their - * memory. - * - * \note Using this method will invalidate any pointers on the list - * returned by embeddedFrameList() - */ - void removeEmbeddedFrames(const ByteVector &id); - - virtual String toString() const; - - PropertyMap asProperties() const; - - /*! - * CTOC frames each have a unique element ID. This searches for a CTOC - * frame with the element ID \a eID and returns a pointer to it. This - * can be used to link together parent and child CTOC frames. - * - * \see elementID() - */ - static TableOfContentsFrame *findByElementID(const Tag *tag, const ByteVector &eID); - - /*! - * CTOC frames each contain a flag that indicates, if CTOC frame is top-level (there isn't - * any frame, which contains this frame in its child elements list). Only a single frame - * within tag can be top-level. This searches for a top-level CTOC frame. - * - * \see isTopLevel() - */ - static TableOfContentsFrame *findTopLevel(const Tag *tag); - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - TableOfContentsFrame(const ID3v2::Header *tagHeader, const ByteVector &data, Header *h); - TableOfContentsFrame(const TableOfContentsFrame &); - TableOfContentsFrame &operator=(const TableOfContentsFrame &); - - class TableOfContentsFramePrivate; - TableOfContentsFramePrivate *d; - }; - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/tag.h b/taglib/include/taglib/tag.h deleted file mode 100644 index a445880..0000000 --- a/taglib/include/taglib/tag.h +++ /dev/null @@ -1,201 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_TAG_H -#define TAGLIB_TAG_H - -#include "taglib_export.h" -#include "tstring.h" - -namespace TagLib { - - //! A simple, generic interface to common audio meta data fields - - /*! - * This is an attempt to abstract away the difference in the meta data formats - * of various audio codecs and tagging schemes. As such it is generally a - * subset of what is available in the specific formats but should be suitable - * for most applications. This is meant to compliment the generic APIs found - * in TagLib::AudioProperties, TagLib::File and TagLib::FileRef. - */ - - class PropertyMap; - - class TAGLIB_EXPORT Tag - { - public: - - /*! - * Destroys this Tag instance. - */ - virtual ~Tag(); - - /*! - * Exports the tags of the file as dictionary mapping (human readable) tag - * names (Strings) to StringLists of tag values. - * The default implementation in this class considers only the usual built-in - * tags (artist, album, ...) and only one value per key. - */ - PropertyMap properties() const; - - /*! - * Removes unsupported properties, or a subset of them, from the tag. - * The parameter \a properties must contain only entries from - * properties().unsupportedData(). - * BIC: Will become virtual in future releases. Currently the non-virtual - * standard implementation of TagLib::Tag does nothing, since there are - * no unsupported elements. - */ - void removeUnsupportedProperties(const StringList& properties); - - /*! - * Sets the tags of this File to those specified in \a properties. This default - * implementation sets only the tags for which setter methods exist in this class - * (artist, album, ...), and only one value per key; the rest will be contained - * in the returned PropertyMap. - */ - PropertyMap setProperties(const PropertyMap &properties); - - /*! - * Returns the track name; if no track name is present in the tag - * String::null will be returned. - */ - virtual String title() const = 0; - - /*! - * Returns the artist name; if no artist name is present in the tag - * String::null will be returned. - */ - virtual String artist() const = 0; - - /*! - * Returns the album name; if no album name is present in the tag - * String::null will be returned. - */ - virtual String album() const = 0; - - /*! - * Returns the track comment; if no comment is present in the tag - * String::null will be returned. - */ - virtual String comment() const = 0; - - /*! - * Returns the genre name; if no genre is present in the tag String::null - * will be returned. - */ - virtual String genre() const = 0; - - /*! - * Returns the year; if there is no year set, this will return 0. - */ - virtual unsigned int year() const = 0; - - /*! - * Returns the track number; if there is no track number set, this will - * return 0. - */ - virtual unsigned int track() const = 0; - - /*! - * Sets the title to \a s. If \a s is String::null then this value will be - * cleared. - */ - virtual void setTitle(const String &s) = 0; - - /*! - * Sets the artist to \a s. If \a s is String::null then this value will be - * cleared. - */ - virtual void setArtist(const String &s) = 0; - - /*! - * Sets the album to \a s. If \a s is String::null then this value will be - * cleared. - */ - virtual void setAlbum(const String &s) = 0; - - /*! - * Sets the comment to \a s. If \a s is String::null then this value will be - * cleared. - */ - virtual void setComment(const String &s) = 0; - - /*! - * Sets the genre to \a s. If \a s is String::null then this value will be - * cleared. For tag formats that use a fixed set of genres, the appropriate - * value will be selected based on a string comparison. A list of available - * genres for those formats should be available in that type's - * implementation. - */ - virtual void setGenre(const String &s) = 0; - - /*! - * Sets the year to \a i. If \a s is 0 then this value will be cleared. - */ - virtual void setYear(unsigned int i) = 0; - - /*! - * Sets the track to \a i. If \a s is 0 then this value will be cleared. - */ - virtual void setTrack(unsigned int i) = 0; - - /*! - * Returns true if the tag does not contain any data. This should be - * reimplemented in subclasses that provide more than the basic tagging - * abilities in this class. - */ - virtual bool isEmpty() const; - - /*! - * Copies the generic data from one tag to another. - * - * \note This will no affect any of the lower level details of the tag. For - * instance if any of the tag type specific data (maybe a URL for a band) is - * set, this will not modify or copy that. This just copies using the API - * in this class. - * - * If \a overwrite is true then the values will be unconditionally copied. - * If false only empty values will be overwritten. - */ - static void duplicate(const Tag *source, Tag *target, bool overwrite = true); - - protected: - /*! - * Construct a Tag. This is protected since tags should only be instantiated - * through subclasses. - */ - Tag(); - - private: - Tag(const Tag &); - Tag &operator=(const Tag &); - - class TagPrivate; - TagPrivate *d; - }; -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/tag_c.h b/taglib/include/taglib/tag_c.h deleted file mode 100644 index 8d5f85f..0000000 --- a/taglib/include/taglib/tag_c.h +++ /dev/null @@ -1,299 +0,0 @@ -/*************************************************************************** - copyright : (C) 2003 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * - * USA * - ***************************************************************************/ - -#ifndef TAGLIB_TAG_C -#define TAGLIB_TAG_C - -/* Do not include this in the main TagLib documentation. */ -#ifndef DO_NOT_DOCUMENT - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(TAGLIB_STATIC) -#define TAGLIB_C_EXPORT -#elif defined(_WIN32) || defined(_WIN64) -#ifdef MAKE_TAGLIB_C_LIB -#define TAGLIB_C_EXPORT __declspec(dllexport) -#else -#define TAGLIB_C_EXPORT __declspec(dllimport) -#endif -#elif defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 1) -#define TAGLIB_C_EXPORT __attribute__ ((visibility("default"))) -#else -#define TAGLIB_C_EXPORT -#endif - -#ifndef BOOL -#define BOOL int -#endif - -/******************************************************************************* - * [ TagLib C Binding ] - * - * This is an interface to TagLib's "simple" API, meaning that you can read and - * modify media files in a generic, but not specialized way. This is a rough - * representation of TagLib::File and TagLib::Tag, for which the documentation - * is somewhat more complete and worth consulting. - *******************************************************************************/ - -/* - * These are used for type provide some type safety to the C API (as opposed to - * using void *, but pointers to them are simply cast to the corresponding C++ - * types in the implementation. - */ - -typedef struct { int dummy; } TagLib_File; -typedef struct { int dummy; } TagLib_Tag; -typedef struct { int dummy; } TagLib_AudioProperties; - -/*! - * By default all strings coming into or out of TagLib's C API are in UTF8. - * However, it may be desirable for TagLib to operate on Latin1 (ISO-8859-1) - * strings in which case this should be set to FALSE. - */ -TAGLIB_C_EXPORT void taglib_set_strings_unicode(BOOL unicode); - -/*! - * TagLib can keep track of strings that are created when outputting tag values - * and clear them using taglib_tag_clear_strings(). This is enabled by default. - * However if you wish to do more fine grained management of strings, you can do - * so by setting \a management to FALSE. - */ -TAGLIB_C_EXPORT void taglib_set_string_management_enabled(BOOL management); - -/*! - * Explicitly free a string returned from TagLib - */ -TAGLIB_C_EXPORT void taglib_free(void* pointer); - -/******************************************************************************* - * File API - ******************************************************************************/ - -typedef enum { - TagLib_File_MPEG, - TagLib_File_OggVorbis, - TagLib_File_FLAC, - TagLib_File_MPC, - TagLib_File_OggFlac, - TagLib_File_WavPack, - TagLib_File_Speex, - TagLib_File_TrueAudio, - TagLib_File_MP4, - TagLib_File_ASF -} TagLib_File_Type; - -/*! - * Creates a TagLib file based on \a filename. TagLib will try to guess the file - * type. - * - * \returns NULL if the file type cannot be determined or the file cannot - * be opened. - */ -TAGLIB_C_EXPORT TagLib_File *taglib_file_new(const char *filename); - -/*! - * Creates a TagLib file based on \a filename. Rather than attempting to guess - * the type, it will use the one specified by \a type. - */ -TAGLIB_C_EXPORT TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type); - -/*! - * Frees and closes the file. - */ -TAGLIB_C_EXPORT void taglib_file_free(TagLib_File *file); - -/*! - * Returns true if the file is open and readable and valid information for - * the Tag and / or AudioProperties was found. - */ - -TAGLIB_C_EXPORT BOOL taglib_file_is_valid(const TagLib_File *file); - -/*! - * Returns a pointer to the tag associated with this file. This will be freed - * automatically when the file is freed. - */ -TAGLIB_C_EXPORT TagLib_Tag *taglib_file_tag(const TagLib_File *file); - -/*! - * Returns a pointer to the audio properties associated with this file. This - * will be freed automatically when the file is freed. - */ -TAGLIB_C_EXPORT const TagLib_AudioProperties *taglib_file_audioproperties(const TagLib_File *file); - -/*! - * Saves the \a file to disk. - */ -TAGLIB_C_EXPORT BOOL taglib_file_save(TagLib_File *file); - -/****************************************************************************** - * Tag API - ******************************************************************************/ - -/*! - * Returns a string with this tag's title. - * - * \note By default this string should be UTF8 encoded and its memory should be - * freed using taglib_tag_free_strings(). - */ -TAGLIB_C_EXPORT char *taglib_tag_title(const TagLib_Tag *tag); - -/*! - * Returns a string with this tag's artist. - * - * \note By default this string should be UTF8 encoded and its memory should be - * freed using taglib_tag_free_strings(). - */ -TAGLIB_C_EXPORT char *taglib_tag_artist(const TagLib_Tag *tag); - -/*! - * Returns a string with this tag's album name. - * - * \note By default this string should be UTF8 encoded and its memory should be - * freed using taglib_tag_free_strings(). - */ -TAGLIB_C_EXPORT char *taglib_tag_album(const TagLib_Tag *tag); - -/*! - * Returns a string with this tag's comment. - * - * \note By default this string should be UTF8 encoded and its memory should be - * freed using taglib_tag_free_strings(). - */ -TAGLIB_C_EXPORT char *taglib_tag_comment(const TagLib_Tag *tag); - -/*! - * Returns a string with this tag's genre. - * - * \note By default this string should be UTF8 encoded and its memory should be - * freed using taglib_tag_free_strings(). - */ -TAGLIB_C_EXPORT char *taglib_tag_genre(const TagLib_Tag *tag); - -/*! - * Returns the tag's year or 0 if year is not set. - */ -TAGLIB_C_EXPORT unsigned int taglib_tag_year(const TagLib_Tag *tag); - -/*! - * Returns the tag's track number or 0 if track number is not set. - */ -TAGLIB_C_EXPORT unsigned int taglib_tag_track(const TagLib_Tag *tag); - -/*! - * Sets the tag's title. - * - * \note By default this string should be UTF8 encoded. - */ -TAGLIB_C_EXPORT void taglib_tag_set_title(TagLib_Tag *tag, const char *title); - -/*! - * Sets the tag's artist. - * - * \note By default this string should be UTF8 encoded. - */ -TAGLIB_C_EXPORT void taglib_tag_set_artist(TagLib_Tag *tag, const char *artist); - -/*! - * Sets the tag's album. - * - * \note By default this string should be UTF8 encoded. - */ -TAGLIB_C_EXPORT void taglib_tag_set_album(TagLib_Tag *tag, const char *album); - -/*! - * Sets the tag's comment. - * - * \note By default this string should be UTF8 encoded. - */ -TAGLIB_C_EXPORT void taglib_tag_set_comment(TagLib_Tag *tag, const char *comment); - -/*! - * Sets the tag's genre. - * - * \note By default this string should be UTF8 encoded. - */ -TAGLIB_C_EXPORT void taglib_tag_set_genre(TagLib_Tag *tag, const char *genre); - -/*! - * Sets the tag's year. 0 indicates that this field should be cleared. - */ -TAGLIB_C_EXPORT void taglib_tag_set_year(TagLib_Tag *tag, unsigned int year); - -/*! - * Sets the tag's track number. 0 indicates that this field should be cleared. - */ -TAGLIB_C_EXPORT void taglib_tag_set_track(TagLib_Tag *tag, unsigned int track); - -/*! - * Frees all of the strings that have been created by the tag. - */ -TAGLIB_C_EXPORT void taglib_tag_free_strings(void); - -/****************************************************************************** - * Audio Properties API - ******************************************************************************/ - -/*! - * Returns the length of the file in seconds. - */ -TAGLIB_C_EXPORT int taglib_audioproperties_length(const TagLib_AudioProperties *audioProperties); - -/*! - * Returns the bitrate of the file in kb/s. - */ -TAGLIB_C_EXPORT int taglib_audioproperties_bitrate(const TagLib_AudioProperties *audioProperties); - -/*! - * Returns the sample rate of the file in Hz. - */ -TAGLIB_C_EXPORT int taglib_audioproperties_samplerate(const TagLib_AudioProperties *audioProperties); - -/*! - * Returns the number of channels in the audio stream. - */ -TAGLIB_C_EXPORT int taglib_audioproperties_channels(const TagLib_AudioProperties *audioProperties); - -/******************************************************************************* - * Special convenience ID3v2 functions - *******************************************************************************/ - -typedef enum { - TagLib_ID3v2_Latin1, - TagLib_ID3v2_UTF16, - TagLib_ID3v2_UTF16BE, - TagLib_ID3v2_UTF8 -} TagLib_ID3v2_Encoding; - -/*! - * This sets the default encoding for ID3v2 frames that are written to tags. - */ - -TAGLIB_C_EXPORT void taglib_id3v2_set_default_text_encoding(TagLib_ID3v2_Encoding encoding); - -#ifdef __cplusplus -} -#endif -#endif /* DO_NOT_DOCUMENT */ -#endif diff --git a/taglib/include/taglib/taglib.h b/taglib/include/taglib/taglib.h deleted file mode 100644 index b754b26..0000000 --- a/taglib/include/taglib/taglib.h +++ /dev/null @@ -1,179 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_H -#define TAGLIB_H - -#include "taglib_config.h" - -#define TAGLIB_MAJOR_VERSION 1 -#define TAGLIB_MINOR_VERSION 13 -#define TAGLIB_PATCH_VERSION 1 - -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 1)) || defined(__clang__) -#define TAGLIB_IGNORE_MISSING_DESTRUCTOR _Pragma("GCC diagnostic ignored \"-Wnon-virtual-dtor\"") -#else -#define TAGLIB_IGNORE_MISSING_DESTRUCTOR -#endif - -#if (defined(_MSC_VER) && _MSC_VER >= 1600) -#define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) -#else -#define TAGLIB_CONSTRUCT_BITSET(x) static_cast(x) -#endif - -#if __cplusplus >= 201402 -#define TAGLIB_DEPRECATED [[deprecated]] -#elif defined(__GNUC__) || defined(__clang__) -#define TAGLIB_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) -#define TAGLIB_DEPRECATED __declspec(deprecated) -#else -#define TAGLIB_DEPRECATED -#endif - -#include - -//! A namespace for all TagLib related classes and functions - -/*! - * This namespace contains everything in TagLib. For projects working with - * TagLib extensively it may be convenient to add a - * \code - * using namespace TagLib; - * \endcode - */ - -namespace TagLib { - - class String; - - // These integer types are deprecated. Do not use them. - - typedef wchar_t wchar; // Assumed to be sufficient to store a UTF-16 char. - typedef unsigned char uchar; - typedef unsigned short ushort; - typedef unsigned int uint; - typedef unsigned long ulong; - typedef unsigned long long ulonglong; - - /*! - * Unfortunately std::wstring isn't defined on some systems, (i.e. GCC < 3) - * so I'm providing something here that should be constant. - */ - typedef std::basic_string wstring; -} // namespace TagLib - -/*! - * \mainpage TagLib - * - * \section intro Introduction - * - * TagLib is a library for reading and editing audio meta data, commonly know as \e tags. - * - * Features: - * - A clean, high level, C++ API to handling audio meta data. - * - Format specific APIs for advanced API users. - * - ID3v1, ID3v2, APE, FLAC, Xiph, iTunes-style MP4 and WMA tag formats. - * - MP3, MPC, FLAC, MP4, ASF, AIFF, WAV, TrueAudio, WavPack, Ogg FLAC, Ogg Vorbis, Speex and Opus file formats. - * - Basic audio file properties such as length, sample rate, etc. - * - Long term binary and source compatibility. - * - Extensible design, notably the ability to add other formats or extend current formats as a library user. - * - Full support for unicode and internationalized tags. - * - Dual MPL and - * LGPL licenses. - * - No external toolkit dependencies. - * - * \section why Why TagLib? - * - * TagLib originally was written to provide an updated and improved ID3v2 implementation in C++ for use - * in a variety of Open Source projects. Since development began in 2002 and the 1.0 release in 2004 - * it has expanded to cover a wide variety of tag and file formats and is used in a wide variety of - * Open Source and proprietary applications. It now supports a variety of UNIXes, including Apple's OS - * X, as well as Microsoft Windows. - * - * \section commercial Usage in Commercial Applications - * - * TagLib's licenses \e do allow usage within propriety (\e closed) applications, however TagLib is \e not - * public domain. Please note the requirements of the LGPL or MPL, and adhere to at least one of them. - * In simple terms, you must at a minimum note your usage of TagLib, note the licensing terms of TagLib and - * if you make changes to TagLib publish them. Please review the licenses above before using TagLib in your - * software. Note that you may choose either the MPL or the LGPL, you do not have to fulfill the - * requirements of both. - * - * \section installing Installing TagLib - * - * Please see the TagLib website for the latest - * downloads. - * - * TagLib can be built using the CMake build system. TagLib installs a taglib-config and pkg-config file to - * make it easier to integrate into various build systems. Note that TagLib's include install directory \e must - * be included in the header include path. Simply adding will \e not work. - * - * \section start Getting Started - * - * TagLib provides both simple, abstract APIs which make it possible to ignore the differences between tagging - * formats and format specific APIs which allow programmers to work with the features of specific tagging - * schemes. There is a similar abstraction mechanism for AudioProperties. - * - * The best place to start is with the Class Hierarchy linked at the top of the page. The File and - * AudioProperties classes and their subclasses are the core of TagLib. The FileRef class is also a convenient - * way for using a value-based handle. - * - * \note When working with FileRef please consider that it has only the most basic (extension-based) file - * type resolution. Please see its documentation on how to plug in more advanced file type resolution. (Such - * resolution may be part of later TagLib releases by default.) - * - * Here's a very simple example with TagLib: - * - * \code - * - * TagLib::FileRef f("Latex Solar Beef.mp3"); - * TagLib::String artist = f.tag()->artist(); // artist == "Frank Zappa" - * - * f.tag()->setAlbum("Fillmore East"); - * f.save(); - * - * TagLib::FileRef g("Free City Rhymes.ogg"); - * TagLib::String album = g.tag()->album(); // album == "NYC Ghosts & Flowers" - * - * g.tag()->setTrack(1); - * g.save(); - * - * \endcode - * - * More examples can be found in the \e examples directory of the source distribution. - * - * \section Contact - * - * Questions about TagLib should be directed to the TagLib mailing list, not directly to the author. - * - * - TagLib Homepage - * - TagLib Mailing List (taglib-devel@kde.org) - * - * \author TagLib authors. - */ - -#endif diff --git a/taglib/include/taglib/taglib_config.h b/taglib/include/taglib/taglib_config.h deleted file mode 100644 index 915f130..0000000 --- a/taglib/include/taglib/taglib_config.h +++ /dev/null @@ -1,11 +0,0 @@ -/* taglib_config.h. Generated by cmake from taglib_config.h.cmake */ - -#ifndef TAGLIB_TAGLIB_CONFIG_H -#define TAGLIB_TAGLIB_CONFIG_H - -/* These values are no longer used. This file is present only for compatibility reasons. */ - -#define TAGLIB_WITH_ASF 1 -#define TAGLIB_WITH_MP4 1 - -#endif diff --git a/taglib/include/taglib/taglib_export.h b/taglib/include/taglib/taglib_export.h deleted file mode 100644 index 737ae64..0000000 --- a/taglib/include/taglib/taglib_export.h +++ /dev/null @@ -1,43 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_EXPORT_H -#define TAGLIB_EXPORT_H - -#if defined(TAGLIB_STATIC) -#define TAGLIB_EXPORT -#elif (defined(_WIN32) || defined(_WIN64)) -#ifdef MAKE_TAGLIB_LIB -#define TAGLIB_EXPORT __declspec(dllexport) -#else -#define TAGLIB_EXPORT __declspec(dllimport) -#endif -#elif defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 1) -#define TAGLIB_EXPORT __attribute__ ((visibility("default"))) -#else -#define TAGLIB_EXPORT -#endif - -#endif diff --git a/taglib/include/taglib/tbytevector.h b/taglib/include/taglib/tbytevector.h deleted file mode 100644 index bc8eda7..0000000 --- a/taglib/include/taglib/tbytevector.h +++ /dev/null @@ -1,635 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_BYTEVECTOR_H -#define TAGLIB_BYTEVECTOR_H - -#include "taglib.h" -#include "taglib_export.h" - -#include -#include - -namespace TagLib { - - //! A byte vector - - /*! - * This class provides a byte vector with some methods that are useful for - * tagging purposes. Many of the search functions are tailored to what is - * useful for finding tag related patterns in a data array. - */ - - class TAGLIB_EXPORT ByteVector - { - public: -#ifndef DO_NOT_DOCUMENT - typedef std::vector::iterator Iterator; - typedef std::vector::const_iterator ConstIterator; - typedef std::vector::reverse_iterator ReverseIterator; - typedef std::vector::const_reverse_iterator ConstReverseIterator; -#endif - - /*! - * Constructs an empty byte vector. - */ - ByteVector(); - - /*! - * Construct a vector of size \a size with all values set to \a value by - * default. - */ - ByteVector(unsigned int size, char value = 0); - - /*! - * Constructs a byte vector that is a copy of \a v. - */ - ByteVector(const ByteVector &v); - - /*! - * Constructs a byte vector that is a copy of \a v. - */ - ByteVector(const ByteVector &v, unsigned int offset, unsigned int length); - - /*! - * Constructs a byte vector that contains \a c. - */ - ByteVector(char c); - - /*! - * Constructs a byte vector that copies \a data for up to \a length bytes. - */ - ByteVector(const char *data, unsigned int length); - - /*! - * Constructs a byte vector that copies \a data up to the first null - * byte. This is particularly useful for constructing byte arrays from - * string constants. - * - * \warning The behavior is undefined if \a data is not null terminated. - */ - ByteVector(const char *data); - - /*! - * Destroys this ByteVector instance. - */ - virtual ~ByteVector(); - - /*! - * Sets the data for the byte array using the first \a length bytes of \a data - */ - ByteVector &setData(const char *data, unsigned int length); - - /*! - * Sets the data for the byte array copies \a data up to the first null - * byte. The behavior is undefined if \a data is not null terminated. - */ - ByteVector &setData(const char *data); - - /*! - * Returns a pointer to the internal data structure. - * - * \warning Care should be taken when modifying this data structure as it is - * easy to corrupt the ByteVector when doing so. Specifically, while the - * data may be changed, its length may not be. - */ - char *data(); - - /*! - * Returns a pointer to the internal data structure which may not be modified. - */ - const char *data() const; - - /*! - * Returns a byte vector made up of the bytes starting at \a index and - * for \a length bytes. If \a length is not specified it will return the bytes - * from \a index to the end of the vector. - */ - ByteVector mid(unsigned int index, unsigned int length = 0xffffffff) const; - - /*! - * This essentially performs the same as operator[](), but instead of causing - * a runtime error if the index is out of bounds, it will return a null byte. - */ - char at(unsigned int index) const; - - /*! - * Searches the ByteVector for \a pattern starting at \a offset and returns - * the offset. Returns -1 if the pattern was not found. If \a byteAlign is - * specified the pattern will only be matched if it starts on a byte divisible - * by \a byteAlign (starting from \a offset). - */ - int find(const ByteVector &pattern, unsigned int offset = 0, int byteAlign = 1) const; - - /*! - * Searches the char for \a c starting at \a offset and returns - * the offset. Returns \a -1 if the pattern was not found. If \a byteAlign is - * specified the pattern will only be matched if it starts on a byte divisible - * by \a byteAlign (starting from \a offset). - */ - int find(char c, unsigned int offset = 0, int byteAlign = 1) const; - - /*! - * Searches the ByteVector for \a pattern starting from either the end of the - * vector or \a offset and returns the offset. Returns -1 if the pattern was - * not found. If \a byteAlign is specified the pattern will only be matched - * if it starts on a byte divisible by \a byteAlign (starting from \a offset). - */ - int rfind(const ByteVector &pattern, unsigned int offset = 0, int byteAlign = 1) const; - - /*! - * Checks to see if the vector contains the \a pattern starting at position - * \a offset. Optionally, if you only want to search for part of the pattern - * you can specify an offset within the pattern to start from. Also, you can - * specify to only check for the first \a patternLength bytes of \a pattern with - * the \a patternLength argument. - */ - bool containsAt(const ByteVector &pattern, unsigned int offset, - unsigned int patternOffset = 0, unsigned int patternLength = 0xffffffff) const; - - /*! - * Returns true if the vector starts with \a pattern. - */ - bool startsWith(const ByteVector &pattern) const; - - /*! - * Returns true if the vector ends with \a pattern. - */ - bool endsWith(const ByteVector &pattern) const; - - /*! - * Replaces \a oldByte with \a newByte and returns a reference to the - * ByteVector after the operation. This \e does modify the vector. - */ - ByteVector &replace(char oldByte, char newByte); - - /*! - * Replaces \a pattern with \a with and returns a reference to the ByteVector - * after the operation. This \e does modify the vector. - */ - ByteVector &replace(const ByteVector &pattern, const ByteVector &with); - - /*! - * Checks for a partial match of \a pattern at the end of the vector. It - * returns the offset of the partial match within the vector, or -1 if the - * pattern is not found. This method is particularly useful when searching for - * patterns that start in one vector and end in another. When combined with - * startsWith() it can be used to find a pattern that overlaps two buffers. - * - * \note This will not match the complete pattern at the end of the string; use - * endsWith() for that. - */ - int endsWithPartialMatch(const ByteVector &pattern) const; - - /*! - * Appends \a v to the end of the ByteVector. - */ - ByteVector &append(const ByteVector &v); - - /*! - * Appends \a c to the end of the ByteVector. - */ - ByteVector &append(char c); - - /*! - * Clears the data. - */ - ByteVector &clear(); - - /*! - * Returns the size of the array. - */ - unsigned int size() const; - - /*! - * Resize the vector to \a size. If the vector is currently less than - * \a size, pad the remaining spaces with \a padding. Returns a reference - * to the resized vector. - */ - ByteVector &resize(unsigned int size, char padding = 0); - - /*! - * Returns an Iterator that points to the front of the vector. - */ - Iterator begin(); - - /*! - * Returns a ConstIterator that points to the front of the vector. - */ - ConstIterator begin() const; - - /*! - * Returns an Iterator that points to the back of the vector. - */ - Iterator end(); - - /*! - * Returns a ConstIterator that points to the back of the vector. - */ - ConstIterator end() const; - - /*! - * Returns a ReverseIterator that points to the front of the vector. - */ - ReverseIterator rbegin(); - - /*! - * Returns a ConstReverseIterator that points to the front of the vector. - */ - ConstReverseIterator rbegin() const; - - /*! - * Returns a ReverseIterator that points to the back of the vector. - */ - ReverseIterator rend(); - - /*! - * Returns a ConstReverseIterator that points to the back of the vector. - */ - ConstReverseIterator rend() const; - - /*! - * Returns true if the vector is null. - * - * \note A vector may be empty without being null. So do not use this - * method to check if the vector is empty. - * - * \see isEmpty() - * - * \deprecated Use isEmpty(), do not differentiate between null and empty. - */ - // BIC: remove - TAGLIB_DEPRECATED bool isNull() const; - - /*! - * Returns true if the ByteVector is empty. - * - * \see size() - * \see isNull() - */ - bool isEmpty() const; - - /*! - * Returns a CRC checksum of the byte vector's data. - * - * \note This uses an uncommon variant of CRC32 specializes in Ogg. - */ - // BIC: Remove or make generic. - unsigned int checksum() const; - - /*! - * Converts the first 4 bytes of the vector to an unsigned integer. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 $00 $00 $01 == 0x00000001 == 1, if false, $01 00 00 00 == - * 0x01000000 == 1. - * - * \see fromUInt() - */ - unsigned int toUInt(bool mostSignificantByteFirst = true) const; - - /*! - * Converts the 4 bytes at \a offset of the vector to an unsigned integer. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 $00 $00 $01 == 0x00000001 == 1, if false, $01 00 00 00 == - * 0x01000000 == 1. - * - * \see fromUInt() - */ - unsigned int toUInt(unsigned int offset, bool mostSignificantByteFirst = true) const; - - /*! - * Converts the \a length bytes at \a offset of the vector to an unsigned - * integer. If \a length is larger than 4, the excess is ignored. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 $00 $00 $01 == 0x00000001 == 1, if false, $01 00 00 00 == - * 0x01000000 == 1. - * - * \see fromUInt() - */ - unsigned int toUInt(unsigned int offset, unsigned int length, - bool mostSignificantByteFirst = true) const; - - /*! - * Converts the first 2 bytes of the vector to a (signed) short. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 $01 == 0x0001 == 1, if false, $01 00 == 0x01000000 == 1. - * - * \see fromShort() - */ - short toShort(bool mostSignificantByteFirst = true) const; - - /*! - * Converts the 2 bytes at \a offset of the vector to a (signed) short. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 $01 == 0x0001 == 1, if false, $01 00 == 0x01000000 == 1. - * - * \see fromShort() - */ - short toShort(unsigned int offset, bool mostSignificantByteFirst = true) const; - - /*! - * Converts the first 2 bytes of the vector to a unsigned short. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 $01 == 0x0001 == 1, if false, $01 00 == 0x01000000 == 1. - * - * \see fromShort() - */ - unsigned short toUShort(bool mostSignificantByteFirst = true) const; - - /*! - * Converts the 2 bytes at \a offset of the vector to a unsigned short. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 $01 == 0x0001 == 1, if false, $01 00 == 0x01000000 == 1. - * - * \see fromShort() - */ - unsigned short toUShort(unsigned int offset, bool mostSignificantByteFirst = true) const; - - /*! - * Converts the first 8 bytes of the vector to a (signed) long long. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 00 00 00 00 00 00 01 == 0x0000000000000001 == 1, - * if false, $01 00 00 00 00 00 00 00 == 0x0100000000000000 == 1. - * - * \see fromUInt() - */ - long long toLongLong(bool mostSignificantByteFirst = true) const; - - /*! - * Converts the 8 bytes at \a offset of the vector to a (signed) long long. - * - * If \a mostSignificantByteFirst is true this will operate left to right - * evaluating the integer. For example if \a mostSignificantByteFirst is - * true then $00 00 00 00 00 00 00 01 == 0x0000000000000001 == 1, - * if false, $01 00 00 00 00 00 00 00 == 0x0100000000000000 == 1. - * - * \see fromUInt() - */ - long long toLongLong(unsigned int offset, bool mostSignificantByteFirst = true) const; - - /* - * Converts the 4 bytes at \a offset of the vector to a float as an IEEE754 - * 32-bit little-endian floating point number. - */ - float toFloat32LE(size_t offset) const; - - /* - * Converts the 4 bytes at \a offset of the vector to a float as an IEEE754 - * 32-bit big-endian floating point number. - */ - float toFloat32BE(size_t offset) const; - - /* - * Converts the 8 bytes at \a offset of the vector to a double as an IEEE754 - * 64-bit little-endian floating point number. - */ - double toFloat64LE(size_t offset) const; - - /* - * Converts the 8 bytes at \a offset of the vector to a double as an IEEE754 - * 64-bit big-endian floating point number. - */ - double toFloat64BE(size_t offset) const; - - /* - * Converts the 10 bytes at \a offset of the vector to a long double as an - * IEEE754 80-bit little-endian floating point number. - * - * \note This may compromise the precision depends on the size of long double. - */ - long double toFloat80LE(size_t offset) const; - - /* - * Converts the 10 bytes at \a offset of the vector to a long double as an - * IEEE754 80-bit big-endian floating point number. - * - * \note This may compromise the precision depends on the size of long double. - */ - long double toFloat80BE(size_t offset) const; - - /*! - * Creates a 4 byte ByteVector based on \a value. If - * \a mostSignificantByteFirst is true, then this will operate left to right - * in building the ByteVector. For example if \a mostSignificantByteFirst is - * true then $00 00 00 01 == 0x00000001 == 1, if false, $01 00 00 00 == - * 0x01000000 == 1. - * - * \see toUInt() - */ - static ByteVector fromUInt(unsigned int value, bool mostSignificantByteFirst = true); - - /*! - * Creates a 2 byte ByteVector based on \a value. If - * \a mostSignificantByteFirst is true, then this will operate left to right - * in building the ByteVector. For example if \a mostSignificantByteFirst is - * true then $00 01 == 0x0001 == 1, if false, $01 00 == 0x0100 == 1. - * - * \see toShort() - */ - static ByteVector fromShort(short value, bool mostSignificantByteFirst = true); - - /*! - * Creates a 8 byte ByteVector based on \a value. If - * \a mostSignificantByteFirst is true, then this will operate left to right - * in building the ByteVector. For example if \a mostSignificantByteFirst is - * true then $00 00 00 01 == 0x0000000000000001 == 1, if false, - * $01 00 00 00 00 00 00 00 == 0x0100000000000000 == 1. - * - * \see toLongLong() - */ - static ByteVector fromLongLong(long long value, bool mostSignificantByteFirst = true); - - /*! - * Creates a 4 byte ByteVector based on \a value as an IEEE754 32-bit - * little-endian floating point number. - * - * \see fromFloat32BE() - */ - static ByteVector fromFloat32LE(float value); - - /*! - * Creates a 4 byte ByteVector based on \a value as an IEEE754 32-bit - * big-endian floating point number. - * - * \see fromFloat32LE() - */ - static ByteVector fromFloat32BE(float value); - - /*! - * Creates a 8 byte ByteVector based on \a value as an IEEE754 64-bit - * little-endian floating point number. - * - * \see fromFloat64BE() - */ - static ByteVector fromFloat64LE(double value); - - /*! - * Creates a 8 byte ByteVector based on \a value as an IEEE754 64-bit - * big-endian floating point number. - * - * \see fromFloat64LE() - */ - static ByteVector fromFloat64BE(double value); - - /*! - * Returns a ByteVector based on the CString \a s. - */ - static ByteVector fromCString(const char *s, unsigned int length = 0xffffffff); - - /*! - * Returns a const reference to the byte at \a index. - */ - const char &operator[](int index) const; - - /*! - * Returns a reference to the byte at \a index. - */ - char &operator[](int index); - - /*! - * Returns true if this ByteVector and \a v are equal. - */ - bool operator==(const ByteVector &v) const; - - /*! - * Returns true if this ByteVector and \a v are not equal. - */ - bool operator!=(const ByteVector &v) const; - - /*! - * Returns true if this ByteVector and the null terminated C string \a s - * contain the same data. - */ - bool operator==(const char *s) const; - - /*! - * Returns true if this ByteVector and the null terminated C string \a s - * do not contain the same data. - */ - bool operator!=(const char *s) const; - - /*! - * Returns true if this ByteVector is less than \a v. The value of the - * vectors is determined by evaluating the character from left to right, and - * in the event one vector is a superset of the other, the size is used. - */ - bool operator<(const ByteVector &v) const; - - /*! - * Returns true if this ByteVector is greater than \a v. - */ - bool operator>(const ByteVector &v) const; - - /*! - * Returns a vector that is \a v appended to this vector. - */ - ByteVector operator+(const ByteVector &v) const; - - /*! - * Copies ByteVector \a v. - */ - ByteVector &operator=(const ByteVector &v); - - /*! - * Copies a byte \a c. - */ - ByteVector &operator=(char c); - - /*! - * Copies \a data up to the first null byte. - * - * \warning The behavior is undefined if \a data is not null terminated. - */ - ByteVector &operator=(const char *data); - - /*! - * Exchanges the content of the ByteVector by the content of \a v. - */ - void swap(ByteVector &v); - - /*! - * A static, empty ByteVector which is convenient and fast (since returning - * an empty or "null" value does not require instantiating a new ByteVector). - * - * \warning Do not modify this variable. It will mess up the internal state - * of TagLib. - * - * \deprecated Use ByteVector(). - */ - // BIC: remove - TAGLIB_DEPRECATED static ByteVector null; - - /*! - * Returns a hex-encoded copy of the byte vector. - */ - ByteVector toHex() const; - - /*! - * Returns a base64 encoded copy of the byte vector - */ - ByteVector toBase64() const; - - /*! - * Decodes the base64 encoded byte vector. - */ - static ByteVector fromBase64(const ByteVector &); - - protected: - /* - * If this ByteVector is being shared via implicit sharing, do a deep copy - * of the data and separate from the shared members. This should be called - * by all non-const subclass members. - */ - void detach(); - - private: - class ByteVectorPrivate; - ByteVectorPrivate *d; - }; -} // namespace TagLib - -/*! - * \relates TagLib::ByteVector - * Streams the ByteVector \a v to the output stream \a s. - */ -TAGLIB_EXPORT std::ostream &operator<<(std::ostream &s, const TagLib::ByteVector &v); - -#endif diff --git a/taglib/include/taglib/tbytevectorlist.h b/taglib/include/taglib/tbytevectorlist.h deleted file mode 100644 index 27fc64a..0000000 --- a/taglib/include/taglib/tbytevectorlist.h +++ /dev/null @@ -1,91 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_BYTEVECTORLIST_H -#define TAGLIB_BYTEVECTORLIST_H - -#include "taglib_export.h" -#include "tbytevector.h" -#include "tlist.h" - -namespace TagLib { - - //! A list of ByteVectors - - /*! - * A List specialization with some handy features useful for ByteVectors. - */ - - class TAGLIB_EXPORT ByteVectorList : public List - { - public: - - /*! - * Construct an empty ByteVectorList. - */ - ByteVectorList(); - - /*! - * Destroys this ByteVectorList instance. - */ - virtual ~ByteVectorList(); - - /*! - * Make a shallow, implicitly shared, copy of \a l. Because this is - * implicitly shared, this method is lightweight and suitable for - * pass-by-value usage. - */ - ByteVectorList(const ByteVectorList &l); - - /*! - * Convert the ByteVectorList to a ByteVector separated by \a separator. By - * default a space is used. - */ - ByteVector toByteVector(const ByteVector &separator = " ") const; - - /*! - * Splits the ByteVector \a v into several strings at \a pattern. This will - * not include the pattern in the returned ByteVectors. - */ - static ByteVectorList split(const ByteVector &v, const ByteVector &pattern, - int byteAlign = 1); - /*! - * Splits the ByteVector \a v into several strings at \a pattern. This will - * not include the pattern in the returned ByteVectors. \a max is the - * maximum number of entries that will be separated. If \a max for instance - * is 2 then a maximum of 1 match will be found and the vector will be split - * on that match. - */ - // BIC: merge with the function above - static ByteVectorList split(const ByteVector &v, const ByteVector &pattern, - int byteAlign, int max); - private: - class ByteVectorListPrivate; - ByteVectorListPrivate *d; - }; - -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/tbytevectorstream.h b/taglib/include/taglib/tbytevectorstream.h deleted file mode 100644 index 5aa8fcf..0000000 --- a/taglib/include/taglib/tbytevectorstream.h +++ /dev/null @@ -1,145 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Lukas Lalinsky - email : lalinsky@gmail.com - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_BYTEVECTORSTREAM_H -#define TAGLIB_BYTEVECTORSTREAM_H - -#include "taglib_export.h" -#include "taglib.h" -#include "tbytevector.h" -#include "tiostream.h" - -namespace TagLib { - - class String; - class Tag; - class AudioProperties; - - //! In-memory Stream class using ByteVector for its storage. - - class TAGLIB_EXPORT ByteVectorStream : public IOStream - { - public: - /*! - * Construct a File object and opens the \a file. \a file should be a - * be a C-string in the local file system encoding. - */ - ByteVectorStream(const ByteVector &data); - - /*! - * Destroys this ByteVectorStream instance. - */ - virtual ~ByteVectorStream(); - - /*! - * Returns the file name in the local file system encoding. - */ - FileName name() const; - - /*! - * Reads a block of size \a length at the current get pointer. - */ - ByteVector readBlock(unsigned long length); - - /*! - * Attempts to write the block \a data at the current get pointer. If the - * file is currently only opened read only -- i.e. readOnly() returns true -- - * this attempts to reopen the file in read/write mode. - * - * \note This should be used instead of using the streaming output operator - * for a ByteVector. And even this function is significantly slower than - * doing output with a char[]. - */ - void writeBlock(const ByteVector &data); - - /*! - * Insert \a data at position \a start in the file overwriting \a replace - * bytes of the original content. - * - * \note This method is slow since it requires rewriting all of the file - * after the insertion point. - */ - void insert(const ByteVector &data, unsigned long start = 0, unsigned long replace = 0); - - /*! - * Removes a block of the file starting a \a start and continuing for - * \a length bytes. - * - * \note This method is slow since it involves rewriting all of the file - * after the removed portion. - */ - void removeBlock(unsigned long start = 0, unsigned long length = 0); - - /*! - * Returns true if the file is read only (or if the file can not be opened). - */ - bool readOnly() const; - - /*! - * Since the file can currently only be opened as an argument to the - * constructor (sort-of by design), this returns if that open succeeded. - */ - bool isOpen() const; - - /*! - * Move the I/O pointer to \a offset in the file from position \a p. This - * defaults to seeking from the beginning of the file. - * - * \see Position - */ - void seek(long offset, Position p = Beginning); - - /*! - * Reset the end-of-file and error flags on the file. - */ - void clear(); - - /*! - * Returns the current offset within the file. - */ - long tell() const; - - /*! - * Returns the length of the file. - */ - long length(); - - /*! - * Truncates the file to a \a length. - */ - void truncate(long length); - - ByteVector *data(); - - protected: - - private: - class ByteVectorStreamPrivate; - ByteVectorStreamPrivate *d; - }; - -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/tdebuglistener.h b/taglib/include/taglib/tdebuglistener.h deleted file mode 100644 index e4e4279..0000000 --- a/taglib/include/taglib/tdebuglistener.h +++ /dev/null @@ -1,74 +0,0 @@ -/*************************************************************************** - copyright : (C) 2013 by Tsuda Kageyu - email : tsuda.kageyu@gmail.com - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_DEBUGLISTENER_H -#define TAGLIB_DEBUGLISTENER_H - -#include "taglib_export.h" -#include "tstring.h" - -namespace TagLib -{ - //! An abstraction for the listener to the debug messages. - - /*! - * This class enables you to handle the debug messages in your preferred - * way by subclassing this class, reimplementing printMessage() and setting - * your reimplementation as the default with setDebugListener(). - * - * \see setDebugListener() - */ - class TAGLIB_EXPORT DebugListener - { - public: - DebugListener(); - virtual ~DebugListener(); - - /*! - * When overridden in a derived class, redirects \a msg to your preferred - * channel such as stderr, Windows debugger or so forth. - */ - virtual void printMessage(const String &msg) = 0; - - private: - // Noncopyable - DebugListener(const DebugListener &); - DebugListener &operator=(const DebugListener &); - }; - - /*! - * Sets the listener that decides how the debug messages are redirected. - * If the parameter \a listener is null, the previous listener is released - * and default stderr listener is restored. - * - * \note The caller is responsible for deleting the previous listener - * as needed after it is released. - * - * \see DebugListener - */ - TAGLIB_EXPORT void setDebugListener(DebugListener *listener); -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/textidentificationframe.h b/taglib/include/taglib/textidentificationframe.h deleted file mode 100644 index cc73f59..0000000 --- a/taglib/include/taglib/textidentificationframe.h +++ /dev/null @@ -1,313 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_TEXTIDENTIFICATIONFRAME_H -#define TAGLIB_TEXTIDENTIFICATIONFRAME_H - -#include "tstringlist.h" -#include "tmap.h" -#include "taglib_export.h" - -#include "id3v2frame.h" - -namespace TagLib { - - namespace ID3v2 { - - class Tag; - typedef Map KeyConversionMap; - - //! An ID3v2 text identification frame implementation - - /*! - * This is an implementation of the most common type of ID3v2 frame -- text - * identification frames. There are a number of variations on this. Those - * enumerated in the ID3v2.4 standard are: - * - *
    - *
  • TALB Album/Movie/Show title
  • - *
  • TBPM BPM (beats per minute)
  • - *
  • TCOM Composer
  • - *
  • TCON Content type
  • - *
  • TCOP Copyright message
  • - *
  • TDEN Encoding time
  • - *
  • TDLY Playlist delay
  • - *
  • TDOR Original release time
  • - *
  • TDRC Recording time
  • - *
  • TDRL Release time
  • - *
  • TDTG Tagging time
  • - *
  • TENC Encoded by
  • - *
  • TEXT Lyricist/Text writer
  • - *
  • TFLT File type
  • - *
  • TIPL Involved people list
  • - *
  • TIT1 Content group description
  • - *
  • TIT2 Title/songname/content description
  • - *
  • TIT3 Subtitle/Description refinement
  • - *
  • TKEY Initial key
  • - *
  • TLAN Language(s)
  • - *
  • TLEN Length
  • - *
  • TMCL Musician credits list
  • - *
  • TMED Media type
  • - *
  • TMOO Mood
  • - *
  • TOAL Original album/movie/show title
  • - *
  • TOFN Original filename
  • - *
  • TOLY Original lyricist(s)/text writer(s)
  • - *
  • TOPE Original artist(s)/performer(s)
  • - *
  • TOWN File owner/licensee
  • - *
  • TPE1 Lead performer(s)/Soloist(s)
  • - *
  • TPE2 Band/orchestra/accompaniment
  • - *
  • TPE3 Conductor/performer refinement
  • - *
  • TPE4 Interpreted, remixed, or otherwise modified by
  • - *
  • TPOS Part of a set
  • - *
  • TPRO Produced notice
  • - *
  • TPUB Publisher
  • - *
  • TRCK Track number/Position in set
  • - *
  • TRSN Internet radio station name
  • - *
  • TRSO Internet radio station owner
  • - *
  • TSOA Album sort order
  • - *
  • TSOP Performer sort order
  • - *
  • TSOT Title sort order
  • - *
  • TSRC ISRC (international standard recording code)
  • - *
  • TSSE Software/Hardware and settings used for encoding
  • - *
  • TSST Set subtitle
  • - *
- * - * The ID3v2 Frames document gives a description of each of these formats - * and the expected order of strings in each. ID3v2::Header::frameID() can - * be used to determine the frame type. - * - * \note If non-Latin1 compatible strings are used with this class, even if - * the text encoding is set to Latin1, the frame will be written using UTF8 - * (with the encoding flag appropriately set in the output). - */ - - class TAGLIB_EXPORT TextIdentificationFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * Construct an empty frame of type \a type. Uses \a encoding as the - * default text encoding. - * - * \note In this case you must specify the text encoding as it - * resolves the ambiguity between constructors. - * - * \note Please see the note in the class description regarding Latin1. - */ - TextIdentificationFrame(const ByteVector &type, String::Type encoding); - - /*! - * This is a dual purpose constructor. \a data can either be binary data - * that should be parsed or (at a minimum) the frame ID. - */ - explicit TextIdentificationFrame(const ByteVector &data); - - /*! - * This is a special factory method to create a TIPL (involved people list) - * frame from the given \a properties. Will parse key=[list of values] data - * into the TIPL format as specified in the ID3 standard. - */ - static TextIdentificationFrame *createTIPLFrame(const PropertyMap &properties); - - /*! - * This is a special factory method to create a TMCL (musician credits list) - * frame from the given \a properties. Will parse key=[list of values] data - * into the TMCL format as specified in the ID3 standard, where key should be - * of the form instrumentPrefix:instrument. - */ - static TextIdentificationFrame *createTMCLFrame(const PropertyMap &properties); - /*! - * Destroys this TextIdentificationFrame instance. - */ - virtual ~TextIdentificationFrame(); - - /*! - * Text identification frames are a list of string fields. - * - * This function will accept either a StringList or a String (using the - * StringList constructor that accepts a single String). - * - * \note This will not change the text encoding of the frame even if the - * strings passed in are not of the same encoding. Please use - * setEncoding(s.type()) if you wish to change the encoding of the frame. - */ - void setText(const StringList &l); - - // Reimplementations. - - virtual void setText(const String &s); - virtual String toString() const; - - /*! - * Returns the text encoding that will be used in rendering this frame. - * This defaults to the type that was either specified in the constructor - * or read from the frame when parsed. - * - * \note Please see the note in the class description regarding Latin1. - * - * \see setTextEncoding() - * \see render() - */ - String::Type textEncoding() const; - - /*! - * Sets the text encoding to be used when rendering this frame to - * \a encoding. - * - * \note Please see the note in the class description regarding Latin1. - * - * \see textEncoding() - * \see render() - */ - void setTextEncoding(String::Type encoding); - - /*! - * Returns a list of the strings in this frame. - */ - StringList fieldList() const; - - /*! - * Returns a KeyConversionMap mapping a role as it would be used in a PropertyMap - * to the corresponding key used in a TIPL ID3 frame to describe that role. - */ - static const KeyConversionMap &involvedPeopleMap(); - - PropertyMap asProperties() const; - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - /*! - * The constructor used by the FrameFactory. - */ - TextIdentificationFrame(const ByteVector &data, Header *h); - - private: - TextIdentificationFrame(const TextIdentificationFrame &); - TextIdentificationFrame &operator=(const TextIdentificationFrame &); - - /*! - * Parses the special structure of a TIPL frame - * Only the whitelisted roles "ARRANGER", "ENGINEER", "PRODUCER", - * "DJMIXER" (ID3: "DJ-MIX") and "MIXER" (ID3: "MIX") are allowed. - */ - PropertyMap makeTIPLProperties() const; - /*! - * Parses the special structure of a TMCL frame. - */ - PropertyMap makeTMCLProperties() const; - class TextIdentificationFramePrivate; - TextIdentificationFramePrivate *d; - }; - - /*! - * This is a specialization of text identification frames that allows for - * user defined entries. Each entry has a description in addition to the - * normal list of fields that a text identification frame has. - * - * This description identifies the frame and must be unique. - */ - - //! An ID3v2 custom text identification frame implementation - - class TAGLIB_EXPORT UserTextIdentificationFrame : public TextIdentificationFrame - { - friend class FrameFactory; - - public: - /*! - * Constructs an empty user defined text identification frame. For this to be - * a useful frame both a description and text must be set. - */ - explicit UserTextIdentificationFrame(String::Type encoding = String::Latin1); - - /*! - * Creates a frame based on \a data. - */ - explicit UserTextIdentificationFrame(const ByteVector &data); - - /*! - * Creates a user defined text identification frame with the given \a description - * and \a values. - */ - UserTextIdentificationFrame(const String &description, const StringList &values, String::Type encoding = String::UTF8); - - virtual String toString() const; - - /*! - * Returns the description for this frame. - */ - String description() const; - - /*! - * Sets the description of the frame to \a s. \a s must be unique. You can - * check for the presence of another user defined text frame of the same type - * using find() and testing for null. - */ - void setDescription(const String &s); - - StringList fieldList() const; - void setText(const String &text); - void setText(const StringList &fields); - - /*! - * A UserTextIdentificationFrame is parsed into a PropertyMap as follows: - * - the key is the frame's description, uppercased - * - if the description contains '::', only the substring after that - * separator is considered as key (compatibility with exfalso) - * - if the above rules don't yield a valid key (e.g. containing non-ASCII - * characters), the returned map will contain an entry "TXXX/" - * in its unsupportedData() list. - * - The values will be copies of the fieldList(). - * - If the description() appears as value in fieldList(), it will be omitted - * in the value list, in order to be compatible with TagLib which copies - * the description() into the fieldList(). - */ - PropertyMap asProperties() const; - - /*! - * Searches for the user defined text frame with the description \a description - * in \a tag. This returns null if no matching frames were found. - */ - static UserTextIdentificationFrame *find(Tag *tag, const String &description); - - private: - UserTextIdentificationFrame(const ByteVector &data, Header *h); - UserTextIdentificationFrame(const TextIdentificationFrame &); - UserTextIdentificationFrame &operator=(const UserTextIdentificationFrame &); - - void checkFields(); - - class UserTextIdentificationFramePrivate; - UserTextIdentificationFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/tfile.h b/taglib/include/taglib/tfile.h deleted file mode 100644 index bb8c2b3..0000000 --- a/taglib/include/taglib/tfile.h +++ /dev/null @@ -1,323 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_FILE_H -#define TAGLIB_FILE_H - -#include "taglib_export.h" -#include "taglib.h" -#include "tag.h" -#include "tbytevector.h" -#include "tiostream.h" - -namespace TagLib { - - class String; - class Tag; - class AudioProperties; - class PropertyMap; - - //! A file class with some useful methods for tag manipulation - - /*! - * This class is a basic file class with some methods that are particularly - * useful for tag editors. It has methods to take advantage of - * ByteVector and a binary search method for finding patterns in a file. - */ - - class TAGLIB_EXPORT File - { - public: - /*! - * Position in the file used for seeking. - */ - enum Position { - //! Seek from the beginning of the file. - Beginning, - //! Seek from the current position in the file. - Current, - //! Seek from the end of the file. - End - }; - - /*! - * Specify which tags to strip either explicitly, or on save. - */ - enum StripTags { - StripNone, // - -namespace TagLib { - - //! A generic, implicitly shared list. - - /*! - * This is basic generic list that's somewhere between a std::list and a - * QValueList. This class is implicitly shared. For example: - * - * \code - * - * TagLib::List l = someOtherIntList; - * - * \endcode - * - * The above example is very cheap. This also makes lists suitable for the - * return types of functions. The above example will just copy a pointer rather - * than copying the data in the list. When your \e shared list's data changes, - * only \e then will the data be copied. - */ - - template class List - { - public: -#ifndef DO_NOT_DOCUMENT - typedef typename std::list::iterator Iterator; - typedef typename std::list::const_iterator ConstIterator; -#endif - - /*! - * Constructs an empty list. - */ - List(); - - /*! - * Make a shallow, implicitly shared, copy of \a l. Because this is - * implicitly shared, this method is lightweight and suitable for - * pass-by-value usage. - */ - List(const List &l); - - /*! - * Destroys this List instance. If auto deletion is enabled and this list - * contains a pointer type all of the members are also deleted. - */ - virtual ~List(); - - /*! - * Returns an STL style iterator to the beginning of the list. See - * std::list::const_iterator for the semantics. - */ - Iterator begin(); - - /*! - * Returns an STL style constant iterator to the beginning of the list. See - * std::list::iterator for the semantics. - */ - ConstIterator begin() const; - - /*! - * Returns an STL style iterator to the end of the list. See - * std::list::iterator for the semantics. - */ - Iterator end(); - - /*! - * Returns an STL style constant iterator to the end of the list. See - * std::list::const_iterator for the semantics. - */ - ConstIterator end() const; - - /*! - * Inserts a copy of \a value before \a it. - */ - Iterator insert(Iterator it, const T &value); - - /*! - * Inserts the \a value into the list. This assumes that the list is - * currently sorted. If \a unique is true then the value will not - * be inserted if it is already in the list. - */ - List &sortedInsert(const T &value, bool unique = false); - - /*! - * Appends \a item to the end of the list and returns a reference to the - * list. - */ - List &append(const T &item); - - /*! - * Appends all of the values in \a l to the end of the list and returns a - * reference to the list. - */ - List &append(const List &l); - - /*! - * Prepends \a item to the beginning list and returns a reference to the - * list. - */ - List &prepend(const T &item); - - /*! - * Prepends all of the items in \a l to the beginning list and returns a - * reference to the list. - */ - List &prepend(const List &l); - - /*! - * Clears the list. If auto deletion is enabled and this list contains a - * pointer type the members are also deleted. - * - * \see setAutoDelete() - */ - List &clear(); - - /*! - * Returns the number of elements in the list. - * - * \see isEmpty() - */ - unsigned int size() const; - - /*! - * Returns whether or not the list is empty. - * - * \see size() - */ - bool isEmpty() const; - - /*! - * Find the first occurrence of \a value. - */ - Iterator find(const T &value); - - /*! - * Find the first occurrence of \a value. - */ - ConstIterator find(const T &value) const; - - /*! - * Returns true if the list contains \a value. - */ - bool contains(const T &value) const; - - /*! - * Erase the item at \a it from the list. - */ - Iterator erase(Iterator it); - - /*! - * Returns a reference to the first item in the list. - */ - const T &front() const; - - /*! - * Returns a reference to the first item in the list. - */ - T &front(); - - /*! - * Returns a reference to the last item in the list. - */ - const T &back() const; - - /*! - * Returns a reference to the last item in the list. - */ - T &back(); - - /*! - * Auto delete the members of the list when the last reference to the list - * passes out of scope. This will have no effect on lists which do not - * contain a pointer type. - * - * \note This relies on partial template instantiation -- most modern C++ - * compilers should now support this. - */ - void setAutoDelete(bool autoDelete); - - /*! - * Returns a reference to item \a i in the list. - * - * \warning This method is slow. Use iterators to loop through the list. - */ - T &operator[](unsigned int i); - - /*! - * Returns a const reference to item \a i in the list. - * - * \warning This method is slow. Use iterators to loop through the list. - */ - const T &operator[](unsigned int i) const; - - /*! - * Make a shallow, implicitly shared, copy of \a l. Because this is - * implicitly shared, this method is lightweight and suitable for - * pass-by-value usage. - */ - List &operator=(const List &l); - - /*! - * Exchanges the content of this list by the content of \a l. - */ - void swap(List &l); - - /*! - * Compares this list with \a l and returns true if all of the elements are - * the same. - */ - bool operator==(const List &l) const; - - /*! - * Compares this list with \a l and returns true if the lists differ. - */ - bool operator!=(const List &l) const; - - protected: - /* - * If this List is being shared via implicit sharing, do a deep copy of the - * data and separate from the shared members. This should be called by all - * non-const subclass members. - */ - void detach(); - - private: -#ifndef DO_NOT_DOCUMENT - template class ListPrivate; - ListPrivate *d; -#endif - }; - -} // namespace TagLib - -// Since GCC doesn't support the "export" keyword, we have to include the -// implementation. - -#include "tlist.tcc" - -#endif diff --git a/taglib/include/taglib/tlist.tcc b/taglib/include/taglib/tlist.tcc deleted file mode 100644 index 478f098..0000000 --- a/taglib/include/taglib/tlist.tcc +++ /dev/null @@ -1,323 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#include -#include "trefcounter.h" - -namespace TagLib { - -//////////////////////////////////////////////////////////////////////////////// -// public members -//////////////////////////////////////////////////////////////////////////////// - -// The functionality of List::setAutoDelete() is implemented here partial -// template specialization. This is implemented in such a way that calling -// setAutoDelete() on non-pointer types will simply have no effect. - -// A base for the generic and specialized private class types. New -// non-templatized members should be added here. - -// BIC change to RefCounter -class ListPrivateBase : public RefCounterOld -{ -public: - ListPrivateBase() : autoDelete(false) {} - bool autoDelete; -}; - -// A generic implementation - -template -template class List::ListPrivate : public ListPrivateBase -{ -public: - ListPrivate() : ListPrivateBase() {} - ListPrivate(const std::list &l) : ListPrivateBase(), list(l) {} - void clear() { - list.clear(); - } - std::list list; -}; - -// A partial specialization for all pointer types that implements the -// setAutoDelete() functionality. - -template -template class List::ListPrivate : public ListPrivateBase -{ -public: - ListPrivate() : ListPrivateBase() {} - ListPrivate(const std::list &l) : ListPrivateBase(), list(l) {} - ~ListPrivate() { - clear(); - } - void clear() { - if(autoDelete) { - typename std::list::const_iterator it = list.begin(); - for(; it != list.end(); ++it) - delete *it; - } - list.clear(); - } - std::list list; -}; - -//////////////////////////////////////////////////////////////////////////////// -// public members -//////////////////////////////////////////////////////////////////////////////// - -template -List::List() : - d(new ListPrivate()) -{ -} - -template -List::List(const List &l) : d(l.d) -{ - d->ref(); -} - -template -List::~List() -{ - if(d->deref()) - delete d; -} - -template -typename List::Iterator List::begin() -{ - detach(); - return d->list.begin(); -} - -template -typename List::ConstIterator List::begin() const -{ - return d->list.begin(); -} - -template -typename List::Iterator List::end() -{ - detach(); - return d->list.end(); -} - -template -typename List::ConstIterator List::end() const -{ - return d->list.end(); -} - -template -typename List::Iterator List::insert(Iterator it, const T &item) -{ - detach(); - return d->list.insert(it, item); -} - -template -List &List::sortedInsert(const T &value, bool unique) -{ - detach(); - Iterator it = begin(); - while(it != end() && *it < value) - ++it; - if(unique && it != end() && *it == value) - return *this; - insert(it, value); - return *this; -} - -template -List &List::append(const T &item) -{ - detach(); - d->list.push_back(item); - return *this; -} - -template -List &List::append(const List &l) -{ - detach(); - d->list.insert(d->list.end(), l.begin(), l.end()); - return *this; -} - -template -List &List::prepend(const T &item) -{ - detach(); - d->list.push_front(item); - return *this; -} - -template -List &List::prepend(const List &l) -{ - detach(); - d->list.insert(d->list.begin(), l.begin(), l.end()); - return *this; -} - -template -List &List::clear() -{ - detach(); - d->clear(); - return *this; -} - -template -unsigned int List::size() const -{ - return static_cast(d->list.size()); -} - -template -bool List::isEmpty() const -{ - return d->list.empty(); -} - -template -typename List::Iterator List::find(const T &value) -{ - detach(); - return std::find(d->list.begin(), d->list.end(), value); -} - -template -typename List::ConstIterator List::find(const T &value) const -{ - return std::find(d->list.begin(), d->list.end(), value); -} - -template -bool List::contains(const T &value) const -{ - return std::find(d->list.begin(), d->list.end(), value) != d->list.end(); -} - -template -typename List::Iterator List::erase(Iterator it) -{ - return d->list.erase(it); -} - -template -const T &List::front() const -{ - return d->list.front(); -} - -template -T &List::front() -{ - detach(); - return d->list.front(); -} - -template -const T &List::back() const -{ - return d->list.back(); -} - -template -void List::setAutoDelete(bool autoDelete) -{ - d->autoDelete = autoDelete; -} - -template -T &List::back() -{ - detach(); - return d->list.back(); -} - -template -T &List::operator[](unsigned int i) -{ - Iterator it = d->list.begin(); - std::advance(it, i); - - return *it; -} - -template -const T &List::operator[](unsigned int i) const -{ - ConstIterator it = d->list.begin(); - std::advance(it, i); - - return *it; -} - -template -List &List::operator=(const List &l) -{ - List(l).swap(*this); - return *this; -} - -template -void List::swap(List &l) -{ - using std::swap; - - swap(d, l.d); -} - -template -bool List::operator==(const List &l) const -{ - return d->list == l.d->list; -} - -template -bool List::operator!=(const List &l) const -{ - return d->list != l.d->list; -} - -//////////////////////////////////////////////////////////////////////////////// -// protected members -//////////////////////////////////////////////////////////////////////////////// - -template -void List::detach() -{ - if(d->count() > 1) { - d->deref(); - d = new ListPrivate(d->list); - } -} - -} // namespace TagLib diff --git a/taglib/include/taglib/tmap.h b/taglib/include/taglib/tmap.h deleted file mode 100644 index 520a267..0000000 --- a/taglib/include/taglib/tmap.h +++ /dev/null @@ -1,212 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_MAP_H -#define TAGLIB_MAP_H - -#include - -#include "taglib.h" - -namespace TagLib { - - //! A generic, implicitly shared map. - - /*! - * This implements a standard map container that associates a key with a value - * and has fast key-based lookups. This map is also implicitly shared making - * it suitable for pass-by-value usage. - */ - - template class Map - { - public: -#ifndef DO_NOT_DOCUMENT -#ifdef WANT_CLASS_INSTANTIATION_OF_MAP - // Some STL implementations get snippy over the use of the - // class keyword to distinguish different templates; Sun Studio - // in particular finds multiple specializations in certain rare - // cases and complains about that. GCC doesn't seem to mind, - // and uses the typedefs further below without the class keyword. - // Not all the specializations of Map can use the class keyword - // (when T is not actually a class type), so don't apply this - // generally. - typedef typename std::map::iterator Iterator; - typedef typename std::map::const_iterator ConstIterator; -#else - typedef typename std::map::iterator Iterator; - typedef typename std::map::const_iterator ConstIterator; -#endif -#endif - - /*! - * Constructs an empty Map. - */ - Map(); - - /*! - * Make a shallow, implicitly shared, copy of \a m. Because this is - * implicitly shared, this method is lightweight and suitable for - * pass-by-value usage. - */ - Map(const Map &m); - - /*! - * Destroys this instance of the Map. - */ - virtual ~Map(); - - /*! - * Returns an STL style iterator to the beginning of the map. See - * std::map::iterator for the semantics. - */ - Iterator begin(); - - /*! - * Returns an STL style iterator to the beginning of the map. See - * std::map::const_iterator for the semantics. - */ - ConstIterator begin() const; - - /*! - * Returns an STL style iterator to the end of the map. See - * std::map::iterator for the semantics. - */ - Iterator end(); - - /*! - * Returns an STL style iterator to the end of the map. See - * std::map::const_iterator for the semantics. - */ - ConstIterator end() const; - - /*! - * Inserts \a value under \a key in the map. If a value for \a key already - * exists it will be overwritten. - */ - Map &insert(const Key &key, const T &value); - - /*! - * Removes all of the elements from elements from the map. This however - * will not delete pointers if the mapped type is a pointer type. - */ - Map &clear(); - - /*! - * The number of elements in the map. - * - * \see isEmpty() - */ - unsigned int size() const; - - /*! - * Returns true if the map is empty. - * - * \see size() - */ - bool isEmpty() const; - - /*! - * Find the first occurrence of \a key. - */ - Iterator find(const Key &key); - - /*! - * Find the first occurrence of \a key. - */ - ConstIterator find(const Key &key) const; - - /*! - * Returns true if the map contains an instance of \a key. - */ - bool contains(const Key &key) const; - - /*! - * Erase the item at \a it from the list. - */ - Map &erase(Iterator it); - - /*! - * Erase the item with \a key from the list. - */ - Map &erase(const Key &key); - - /*! - * Returns the value associated with \a key. - * - * If the map does not contain \a key, it returns defaultValue. - * If no defaultValue is specified, it returns a default-constructed value. - */ - T value(const Key &key, const T &defaultValue = T()) const; - - /*! - * Returns a reference to the value associated with \a key. - * - * \note This has undefined behavior if the key is not present in the map. - */ - const T &operator[](const Key &key) const; - - /*! - * Returns a reference to the value associated with \a key. - * - * \note This has undefined behavior if the key is not present in the map. - */ - T &operator[](const Key &key); - - /*! - * Make a shallow, implicitly shared, copy of \a m. Because this is - * implicitly shared, this method is lightweight and suitable for - * pass-by-value usage. - */ - Map &operator=(const Map &m); - - /*! - * Exchanges the content of this map by the content of \a m. - */ - void swap(Map &m); - - protected: - /* - * If this List is being shared via implicit sharing, do a deep copy of the - * data and separate from the shared members. This should be called by all - * non-const subclass members. - */ - void detach(); - - private: -#ifndef DO_NOT_DOCUMENT - template class MapPrivate; - MapPrivate *d; -#endif - }; - -} // namespace TagLib - -// Since GCC doesn't support the "export" keyword, we have to include the -// implementation. - -#include "tmap.tcc" - -#endif diff --git a/taglib/include/taglib/tmap.tcc b/taglib/include/taglib/tmap.tcc deleted file mode 100644 index 7964913..0000000 --- a/taglib/include/taglib/tmap.tcc +++ /dev/null @@ -1,206 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#include "trefcounter.h" - -namespace TagLib { - -//////////////////////////////////////////////////////////////////////////////// -// public members -//////////////////////////////////////////////////////////////////////////////// - -// BIC change to RefCounter -template -template -class Map::MapPrivate : public RefCounterOld -{ -public: - MapPrivate() : RefCounterOld() {} -#ifdef WANT_CLASS_INSTANTIATION_OF_MAP - MapPrivate(const std::map& m) : RefCounterOld(), map(m) {} - std::map map; -#else - MapPrivate(const std::map& m) : RefCounterOld(), map(m) {} - std::map map; -#endif -}; - -template -Map::Map() : - d(new MapPrivate()) -{ -} - -template -Map::Map(const Map &m) : d(m.d) -{ - d->ref(); -} - -template -Map::~Map() -{ - if(d->deref()) - delete(d); -} - -template -typename Map::Iterator Map::begin() -{ - detach(); - return d->map.begin(); -} - -template -typename Map::ConstIterator Map::begin() const -{ - return d->map.begin(); -} - -template -typename Map::Iterator Map::end() -{ - detach(); - return d->map.end(); -} - -template -typename Map::ConstIterator Map::end() const -{ - return d->map.end(); -} - -template -Map &Map::insert(const Key &key, const T &value) -{ - detach(); - d->map[key] = value; - return *this; -} - -template -Map &Map::clear() -{ - detach(); - d->map.clear(); - return *this; -} - -template -bool Map::isEmpty() const -{ - return d->map.empty(); -} - -template -typename Map::Iterator Map::find(const Key &key) -{ - detach(); - return d->map.find(key); -} - -template -typename Map::ConstIterator Map::find(const Key &key) const -{ - return d->map.find(key); -} - -template -bool Map::contains(const Key &key) const -{ - return d->map.find(key) != d->map.end(); -} - -template -Map &Map::erase(Iterator it) -{ - detach(); - d->map.erase(it); - return *this; -} - -template -Map &Map::erase(const Key &key) -{ - detach(); - d->map.erase(key); - return *this; -} - -template -unsigned int Map::size() const -{ - return static_cast(d->map.size()); -} - -template -T Map::value(const Key &key, const T &defaultValue) const -{ - ConstIterator it = d->map.find(key); - return it != d->map.end() ? it->second : defaultValue; -} - -template -const T &Map::operator[](const Key &key) const -{ - return d->map[key]; -} - -template -T &Map::operator[](const Key &key) -{ - detach(); - return d->map[key]; -} - -template -Map &Map::operator=(const Map &m) -{ - Map(m).swap(*this); - return *this; -} - -template -void Map::swap(Map &m) -{ - using std::swap; - - swap(d, m.d); -} - -//////////////////////////////////////////////////////////////////////////////// -// protected members -//////////////////////////////////////////////////////////////////////////////// - -template -void Map::detach() -{ - if(d->count() > 1) { - d->deref(); - d = new MapPrivate(d->map); - } -} - -} // namespace TagLib diff --git a/taglib/include/taglib/tpropertymap.h b/taglib/include/taglib/tpropertymap.h deleted file mode 100644 index 9231642..0000000 --- a/taglib/include/taglib/tpropertymap.h +++ /dev/null @@ -1,256 +0,0 @@ -/*************************************************************************** - copyright : (C) 2012 by Michael Helmling - email : helmling@mathematik.uni-kl.de - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_PROPERTYMAP_H_ -#define TAGLIB_PROPERTYMAP_H_ - -#include "tmap.h" -#include "tstringlist.h" - -#ifdef _MSC_VER -// Explained at end of tpropertymap.cpp -extern template class TAGLIB_EXPORT TagLib::Map; -#endif - -namespace TagLib { - - typedef Map SimplePropertyMap; - - //! A map for format-independent tag representations. - - /*! - * This map implements a generic representation of textual audio metadata - * ("tags") realized as pairs of a case-insensitive key - * and a nonempty list of corresponding values, each value being an arbitrary - * unicode String. - * - * Note that most metadata formats pose additional conditions on the tag keys. The - * most popular ones (Vorbis, APE, ID3v2) should support all ASCII only words of - * length between 2 and 16. - * - * This class can contain any tags, but here is a list of "well-known" tags that - * you might want to use: - * - * Basic tags: - * - * - TITLE - * - ALBUM - * - ARTIST - * - ALBUMARTIST - * - SUBTITLE - * - TRACKNUMBER - * - DISCNUMBER - * - DATE - * - ORIGINALDATE - * - GENRE - * - COMMENT - * - * Sort names: - * - * - TITLESORT - * - ALBUMSORT - * - ARTISTSORT - * - ALBUMARTISTSORT - * - COMPOSERSORT - * - * Credits: - * - * - COMPOSER - * - LYRICIST - * - CONDUCTOR - * - REMIXER - * - PERFORMER:\ - * - * Other tags: - * - * - ISRC - * - ASIN - * - BPM - * - COPYRIGHT - * - ENCODEDBY - * - MOOD - * - COMMENT - * - MEDIA - * - LABEL - * - CATALOGNUMBER - * - BARCODE - * - RELEASECOUNTRY - * - RELEASESTATUS - * - RELEASETYPE - * - * MusicBrainz identifiers: - * - * - MUSICBRAINZ_TRACKID - * - MUSICBRAINZ_ALBUMID - * - MUSICBRAINZ_RELEASEGROUPID - * - MUSICBRAINZ_RELEASETRACKID - * - MUSICBRAINZ_WORKID - * - MUSICBRAINZ_ARTISTID - * - MUSICBRAINZ_ALBUMARTISTID - * - ACOUSTID_ID - * - ACOUSTID_FINGERPRINT - * - MUSICIP_PUID - * - */ - - class TAGLIB_EXPORT PropertyMap: public SimplePropertyMap - { - public: - - typedef SimplePropertyMap::Iterator Iterator; - typedef SimplePropertyMap::ConstIterator ConstIterator; - - PropertyMap(); - - PropertyMap(const PropertyMap &m); - - /*! - * Creates a PropertyMap initialized from a SimplePropertyMap. Copies all - * entries from \a m that have valid keys. - * Invalid keys will be appended to the unsupportedData() list. - */ - PropertyMap(const SimplePropertyMap &m); - - virtual ~PropertyMap(); - - /*! - * Inserts \a values under \a key in the map. If \a key already exists, - * then \a values will be appended to the existing StringList. - * The returned value indicates success, i.e. whether \a key is a - * valid key. - */ - bool insert(const String &key, const StringList &values); - - /*! - * Replaces any existing values for \a key with the given \a values, - * and simply insert them if \a key did not exist before. - * The returned value indicates success, i.e. whether \a key is a - * valid key. - */ - bool replace(const String &key, const StringList &values); - - /*! - * Find the first occurrence of \a key. - */ - Iterator find(const String &key); - - /*! - * Find the first occurrence of \a key. - */ - ConstIterator find(const String &key) const; - - /*! - * Returns true if the map contains values for \a key. - */ - bool contains(const String &key) const; - - /*! - * Returns true if this map contains all keys of \a other - * and the values coincide for that keys. Does not take - * the unsupportedData list into account. - */ - bool contains(const PropertyMap &other) const; - - /*! - * Erase the \a key and its values from the map. - */ - PropertyMap &erase(const String &key); - - /*! - * Erases from this map all keys that appear in \a other. - */ - PropertyMap &erase(const PropertyMap &other); - - /*! - * Merge the contents of \a other into this PropertyMap. - * If a key is contained in both maps, the values of the second - * are appended to that of the first. - * The unsupportedData() lists are concatenated as well. - */ - PropertyMap &merge(const PropertyMap &other); - - /*! - * Returns the value associated with \a key. - * - * If the map does not contain \a key, it returns defaultValue. - * If no defaultValue is specified, it returns an empty string list. - */ - StringList value(const String &key, - const StringList &defaultValue = StringList()) const; - - /*! - * Returns a reference to the value associated with \a key. - * - * \note: If \a key is not contained in the map, an empty - * StringList is returned without error. - */ - const StringList &operator[](const String &key) const; - - /*! - * Returns a reference to the value associated with \a key. - * - * \note: If \a key is not contained in the map, an empty - * StringList is returned. You can also directly add entries - * by using this function as an lvalue. - */ - StringList &operator[](const String &key); - - /*! - * Returns true if and only if \a other has the same contents as this map. - */ - bool operator==(const PropertyMap &other) const; - - /*! - * Returns false if and only \a other has the same contents as this map. - */ - bool operator!=(const PropertyMap &other) const; - - /*! - * If a PropertyMap is read from a File object using File::properties(), - * the StringList returned from this function will represent metadata - * that could not be parsed into the PropertyMap representation. This could - * be e.g. binary data, unknown ID3 frames, etc. - * You can remove items from the returned list, which tells TagLib to remove - * those unsupported elements if you call File::setProperties() with the - * same PropertyMap as argument. - */ - StringList &unsupportedData(); - const StringList &unsupportedData() const; - - /*! - * Removes all entries which have an empty value list. - */ - void removeEmpty(); - - String toString() const; - - private: - - - StringList unsupported; - }; - -} // namespace TagLib -#endif /* TAGLIB_PROPERTYMAP_H_ */ diff --git a/taglib/include/taglib/trefcounter.h b/taglib/include/taglib/trefcounter.h deleted file mode 100644 index b3ce883..0000000 --- a/taglib/include/taglib/trefcounter.h +++ /dev/null @@ -1,114 +0,0 @@ -/*************************************************************************** - copyright : (C) 2013 by Tsuda Kageyu - email : tsuda.kageyu@gmail.com - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_REFCOUNTER_H -#define TAGLIB_REFCOUNTER_H - -#include "taglib_export.h" -#include "taglib.h" - -#ifdef __APPLE__ -# define OSATOMIC_DEPRECATED 0 -# include -# define TAGLIB_ATOMIC_MAC -#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# ifndef NOMINMAX -# define NOMINMAX -# endif -# include -# define TAGLIB_ATOMIC_WIN -#elif defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 401) \ - && (defined(__i386__) || defined(__i486__) || defined(__i586__) || \ - defined(__i686__) || defined(__x86_64) || defined(__ia64)) \ - && !defined(__INTEL_COMPILER) -# define TAGLIB_ATOMIC_GCC -#elif defined(__ia64) && defined(__INTEL_COMPILER) -# include -# define TAGLIB_ATOMIC_GCC -#endif - -#ifndef DO_NOT_DOCUMENT // Tell Doxygen to skip this class. -/*! - * \internal - * This is just used as a base class for shared classes in TagLib. - * - * \warning This is not part of the TagLib public API! - */ -namespace TagLib -{ - - class TAGLIB_EXPORT RefCounter - { - public: - RefCounter(); - virtual ~RefCounter(); - - void ref(); - bool deref(); - int count() const; - - private: - class RefCounterPrivate; - RefCounterPrivate *d; - }; - - // BIC this old class is needed by tlist.tcc and tmap.tcc - class RefCounterOld - { - public: - RefCounterOld() : refCount(1) {} - -#ifdef TAGLIB_ATOMIC_MAC - void ref() { OSAtomicIncrement32Barrier(const_cast(&refCount)); } - bool deref() { return ! OSAtomicDecrement32Barrier(const_cast(&refCount)); } - int32_t count() { return refCount; } - private: - volatile int32_t refCount; -#elif defined(TAGLIB_ATOMIC_WIN) - void ref() { InterlockedIncrement(&refCount); } - bool deref() { return ! InterlockedDecrement(&refCount); } - long count() { return refCount; } - private: - volatile long refCount; -#elif defined(TAGLIB_ATOMIC_GCC) - void ref() { __sync_add_and_fetch(&refCount, 1); } - bool deref() { return ! __sync_sub_and_fetch(&refCount, 1); } - int count() { return refCount; } - private: - volatile int refCount; -#else - void ref() { refCount++; } - bool deref() { return ! --refCount; } - int count() { return refCount; } - private: - unsigned int refCount; -#endif - }; - -} // namespace TagLib - -#endif // DO_NOT_DOCUMENT -#endif - diff --git a/taglib/include/taglib/trueaudiofile.h b/taglib/include/taglib/trueaudiofile.h deleted file mode 100644 index 1019bfc..0000000 --- a/taglib/include/taglib/trueaudiofile.h +++ /dev/null @@ -1,259 +0,0 @@ -/*************************************************************************** - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - (original MPC implementation) - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_TRUEAUDIOFILE_H -#define TAGLIB_TRUEAUDIOFILE_H - -#include "tfile.h" -#include "trueaudioproperties.h" - -namespace TagLib { - - class Tag; - - namespace ID3v2 { class Tag; class FrameFactory; } - namespace ID3v1 { class Tag; } - - //! An implementation of TrueAudio metadata - - /*! - * This is implementation of TrueAudio metadata. - * - * This supports ID3v1 and ID3v2 tags as well as reading stream - * properties from the file. - */ - - namespace TrueAudio { - - //! An implementation of TagLib::File with TrueAudio specific methods - - /*! - * This implements and provides an interface for TrueAudio files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to TrueAudio files. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * This set of flags is used for various operations and is suitable for - * being OR-ed together. - */ - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches ID3v1 tags. - ID3v1 = 0x0001, - //! Matches ID3v2 tags. - ID3v2 = 0x0002, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs a TrueAudio file from \a file. If \a readProperties is true - * the file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs a TrueAudio file from \a file. If \a readProperties is true - * the file's audio properties will also be read. - * - * If this file contains and ID3v2 tag the frames will be created using - * \a frameFactory. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, ID3v2::FrameFactory *frameFactory, - bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs a TrueAudio file from \a stream. If \a readProperties is true - * the file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs a TrueAudio file from \a stream. If \a readProperties is true - * the file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * If this file contains and ID3v2 tag the frames will be created using - * \a frameFactory. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, ID3v2::FrameFactory *frameFactory, - bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the Tag for this file. - */ - virtual TagLib::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * If the file contains both ID3v1 and v2 tags, only ID3v2 will be - * converted to the PropertyMap. - */ - PropertyMap properties() const; - - /*! - * Implements the unified property interface -- import function. - * Creates in ID3v2 tag if necessary. If an ID3v1 tag exists, it will - * be updated as well, within the limitations of ID3v1. - */ - PropertyMap setProperties(const PropertyMap &); - - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Returns the TrueAudio::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Set the ID3v2::FrameFactory to something other than the default. - * - * \see ID3v2FrameFactory - * \deprecated This value should be passed in via the constructor. - */ - TAGLIB_DEPRECATED void setID3v2FrameFactory(const ID3v2::FrameFactory *factory); - - /*! - * Saves the file. - */ - virtual bool save(); - - /*! - * Returns a pointer to the ID3v1 tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid ID3v1 tag. If \a create is true it will create - * an ID3v1 tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v1 tag. Use hasID3v1Tag() to check if the file - * on disk actually has an ID3v1 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v1Tag() - */ - ID3v1::Tag *ID3v1Tag(bool create = false); - - /*! - * Returns a pointer to the ID3v2 tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid ID3v2 tag. If \a create is true it will create - * an ID3v2 tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v2 tag. Use hasID3v2Tag() to check if the file - * on disk actually has an ID3v2 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v2Tag() - */ - ID3v2::Tag *ID3v2Tag(bool create = false); - - /*! - * This will remove the tags that match the OR-ed together TagTypes from the - * file. By default it removes all tags. - * - * \note This will also invalidate pointers to the tags - * as their memory will be freed. - * \note In order to make the removal permanent save() still needs to be called - */ - void strip(int tags = AllTags); - - /*! - * Returns whether or not the file on disk actually has an ID3v1 tag. - * - * \see ID3v1Tag() - */ - bool hasID3v1Tag() const; - - /*! - * Returns whether or not the file on disk actually has an ID3v2 tag. - * - * \see ID3v2Tag() - */ - bool hasID3v2Tag() const; - - /*! - * Returns whether or not the given \a stream can be opened as a TrueAudio - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace TrueAudio -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/trueaudioproperties.h b/taglib/include/taglib/trueaudioproperties.h deleted file mode 100644 index 490fea8..0000000 --- a/taglib/include/taglib/trueaudioproperties.h +++ /dev/null @@ -1,131 +0,0 @@ -/*************************************************************************** - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - (original MPC implementation) - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_TRUEAUDIOPROPERTIES_H -#define TAGLIB_TRUEAUDIOPROPERTIES_H - -#include "audioproperties.h" - -namespace TagLib { - - namespace TrueAudio { - - static const unsigned int HeaderSize = 18; - - //! An implementation of audio property reading for TrueAudio - - /*! - * This reads the data from an TrueAudio stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of TrueAudio::Properties with the data read from the - * ByteVector \a data. - */ - Properties(const ByteVector &data, long streamLength, ReadStyle style = Average); - - /*! - * Destroys this TrueAudio::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample. - */ - int bitsPerSample() const; - - /*! - * Returns the total number of sample frames - */ - unsigned int sampleFrames() const; - - /*! - * Returns the major version number. - */ - int ttaVersion() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(const ByteVector &data, long streamLength); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace TrueAudio -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/tstring.h b/taglib/include/taglib/tstring.h deleted file mode 100644 index e3853d8..0000000 --- a/taglib/include/taglib/tstring.h +++ /dev/null @@ -1,580 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_STRING_H -#define TAGLIB_STRING_H - -#include "taglib_export.h" -#include "taglib.h" -#include "tbytevector.h" - -#include -#include - -/*! - * \relates TagLib::String - * - * Converts a QString to a TagLib::String without a requirement to link to Qt. - * - * \note consider conversion via usual char-by-char for loop to avoid UTF16->UTF8->UTF16 - * conversion happening in the background - */ - -#if defined(QT_VERSION) && (QT_VERSION >= 0x040000) -#define QStringToTString(s) TagLib::String(s.toUtf8().data(), TagLib::String::UTF8) -#else -#define QStringToTString(s) TagLib::String((s).utf8().data(), TagLib::String::UTF8) -#endif - -/*! - * \relates TagLib::String - * - * Converts a TagLib::String to a QString without a requirement to link to Qt. - * - * \note consider conversion via usual char-by-char for loop to avoid UTF16->UTF8->UTF16 - * conversion happening in the background - * - */ - -#define TStringToQString(s) QString::fromUtf8((s).toCString(true)) - -namespace TagLib { - - class StringList; - - //! A \e wide string class suitable for unicode. - - /*! - * This is an implicitly shared \e wide string. For storage it uses - * TagLib::wstring, but as this is an implementation detail this of - * course could change. Strings are stored internally as UTF-16(without BOM/ - * CPU byte order) - * - * The use of implicit sharing means that copying a string is cheap, the only - * \e cost comes into play when the copy is modified. Prior to that the string - * just has a pointer to the data of the \e parent String. This also makes - * this class suitable as a function return type. - * - * In addition to adding implicit sharing, this class keeps track of four - * possible encodings, which are the four supported by the ID3v2 standard. - */ - - class TAGLIB_EXPORT String - { - public: - -#ifndef DO_NOT_DOCUMENT - typedef TagLib::wstring::iterator Iterator; - typedef TagLib::wstring::const_iterator ConstIterator; -#endif - - /** - * The four types of string encodings supported by the ID3v2 specification. - * ID3v1 is assumed to be Latin1 and Ogg Vorbis comments use UTF8. - */ - enum Type { - /*! - * IS08859-1, or Latin1 encoding. 8 bit characters. - */ - Latin1 = 0, - /*! - * UTF16 with a byte order mark. 16 bit characters. - */ - UTF16 = 1, - /*! - * UTF16 big endian. 16 bit characters. This is the encoding used - * internally by TagLib. - */ - UTF16BE = 2, - /*! - * UTF8 encoding. Characters are usually 8 bits but can be up to 32. - */ - UTF8 = 3, - /*! - * UTF16 little endian. 16 bit characters. - */ - UTF16LE = 4 - }; - - /*! - * Constructs an empty String. - */ - String(); - - /*! - * Make a shallow, implicitly shared, copy of \a s. Because this is - * implicitly shared, this method is lightweight and suitable for - * pass-by-value usage. - */ - String(const String &s); - - /*! - * Makes a deep copy of the data in \a s. - * - * \note This should only be used with the 8-bit codecs Latin1 and UTF8, when - * used with other codecs it will simply print a warning and exit. - */ - String(const std::string &s, Type t = Latin1); - - /*! - * Makes a deep copy of the data in \a s. - * - * /note If \a t is UTF16LE, the byte order of \a s will be swapped regardless - * of the CPU byte order. If UTF16BE, it will not be swapped. This behavior - * will be changed in TagLib2.0. - */ - String(const wstring &s, Type t = UTF16BE); - - /*! - * Makes a deep copy of the data in \a s. - * - * /note If \a t is UTF16LE, the byte order of \a s will be swapped regardless - * of the CPU byte order. If UTF16BE, it will not be swapped. This behavior - * will be changed in TagLib2.0. - */ - String(const wchar_t *s, Type t = UTF16BE); - - /*! - * Makes a deep copy of the data in \a c. - * - * \note This should only be used with the 8-bit codecs Latin1 and UTF8, when - * used with other codecs it will simply print a warning and exit. - */ - String(char c, Type t = Latin1); - - /*! - * Makes a deep copy of the data in \a c. - */ - String(wchar_t c, Type t = Latin1); - - /*! - * Makes a deep copy of the data in \a s. - * - * \note This should only be used with the 8-bit codecs Latin1 and UTF8, when - * used with other codecs it will simply print a warning and exit. - */ - String(const char *s, Type t = Latin1); - - /*! - * Makes a deep copy of the data in \a v. - */ - String(const ByteVector &v, Type t = Latin1); - - /*! - * Destroys this String instance. - */ - virtual ~String(); - - /*! - * Returns a deep copy of this String as an std::string. The returned string - * is encoded in UTF8 if \a unicode is true, otherwise Latin1. - * - * \see toCString() - */ - std::string to8Bit(bool unicode = false) const; - - /*! - * Returns a deep copy of this String as a wstring. The returned string is - * encoded in UTF-16 (without BOM/CPU byte order), not UTF-32 even if wchar_t - * is 32-bit wide. - * - * \see toCWString() - */ - wstring toWString() const; - - /*! - * Creates and returns a standard C-style (null-terminated) version of this - * String. The returned string is encoded in UTF8 if \a unicode is true, - * otherwise Latin1. - * - * The returned string is still owned by this String and should not be deleted - * by the user. - * - * The returned pointer remains valid until this String instance is destroyed - * or toCString() is called again. - * - * \warning This however has the side effect that the returned string will remain - * in memory in addition to other memory that is consumed by this - * String instance. So, this method should not be used on large strings or - * where memory is critical. Consider using to8Bit() instead to avoid it. - * - * \see to8Bit() - */ - const char *toCString(bool unicode = false) const; - - /*! - * Returns a standard C-style (null-terminated) wide character version of - * this String. The returned string is encoded in UTF-16 (without BOM/CPU byte - * order), not UTF-32 even if wchar_t is 32-bit wide. - * - * The returned string is still owned by this String and should not be deleted - * by the user. - * - * The returned pointer remains valid until this String instance is destroyed - * or any other method of this String is called. - * - * \note This returns a pointer to the String's internal data without any - * conversions. - * - * \see toWString() - */ - const wchar_t *toCWString() const; - - /*! - * Returns an iterator pointing to the beginning of the string. - */ - Iterator begin(); - - /*! - * Returns a const iterator pointing to the beginning of the string. - */ - ConstIterator begin() const; - - /*! - * Returns an iterator pointing to the end of the string (the position - * after the last character). - */ - Iterator end(); - - /*! - * Returns a const iterator pointing to the end of the string (the position - * after the last character). - */ - ConstIterator end() const; - - /*! - * Finds the first occurrence of pattern \a s in this string starting from - * \a offset. If the pattern is not found, -1 is returned. - */ - int find(const String &s, int offset = 0) const; - - /*! - * Finds the last occurrence of pattern \a s in this string, searched backwards, - * either from the end of the string or starting from \a offset. If the pattern - * is not found, -1 is returned. - */ - int rfind(const String &s, int offset = -1) const; - - /*! - * Splits the string on each occurrence of \a separator. - */ - StringList split(const String &separator = " ") const; - - /*! - * Returns true if the strings starts with the substring \a s. - */ - bool startsWith(const String &s) const; - - /*! - * Extract a substring from this string starting at \a position and - * continuing for \a n characters. - */ - String substr(unsigned int position, unsigned int n = 0xffffffff) const; - - /*! - * Append \a s to the current string and return a reference to the current - * string. - */ - String &append(const String &s); - - /*! - * Clears the string. - */ - String &clear(); - - /*! - * Returns an upper case version of the string. - * - * \warning This only works for the characters in US-ASCII, i.e. A-Z. - */ - String upper() const; - - /*! - * Returns the size of the string. - */ - unsigned int size() const; - - /*! - * Returns the length of the string. Equivalent to size(). - */ - unsigned int length() const; - - /*! - * Returns true if the string is empty. - * - * \see isNull() - */ - bool isEmpty() const; - - /*! - * Returns true if this string is null -- i.e. it is a copy of the - * String::null string. - * - * \note A string can be empty and not null. So do not use this method to - * check if the string is empty. - * - * \see isEmpty() - * - * \deprecated Use isEmpty(), do not differentiate between null and empty. - */ - // BIC: remove - TAGLIB_DEPRECATED bool isNull() const; - - /*! - * Returns a ByteVector containing the string's data. If \a t is Latin1 or - * UTF8, this will return a vector of 8 bit characters, otherwise it will use - * 16 bit characters. - * - * \note If \a t is UTF16, the returned data is encoded in little-endian - * format and has a BOM. - * - * \note The returned data is not null terminated. - */ - ByteVector data(Type t) const; - - /*! - * Convert the string to an integer. - * - * Returns the integer if the conversion was successful or 0 if the - * string does not represent a number. - */ - // BIC: merge with the method below - int toInt() const; - - /*! - * Convert the string to an integer. - * - * If the conversion was successful, it sets the value of \a *ok to - * true and returns the integer. Otherwise it sets \a *ok to false - * and the result is undefined. - */ - int toInt(bool *ok) const; - - /*! - * Returns a string with the leading and trailing whitespace stripped. - */ - String stripWhiteSpace() const; - - /*! - * Returns true if the file only uses characters required by Latin1. - */ - bool isLatin1() const; - - /*! - * Returns true if the file only uses characters required by (7-bit) ASCII. - */ - bool isAscii() const; - - /*! - * Converts the base-10 integer \a n to a string. - */ - static String number(int n); - - /*! - * Returns a reference to the character at position \a i. - */ - wchar_t &operator[](int i); - - /*! - * Returns a const reference to the character at position \a i. - */ - const wchar_t &operator[](int i) const; - - /*! - * Compares each character of the String with each character of \a s and - * returns true if the strings match. - */ - bool operator==(const String &s) const; - - /*! - * Compares each character of the String with each character of \a s and - * returns false if the strings match. - */ - bool operator!=(const String &s) const; - - /*! - * Compares each character of the String with each character of \a s and - * returns true if the strings match. - */ - bool operator==(const char *s) const; - - /*! - * Compares each character of the String with each character of \a s and - * returns false if the strings match. - */ - bool operator!=(const char *s) const; - - /*! - * Compares each character of the String with each character of \a s and - * returns true if the strings match. - */ - bool operator==(const wchar_t *s) const; - - /*! - * Compares each character of the String with each character of \a s and - * returns false if the strings match. - */ - bool operator!=(const wchar_t *s) const; - - /*! - * Appends \a s to the end of the String. - */ - String &operator+=(const String &s); - - /*! - * Appends \a s to the end of the String. - */ - String &operator+=(const wchar_t* s); - - /*! - * Appends \a s to the end of the String. - */ - String &operator+=(const char* s); - - /*! - * Appends \a s to the end of the String. - */ - String &operator+=(wchar_t c); - - /*! - * Appends \a c to the end of the String. - */ - String &operator+=(char c); - - /*! - * Performs a shallow, implicitly shared, copy of \a s, overwriting the - * String's current data. - */ - String &operator=(const String &s); - - /*! - * Performs a deep copy of the data in \a s. - */ - String &operator=(const std::string &s); - - /*! - * Performs a deep copy of the data in \a s. - */ - String &operator=(const wstring &s); - - /*! - * Performs a deep copy of the data in \a s. - */ - String &operator=(const wchar_t *s); - - /*! - * Performs a deep copy of the data in \a s. - */ - String &operator=(char c); - - /*! - * Performs a deep copy of the data in \a s. - */ - String &operator=(wchar_t c); - - /*! - * Performs a deep copy of the data in \a s. - */ - String &operator=(const char *s); - - /*! - * Performs a deep copy of the data in \a v. - */ - String &operator=(const ByteVector &v); - - /*! - * Exchanges the content of the String by the content of \a s. - */ - void swap(String &s); - - /*! - * To be able to use this class in a Map, this operator needed to be - * implemented. Returns true if \a s is less than this string in a byte-wise - * comparison. - */ - bool operator<(const String &s) const; - - /*! - * A null string provided for convenience. - * - * \warning Do not modify this variable. It will mess up the internal state - * of TagLib. - * - * \deprecated Use String(). - */ - // BIC: remove - TAGLIB_DEPRECATED static String null; - - protected: - /*! - * If this String is being shared via implicit sharing, do a deep copy of the - * data and separate from the shared members. This should be called by all - * non-const subclass members. - */ - void detach(); - - private: - /*! - * \deprecated This variable is no longer used, but NEVER remove this. It - * may lead to a linkage error. - */ - // BIC: remove - TAGLIB_DEPRECATED static const Type WCharByteOrder; - - class StringPrivate; - StringPrivate *d; - }; -} // namespace TagLib - -/*! - * \relates TagLib::String - * - * Concatenates \a s1 and \a s2 and returns the result as a string. - */ -TAGLIB_EXPORT TagLib::String operator+(const TagLib::String &s1, const TagLib::String &s2); - -/*! - * \relates TagLib::String - * - * Concatenates \a s1 and \a s2 and returns the result as a string. - */ -TAGLIB_EXPORT TagLib::String operator+(const char *s1, const TagLib::String &s2); - -/*! - * \relates TagLib::String - * - * Concatenates \a s1 and \a s2 and returns the result as a string. - */ -TAGLIB_EXPORT TagLib::String operator+(const TagLib::String &s1, const char *s2); - - -/*! - * \relates TagLib::String - * - * Send the string to an output stream. - */ -TAGLIB_EXPORT std::ostream &operator<<(std::ostream &s, const TagLib::String &str); - -#endif diff --git a/taglib/include/taglib/tstringlist.h b/taglib/include/taglib/tstringlist.h deleted file mode 100644 index e18a54b..0000000 --- a/taglib/include/taglib/tstringlist.h +++ /dev/null @@ -1,115 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_STRINGLIST_H -#define TAGLIB_STRINGLIST_H - -#include "tstring.h" -#include "tlist.h" -#include "tbytevectorlist.h" -#include "taglib_export.h" - -#include - -namespace TagLib { - - //! A list of strings - - /*! - * This is a specialization of the List class with some members convention for - * string operations. - */ - - class TAGLIB_EXPORT StringList : public List - { - public: - - /*! - * Constructs an empty StringList. - */ - StringList(); - - /*! - * Make a shallow, implicitly shared, copy of \a l. Because this is - * implicitly shared, this method is lightweight and suitable for - * pass-by-value usage. - */ - StringList(const StringList &l); - - /*! - * Constructs a StringList with \a s as a member. - */ - StringList(const String &s); - - /*! - * Makes a deep copy of the data in \a vl. - * - * \note This should only be used with the 8-bit codecs Latin1 and UTF8, when - * used with other codecs it will simply print a warning and exit. - */ - StringList(const ByteVectorList &vl, String::Type t = String::Latin1); - - /*! - * Destroys this StringList instance. - */ - virtual ~StringList(); - - /*! - * Concatenate the list of strings into one string separated by \a separator. - */ - String toString(const String &separator = " ") const; - - /*! - * Appends \a s to the end of the list and returns a reference to the - * list. - */ - StringList &append(const String &s); - - /*! - * Appends all of the values in \a l to the end of the list and returns a - * reference to the list. - */ - StringList &append(const StringList &l); - - /*! - * Splits the String \a s into several strings at \a pattern. This will not include - * the pattern in the returned strings. - */ - static StringList split(const String &s, const String &pattern); - - private: - class StringListPrivate; - StringListPrivate *d; - }; - -} // namespace TagLib - -/*! - * \related TagLib::StringList - * Send the StringList to an output stream. - */ -std::ostream TAGLIB_EXPORT &operator<<(std::ostream &s, const TagLib::StringList &l); - -#endif diff --git a/taglib/include/taglib/uniquefileidentifierframe.h b/taglib/include/taglib/uniquefileidentifierframe.h deleted file mode 100644 index cdbf1eb..0000000 --- a/taglib/include/taglib/uniquefileidentifierframe.h +++ /dev/null @@ -1,123 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_UNIQUEFILEIDENTIFIERFRAME -#define TAGLIB_UNIQUEFILEIDENTIFIERFRAME - -#include "id3v2frame.h" - -namespace TagLib { - - namespace ID3v2 { - - /*! - * This is an implementation of ID3v2 unique file identifier frames. This - * frame is used to identify the file in an arbitrary database identified - * by the owner field. - */ - - //! An implementation of ID3v2 unique identifier frames - - class TAGLIB_EXPORT UniqueFileIdentifierFrame : public ID3v2::Frame - { - friend class FrameFactory; - - public: - /*! - * Creates a unique file identifier frame based on \a data. - */ - UniqueFileIdentifierFrame(const ByteVector &data); - - /*! - * Creates a unique file identifier frame with the owner \a owner and - * the identification \a id. - */ - UniqueFileIdentifierFrame(const String &owner, const ByteVector &id); - - /*! - * Destroys the frame. - */ - ~UniqueFileIdentifierFrame(); - - /*! - * Returns the owner for the frame; essentially this is the key for - * determining which identification scheme this key belongs to. This - * will usually either be an email address or URL for the person or tool - * used to create the unique identifier. - * - * \see setOwner() - */ - String owner() const; - - /*! - * Returns the unique identifier. Though sometimes this is a text string - * it also may be binary data and as much should be assumed when handling - * it. - */ - ByteVector identifier() const; - - /*! - * Sets the owner of the identification scheme to \a s. - * - * \see owner() - */ - void setOwner(const String &s); - - /*! - * Sets the unique file identifier to \a v. - * - * \see identifier() - */ - void setIdentifier(const ByteVector &v); - - virtual String toString() const; - - PropertyMap asProperties() const; - - /*! - * UFID frames each have a unique owner. This searches for a UFID - * frame with the owner \a o and returns a pointer to it. - * - * \see owner() - */ - static UniqueFileIdentifierFrame *findByOwner(const Tag *tag, const String &o); - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - UniqueFileIdentifierFrame(const UniqueFileIdentifierFrame &); - UniqueFileIdentifierFrame &operator=(const UniqueFileIdentifierFrame &); - - UniqueFileIdentifierFrame(const ByteVector &data, Header *h); - - class UniqueFileIdentifierFramePrivate; - UniqueFileIdentifierFramePrivate *d; - }; - } // namespace ID3v2 -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/unknownframe.h b/taglib/include/taglib/unknownframe.h deleted file mode 100644 index 2223702..0000000 --- a/taglib/include/taglib/unknownframe.h +++ /dev/null @@ -1,79 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_UNKNOWNFRAME_H -#define TAGLIB_UNKNOWNFRAME_H - -#include "id3v2frame.h" -#include "taglib_export.h" - -namespace TagLib { - - namespace ID3v2 { - - //! A frame type \e unknown to TagLib. - - /*! - * This class represents a frame type not known (or more often simply - * unimplemented) in TagLib. This is here provide a basic API for - * manipulating the binary data of unknown frames and to provide a means - * of rendering such \e unknown frames. - * - * Please note that a cleaner way of handling frame types that TagLib - * does not understand is to subclass ID3v2::Frame and ID3v2::FrameFactory - * to have your frame type supported through the standard ID3v2 mechanism. - */ - - class TAGLIB_EXPORT UnknownFrame : public Frame - { - friend class FrameFactory; - - public: - UnknownFrame(const ByteVector &data); - virtual ~UnknownFrame(); - - virtual String toString() const; - - /*! - * Returns the field data (everything but the header) for this frame. - */ - ByteVector data() const; - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - UnknownFrame(const ByteVector &data, Header *h); - UnknownFrame(const UnknownFrame &); - UnknownFrame &operator=(const UnknownFrame &); - - class UnknownFramePrivate; - UnknownFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/unsynchronizedlyricsframe.h b/taglib/include/taglib/unsynchronizedlyricsframe.h deleted file mode 100644 index 8ee378b..0000000 --- a/taglib/include/taglib/unsynchronizedlyricsframe.h +++ /dev/null @@ -1,179 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - copyright : (C) 2006 by Urs Fleisch - email : ufleisch@users.sourceforge.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_UNSYNCHRONIZEDLYRICSFRAME_H -#define TAGLIB_UNSYNCHRONIZEDLYRICSFRAME_H - -#include "id3v2frame.h" - -namespace TagLib { - - namespace ID3v2 { - - //! ID3v2 unsynchronized lyrics frame - /*! - * An implementation of ID3v2 unsynchronized lyrics. - */ - class TAGLIB_EXPORT UnsynchronizedLyricsFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * Construct an empty unsynchronized lyrics frame that will use the text encoding - * \a encoding. - */ - explicit UnsynchronizedLyricsFrame(String::Type encoding = String::Latin1); - - /*! - * Construct a unsynchronized lyrics frame based on the data in \a data. - */ - explicit UnsynchronizedLyricsFrame(const ByteVector &data); - - /*! - * Destroys this UnsynchronizedLyricsFrame instance. - */ - virtual ~UnsynchronizedLyricsFrame(); - - /*! - * Returns the text of this unsynchronized lyrics frame. - * - * \see text() - */ - virtual String toString() const; - - /*! - * Returns the language encoding as a 3 byte encoding as specified by - * ISO-639-2. - * - * \note Most taggers simply ignore this value. - * - * \see setLanguage() - */ - ByteVector language() const; - - /*! - * Returns the description of this unsynchronized lyrics frame. - * - * \note Most taggers simply ignore this value. - * - * \see setDescription() - */ - String description() const; - - /*! - * Returns the text of this unsynchronized lyrics frame. - * - * \see setText() - */ - String text() const; - - /*! - * Set the language using the 3 byte language code from - * ISO-639-2 to - * \a languageCode. - * - * \see language() - */ - void setLanguage(const ByteVector &languageCode); - - /*! - * Sets the description of the unsynchronized lyrics frame to \a s. - * - * \see description() - */ - void setDescription(const String &s); - - /*! - * Sets the text portion of the unsynchronized lyrics frame to \a s. - * - * \see text() - */ - virtual void setText(const String &s); - - /*! - * Returns the text encoding that will be used in rendering this frame. - * This defaults to the type that was either specified in the constructor - * or read from the frame when parsed. - * - * \see setTextEncoding() - * \see render() - */ - String::Type textEncoding() const; - - /*! - * Sets the text encoding to be used when rendering this frame to - * \a encoding. - * - * \see textEncoding() - * \see render() - */ - void setTextEncoding(String::Type encoding); - - - /*! Parses this frame as PropertyMap with a single key. - * - if description() is empty or "LYRICS", the key will be "LYRICS" - * - if description() is not a valid PropertyMap key, the frame will be - * marked unsupported by an entry "USLT/" in the unsupportedData() - * attribute of the returned map. - * - otherwise, the key will be "LYRICS:" - * - The single value will be the frame's text(). - * Note that currently the language() field is not supported by the PropertyMap - * interface. - */ - PropertyMap asProperties() const; - - /*! - * LyricsFrames each have a unique description. This searches for a lyrics - * frame with the description \a d and returns a pointer to it. If no - * frame is found that matches the given description null is returned. - * - * \see description() - */ - static UnsynchronizedLyricsFrame *findByDescription(const Tag *tag, const String &d); - - protected: - // Reimplementations. - - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - private: - /*! - * The constructor used by the FrameFactory. - */ - UnsynchronizedLyricsFrame(const ByteVector &data, Header *h); - UnsynchronizedLyricsFrame(const UnsynchronizedLyricsFrame &); - UnsynchronizedLyricsFrame &operator=(const UnsynchronizedLyricsFrame &); - - class UnsynchronizedLyricsFramePrivate; - UnsynchronizedLyricsFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/urllinkframe.h b/taglib/include/taglib/urllinkframe.h deleted file mode 100644 index c9f75ab..0000000 --- a/taglib/include/taglib/urllinkframe.h +++ /dev/null @@ -1,190 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - - copyright : (C) 2006 by Urs Fleisch - email : ufleisch@users.sourceforge.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_URLLINKFRAME_H -#define TAGLIB_URLLINKFRAME_H - -#include "id3v2frame.h" - -namespace TagLib { - - namespace ID3v2 { - - //! ID3v2 URL frame - /*! - * An implementation of ID3v2 URL link frames. - */ - class TAGLIB_EXPORT UrlLinkFrame : public Frame - { - friend class FrameFactory; - - public: - /*! - * This is a dual purpose constructor. \a data can either be binary data - * that should be parsed or (at a minimum) the frame ID. - */ - explicit UrlLinkFrame(const ByteVector &data); - - /*! - * Destroys this UrlLinkFrame instance. - */ - virtual ~UrlLinkFrame(); - - /*! - * Returns the URL. - */ - virtual String url() const; - - /*! - * Sets the URL to \a s. - */ - virtual void setUrl(const String &s); - - // Reimplementations. - - virtual void setText(const String &s); - virtual String toString() const; - PropertyMap asProperties() const; - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - /*! - * The constructor used by the FrameFactory. - */ - UrlLinkFrame(const ByteVector &data, Header *h); - - private: - UrlLinkFrame(const UrlLinkFrame &); - UrlLinkFrame &operator=(const UrlLinkFrame &); - - class UrlLinkFramePrivate; - UrlLinkFramePrivate *d; - }; - - //! ID3v2 User defined URL frame - - /*! - * This is a specialization of URL link frames that allows for - * user defined entries. Each entry has a description in addition to the - * normal list of fields that a URL link frame has. - * - * This description identifies the frame and must be unique. - */ - class TAGLIB_EXPORT UserUrlLinkFrame : public UrlLinkFrame - { - friend class FrameFactory; - - public: - /*! - * Constructs an empty user defined URL link frame. For this to be - * a useful frame both a description and text must be set. - */ - explicit UserUrlLinkFrame(String::Type encoding = String::Latin1); - - /*! - * This is a dual purpose constructor. \a data can either be binary data - * that should be parsed or (at a minimum) the frame ID. - */ - explicit UserUrlLinkFrame(const ByteVector &data); - - /*! - * Destroys this UserUrlLinkFrame instance. - */ - virtual ~UserUrlLinkFrame(); - - // Reimplementations. - - virtual String toString() const; - - /*! - * Returns the text encoding that will be used in rendering this frame. - * This defaults to the type that was either specified in the constructor - * or read from the frame when parsed. - * - * \see setTextEncoding() - * \see render() - */ - String::Type textEncoding() const; - - /*! - * Sets the text encoding to be used when rendering this frame to - * \a encoding. - * - * \see textEncoding() - * \see render() - */ - void setTextEncoding(String::Type encoding); - - /*! - * Returns the description for this frame. - */ - String description() const; - - /*! - * Sets the description of the frame to \a s. \a s must be unique. - */ - void setDescription(const String &s); - - /*! - * Parses the UserUrlLinkFrame as PropertyMap. The description() is taken as key, - * and the URL as single value. - * - if description() is empty, the key will be "URL". - * - otherwise, if description() is not a valid key (e.g. containing non-ASCII - * characters), the returned map will contain an entry "WXXX/" - * in its unsupportedData() list. - */ - PropertyMap asProperties() const; - - /*! - * Searches for the user defined url frame with the description \a description - * in \a tag. This returns null if no matching frames were found. - */ - static UserUrlLinkFrame *find(Tag *tag, const String &description); - - protected: - virtual void parseFields(const ByteVector &data); - virtual ByteVector renderFields() const; - - /*! - * The constructor used by the FrameFactory. - */ - UserUrlLinkFrame(const ByteVector &data, Header *h); - - private: - UserUrlLinkFrame(const UserUrlLinkFrame &); - UserUrlLinkFrame &operator=(const UserUrlLinkFrame &); - - class UserUrlLinkFramePrivate; - UserUrlLinkFramePrivate *d; - }; - - } // namespace ID3v2 -} // namespace TagLib -#endif diff --git a/taglib/include/taglib/vorbisfile.h b/taglib/include/taglib/vorbisfile.h deleted file mode 100644 index a166db4..0000000 --- a/taglib/include/taglib/vorbisfile.h +++ /dev/null @@ -1,157 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_VORBISFILE_H -#define TAGLIB_VORBISFILE_H - -#include "taglib_export.h" -#include "oggfile.h" -#include "xiphcomment.h" - -#include "vorbisproperties.h" - -namespace TagLib { - -/* - * This is just to make this appear to be in the Ogg namespace in the - * documentation. The typedef below will make this work with the current code. - * In the next BIC version of TagLib this will be really moved into the Ogg - * namespace. - */ - -#ifdef DOXYGEN - namespace Ogg { -#endif - - //! A namespace containing classes for Vorbis metadata - - namespace Vorbis { - - - //! An implementation of Ogg::File with Vorbis specific methods - - /*! - * This is the central class in the Ogg Vorbis metadata processing collection - * of classes. It's built upon Ogg::File which handles processing of the Ogg - * logical bitstream and breaking it down into pages which are handled by - * the codec implementations, in this case Vorbis specifically. - */ - - class TAGLIB_EXPORT File : public Ogg::File - { - public: - /*! - * Constructs a Vorbis file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs a Vorbis file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the XiphComment for this file. XiphComment implements the tag - * interface, so this serves as the reimplementation of - * TagLib::File::tag(). - */ - virtual Ogg::XiphComment *tag() const; - - - /*! - * Implements the unified property interface -- export function. - * This forwards directly to XiphComment::properties(). - */ - PropertyMap properties() const; - - /*! - * Implements the unified tag dictionary interface -- import function. - * Like properties(), this is a forwarder to the file's XiphComment. - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the Vorbis::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Save the file. - * - * This returns true if the save was successful. - */ - virtual bool save(); - - /*! - * Check if the given \a stream can be opened as an Ogg Vorbis file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace Vorbis - -/* - * To keep compatibility with the current version put Vorbis in the Ogg namespace - * only in the docs and provide a typedef to make it work. In the next BIC - * version this will be removed and it will only exist in the Ogg namespace. - */ - -#ifdef DOXYGEN - } -#else - namespace Ogg { namespace Vorbis { typedef TagLib::Vorbis::File File; } } -#endif - -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/vorbisproperties.h b/taglib/include/taglib/vorbisproperties.h deleted file mode 100644 index 4ca2bfe..0000000 --- a/taglib/include/taglib/vorbisproperties.h +++ /dev/null @@ -1,160 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_VORBISPROPERTIES_H -#define TAGLIB_VORBISPROPERTIES_H - -#include "taglib_export.h" -#include "audioproperties.h" - -namespace TagLib { - -/* - * This is just to make this appear to be in the Ogg namespace in the - * documentation. The typedef below will make this work with the current code. - * In the next BIC version of TagLib this will be really moved into the Ogg - * namespace. - */ - -#ifdef DOXYGEN - namespace Ogg { -#endif - - namespace Vorbis { - - class File; - - //! An implementation of audio property reading for Ogg Vorbis - - /*! - * This reads the data from an Ogg Vorbis stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of Vorbis::Properties with the data read from the - * Vorbis::File \a file. - */ - Properties(File *file, ReadStyle style = Average); - - /*! - * Destroys this VorbisProperties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the Vorbis version, currently "0" (as specified by the spec). - */ - int vorbisVersion() const; - - /*! - * Returns the maximum bitrate as read from the Vorbis identification - * header. - */ - int bitrateMaximum() const; - - /*! - * Returns the nominal bitrate as read from the Vorbis identification - * header. - */ - int bitrateNominal() const; - - /*! - * Returns the minimum bitrate as read from the Vorbis identification - * header. - */ - int bitrateMinimum() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace Vorbis - -/* - * To keep compatibility with the current version put Vorbis in the Ogg namespace - * only in the docs and provide a typedef to make it work. In the next BIC - * version this will be removed and it will only exist in the Ogg namespace. - */ - -#ifdef DOXYGEN - } -#else - namespace Ogg { namespace Vorbis { typedef TagLib::AudioProperties AudioProperties; } } -#endif - -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/wavfile.h b/taglib/include/taglib/wavfile.h deleted file mode 100644 index bcd2841..0000000 --- a/taglib/include/taglib/wavfile.h +++ /dev/null @@ -1,215 +0,0 @@ -/*************************************************************************** - copyright : (C) 2008 by Scott Wheeler - email : wheeler@kde.org -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_WAVFILE_H -#define TAGLIB_WAVFILE_H - -#include "rifffile.h" -#include "id3v2tag.h" -#include "infotag.h" -#include "wavproperties.h" - -namespace TagLib { - - namespace RIFF { - - //! An implementation of WAV metadata - - /*! - * This is implementation of WAV metadata. - * - * This supports an ID3v2 tag as well as reading stream from the ID3 RIFF - * chunk as well as properties from the file. - */ - - namespace WAV { - - //! An implementation of TagLib::File with WAV specific methods - - /*! - * This implements and provides an interface for WAV files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to WAV files. - */ - - class TAGLIB_EXPORT File : public TagLib::RIFF::File - { - public: - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches ID3v2 tags. - ID3v2 = 0x0001, - //! Matches INFO tags. - Info = 0x0002, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs a WAV file from \a file. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs a WAV file from \a stream. If \a readProperties is true the - * file's audio properties will also be read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - * - * \note In the current implementation, \a propertiesStyle is ignored. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the ID3v2 Tag for this file. - * - * \note This method does not return all the tags for this file for - * backward compatibility. Will be fixed in TagLib 2.0. - */ - ID3v2::Tag *tag() const; - - /*! - * Returns the ID3v2 Tag for this file. - * - * \note This always returns a valid pointer regardless of whether or not - * the file on disk has an ID3v2 tag. Use hasID3v2Tag() to check if the - * file on disk actually has an ID3v2 tag. - * - * \see hasID3v2Tag() - */ - ID3v2::Tag *ID3v2Tag() const; - - /*! - * Returns the RIFF INFO Tag for this file. - * - * \note This always returns a valid pointer regardless of whether or not - * the file on disk has a RIFF INFO tag. Use hasInfoTag() to check if the - * file on disk actually has a RIFF INFO tag. - * - * \see hasInfoTag() - */ - Info::Tag *InfoTag() const; - - /*! - * This will strip the tags that match the OR-ed together TagTypes from the - * file. By default it strips all tags. It returns true if the tags are - * successfully stripped. - * - * \note This will update the file immediately. - */ - void strip(TagTypes tags = AllTags); - - /*! - * Implements the unified property interface -- export function. - * This method forwards to ID3v2::Tag::properties(). - */ - PropertyMap properties() const; - - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - * This method forwards to ID3v2::Tag::setProperties(). - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the WAV::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Saves the file. - */ - virtual bool save(); - - /*! - * \deprecated Use save(TagTypes, StripTags, ID3v2::Version). - */ - TAGLIB_DEPRECATED bool save(TagTypes tags, bool stripOthers, int id3v2Version = 4); - - /*! - * Save the file. If \a strip is specified, it is possible to choose if - * tags not specified in \a tags should be stripped from the file or - * retained. With \a version, it is possible to specify whether ID3v2.4 - * or ID3v2.3 should be used. - */ - bool save(TagTypes tags, StripTags strip = StripOthers, - ID3v2::Version version = ID3v2::v4); - - /*! - * Returns whether or not the file on disk actually has an ID3v2 tag. - * - * \see ID3v2Tag() - */ - bool hasID3v2Tag() const; - - /*! - * Returns whether or not the file on disk actually has a RIFF INFO tag. - * - * \see InfoTag() - */ - bool hasInfoTag() const; - - /*! - * Returns whether or not the given \a stream can be opened as a WAV - * file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - void removeTagChunks(TagTypes tags); - - friend class Properties; - - class FilePrivate; - FilePrivate *d; - }; - } // namespace WAV - } // namespace RIFF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/wavpackfile.h b/taglib/include/taglib/wavpackfile.h deleted file mode 100644 index ffece73..0000000 --- a/taglib/include/taglib/wavpackfile.h +++ /dev/null @@ -1,223 +0,0 @@ -/*************************************************************************** - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - (original MPC implementation) - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_WVFILE_H -#define TAGLIB_WVFILE_H - -#include "tfile.h" -#include "taglib_export.h" -#include "wavpackproperties.h" - -namespace TagLib { - - class Tag; - - namespace ID3v1 { class Tag; } - namespace APE { class Tag; } - - //! An implementation of WavPack metadata - - /*! - * This is implementation of WavPack metadata. - * - * This supports ID3v1 and APE (v1 and v2) style comments as well as reading stream - * properties from the file. - */ - - namespace WavPack { - - //! An implementation of TagLib::File with WavPack specific methods - - /*! - * This implements and provides an interface for WavPack files to the - * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing - * the abstract TagLib::File API as well as providing some additional - * information specific to WavPack files. - */ - - class TAGLIB_EXPORT File : public TagLib::File - { - public: - /*! - * This set of flags is used for various operations and is suitable for - * being OR-ed together. - */ - enum TagTypes { - //! Empty set. Matches no tag types. - NoTags = 0x0000, - //! Matches ID3v1 tags. - ID3v1 = 0x0001, - //! Matches APE tags. - APE = 0x0002, - //! Matches all tag types. - AllTags = 0xffff - }; - - /*! - * Constructs a WavPack file from \a file. If \a readProperties is true the - * file's audio properties will also be read using \a propertiesStyle. If - * false, \a propertiesStyle is ignored - */ - File(FileName file, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Constructs an WavPack file from \a file. If \a readProperties is true the - * file's audio properties will also be read using \a propertiesStyle. If - * false, \a propertiesStyle is ignored. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - File(IOStream *stream, bool readProperties = true, - Properties::ReadStyle propertiesStyle = Properties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - /*! - * Returns the Tag for this file. This will be an APE tag, an ID3v1 tag - * or a combination of the two. - */ - virtual TagLib::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * If the file contains both an APE and an ID3v1 tag, only APE - * will be converted to the PropertyMap. - */ - PropertyMap properties() const; - - void removeUnsupportedProperties(const StringList &properties); - - /*! - * Implements the unified property interface -- import function. - * Creates an APE tag if it does not exists and calls setProperties() on - * that. Any existing ID3v1 tag will be updated as well. - */ - PropertyMap setProperties(const PropertyMap&); - - /*! - * Returns the MPC::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - virtual Properties *audioProperties() const; - - /*! - * Saves the file. - * - * This returns true if the save was successful. - */ - virtual bool save(); - - /*! - * Returns a pointer to the ID3v1 tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid ID3v1 tag. If \a create is true it will create - * an ID3v1 tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an ID3v1 tag. Use hasID3v1Tag() to check if the file - * on disk actually has an ID3v1 tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasID3v1Tag() - */ - ID3v1::Tag *ID3v1Tag(bool create = false); - - /*! - * Returns a pointer to the APE tag of the file. - * - * If \a create is false (the default) this may return a null pointer - * if there is no valid APE tag. If \a create is true it will create - * an APE tag if one does not exist and returns a valid pointer. - * - * \note This may return a valid pointer regardless of whether or not the - * file on disk has an APE tag. Use hasAPETag() to check if the file - * on disk actually has an APE tag. - * - * \note The Tag is still owned by the MPEG::File and should not be - * deleted by the user. It will be deleted when the file (object) is - * destroyed. - * - * \see hasAPETag() - */ - APE::Tag *APETag(bool create = false); - - /*! - * This will remove the tags that match the OR-ed together TagTypes from the - * file. By default it removes all tags. - * - * \note This will also invalidate pointers to the tags - * as their memory will be freed. - * \note In order to make the removal permanent save() still needs to be called - */ - void strip(int tags = AllTags); - - /*! - * Returns whether or not the file on disk actually has an ID3v1 tag. - * - * \see ID3v1Tag() - */ - bool hasID3v1Tag() const; - - /*! - * Returns whether or not the file on disk actually has an APE tag. - * - * \see APETag() - */ - bool hasAPETag() const; - - /*! - * Check if the given \a stream can be opened as a WavPack file. - * - * \note This method is designed to do a quick check. The result may - * not necessarily be correct. - */ - static bool isSupported(IOStream *stream); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace WavPack -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/wavpackproperties.h b/taglib/include/taglib/wavpackproperties.h deleted file mode 100644 index e1a481d..0000000 --- a/taglib/include/taglib/wavpackproperties.h +++ /dev/null @@ -1,149 +0,0 @@ -/*************************************************************************** - copyright : (C) 2006 by Lukáš Lalinský - email : lalinsky@gmail.com - - copyright : (C) 2004 by Allan Sandfeld Jensen - email : kde@carewolf.org - (original MPC implementation) - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_WVPROPERTIES_H -#define TAGLIB_WVPROPERTIES_H - -#include "taglib_export.h" -#include "audioproperties.h" - -namespace TagLib { - - namespace WavPack { - - class File; - - static const unsigned int HeaderSize = 32; - - //! An implementation of audio property reading for WavPack - - /*! - * This reads the data from an WavPack stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of WavPack::Properties with the data read from the - * ByteVector \a data. - * - * \deprecated This constructor will be dropped in favor of the one below - * in a future version. - */ - TAGLIB_DEPRECATED Properties(const ByteVector &data, long streamLength, - ReadStyle style = Average); - - /*! - * Create an instance of WavPack::Properties. - */ - Properties(File *file, long streamLength, ReadStyle style = Average); - - /*! - * Destroys this WavPack::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. 0 means unknown or custom. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample. - */ - int bitsPerSample() const; - - /*! - * Returns whether or not the file is lossless encoded. - */ - bool isLossless() const; - - /*! - * Returns the total number of audio samples in file. - */ - unsigned int sampleFrames() const; - - /*! - * Returns WavPack version. - */ - int version() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file, long streamLength); - unsigned int seekFinalIndex(File *file, long streamLength); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace WavPack -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/wavproperties.h b/taglib/include/taglib/wavproperties.h deleted file mode 100644 index 2b3c0be..0000000 --- a/taglib/include/taglib/wavproperties.h +++ /dev/null @@ -1,163 +0,0 @@ -/*************************************************************************** - copyright : (C) 2008 by Scott Wheeler - email : wheeler@kde.org -***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_WAVPROPERTIES_H -#define TAGLIB_WAVPROPERTIES_H - -#include "taglib.h" -#include "audioproperties.h" - -namespace TagLib { - - class ByteVector; - - namespace RIFF { - - namespace WAV { - - class File; - - //! An implementation of audio property reading for WAV - - /*! - * This reads the data from an WAV stream found in the AudioProperties - * API. - */ - - class TAGLIB_EXPORT Properties : public AudioProperties - { - public: - /*! - * Create an instance of WAV::Properties with the data read from the - * ByteVector \a data. - * - * \deprecated Use Properties(File *, ReadStyle). - */ - TAGLIB_DEPRECATED Properties(const ByteVector &data, ReadStyle style); - - /*! - * Create an instance of WAV::Properties with the data read from the - * ByteVector \a data and the length calculated using \a streamLength. - * - * \deprecated Use Properties(File *, ReadStyle). - */ - TAGLIB_DEPRECATED Properties(const ByteVector &data, unsigned int streamLength, ReadStyle style); - - /*! - * Create an instance of WAV::Properties with the data read from the - * WAV::File \a file. - */ - Properties(File *file, ReadStyle style); - - /*! - * Destroys this WAV::Properties instance. - */ - virtual ~Properties(); - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \note This method is just an alias of lengthInSeconds(). - * - * \deprecated Use lengthInSeconds(). - */ - TAGLIB_DEPRECATED virtual int length() const; - - /*! - * Returns the length of the file in seconds. The length is rounded down to - * the nearest whole second. - * - * \see lengthInMilliseconds() - */ - // BIC: make virtual - int lengthInSeconds() const; - - /*! - * Returns the length of the file in milliseconds. - * - * \see lengthInSeconds() - */ - // BIC: make virtual - int lengthInMilliseconds() const; - - /*! - * Returns the average bit rate of the file in kb/s. - */ - virtual int bitrate() const; - - /*! - * Returns the sample rate in Hz. - */ - virtual int sampleRate() const; - - /*! - * Returns the number of audio channels. - */ - virtual int channels() const; - - /*! - * Returns the number of bits per audio sample. - */ - int bitsPerSample() const; - - /*! - * Returns the number of bits per audio sample. - * - * \note This method is just an alias of bitsPerSample(). - * - * \deprecated Use bitsPerSample(). - */ - TAGLIB_DEPRECATED int sampleWidth() const; - - /*! - * Returns the number of sample frames. - */ - unsigned int sampleFrames() const; - - /*! - * Returns the format ID of the file. - * 0 for unknown, 1 for PCM, 2 for ADPCM, 3 for 32/64-bit IEEE754, and - * so forth. - * - * \note For further information, refer to the WAVE Form Registration - * Numbers in RFC 2361. - */ - int format() const; - - private: - Properties(const Properties &); - Properties &operator=(const Properties &); - - void read(File *file); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace WAV - } // namespace RIFF -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/xingheader.h b/taglib/include/taglib/xingheader.h deleted file mode 100644 index 4854168..0000000 --- a/taglib/include/taglib/xingheader.h +++ /dev/null @@ -1,129 +0,0 @@ -/*************************************************************************** - copyright : (C) 2003 by Ismael Orenstein - email : orenstein@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_XINGHEADER_H -#define TAGLIB_XINGHEADER_H - -#include "mpegheader.h" -#include "taglib_export.h" - -namespace TagLib { - - class ByteVector; - - namespace MPEG { - - class File; - - //! An implementation of the Xing/VBRI headers - - /*! - * This is a minimalistic implementation of the Xing/VBRI VBR headers. - * Xing/VBRI headers are often added to VBR (variable bit rate) MP3 streams - * to make it easy to compute the length and quality of a VBR stream. Our - * implementation is only concerned with the total size of the stream (so - * that we can calculate the total playing time and the average bitrate). - * It uses - * this text and the XMMS sources as references. - */ - - class TAGLIB_EXPORT XingHeader - { - public: - /*! - * The type of the VBR header. - */ - enum HeaderType - { - /*! - * Invalid header or no VBR header found. - */ - Invalid = 0, - - /*! - * Xing header. - */ - Xing = 1, - - /*! - * VBRI header. - */ - VBRI = 2, - }; - - /*! - * Parses an Xing/VBRI header based on \a data which contains the entire - * first MPEG frame. - */ - XingHeader(const ByteVector &data); - - /*! - * Destroy this XingHeader instance. - */ - virtual ~XingHeader(); - - /*! - * Returns true if the data was parsed properly and if there is a valid - * Xing/VBRI header present. - */ - bool isValid() const; - - /*! - * Returns the total number of frames. - */ - unsigned int totalFrames() const; - - /*! - * Returns the total size of stream in bytes. - */ - unsigned int totalSize() const; - - /*! - * Returns the type of the VBR header. - */ - HeaderType type() const; - - /*! - * Returns the offset for the start of this Xing header, given the - * version and channels of the frame - * - * \deprecated Always returns 0. - */ - TAGLIB_DEPRECATED static int xingHeaderOffset(TagLib::MPEG::Header::Version v, - TagLib::MPEG::Header::ChannelMode c); - - private: - XingHeader(const XingHeader &); - XingHeader &operator=(const XingHeader &); - - void parse(const ByteVector &data); - - class XingHeaderPrivate; - XingHeaderPrivate *d; - }; - } // namespace MPEG -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/xiphcomment.h b/taglib/include/taglib/xiphcomment.h deleted file mode 100644 index cb4742b..0000000 --- a/taglib/include/taglib/xiphcomment.h +++ /dev/null @@ -1,280 +0,0 @@ -/*************************************************************************** - copyright : (C) 2002 - 2008 by Scott Wheeler - email : wheeler@kde.org - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_VORBISCOMMENT_H -#define TAGLIB_VORBISCOMMENT_H - -#include "tag.h" -#include "tlist.h" -#include "tmap.h" -#include "tstring.h" -#include "tstringlist.h" -#include "tbytevector.h" -#include "flacpicture.h" -#include "taglib_export.h" - -#ifdef _MSC_VER -// Explained at end of tpropertymap.cpp -extern template class TAGLIB_EXPORT TagLib::Map; -#endif - -namespace TagLib { - - namespace Ogg { - - /*! - * A mapping between a list of field names, or keys, and a list of values - * associated with that field. - * - * \see XiphComment::fieldListMap() - */ - typedef Map FieldListMap; - - //! Ogg Vorbis comment implementation - - /*! - * This class is an implementation of the Ogg Vorbis comment specification, - * to be found in section 5 of the Ogg Vorbis specification. Because this - * format is also used in other (currently unsupported) Xiph.org formats, it - * has been made part of a generic implementation rather than being limited - * to strictly Vorbis. - * - * Vorbis comments are a simple vector of keys and values, called fields. - * Multiple values for a given key are supported. - * - * \see fieldListMap() - */ - - class TAGLIB_EXPORT XiphComment : public TagLib::Tag - { - public: - /*! - * Constructs an empty Vorbis comment. - */ - XiphComment(); - - /*! - * Constructs a Vorbis comment from \a data. - */ - XiphComment(const ByteVector &data); - - /*! - * Destroys this instance of the XiphComment. - */ - virtual ~XiphComment(); - - virtual String title() const; - virtual String artist() const; - virtual String album() const; - virtual String comment() const; - virtual String genre() const; - virtual unsigned int year() const; - virtual unsigned int track() const; - - virtual void setTitle(const String &s); - virtual void setArtist(const String &s); - virtual void setAlbum(const String &s); - virtual void setComment(const String &s); - virtual void setGenre(const String &s); - virtual void setYear(unsigned int i); - virtual void setTrack(unsigned int i); - - virtual bool isEmpty() const; - - /*! - * Returns the number of fields present in the comment. - */ - unsigned int fieldCount() const; - - /*! - * Returns a reference to the map of field lists. Because Xiph comments - * support multiple fields with the same key, a pure Map would not work. - * As such this is a Map of string lists, keyed on the comment field name. - * - * The standard set of Xiph/Vorbis fields (which may or may not be - * contained in any specific comment) is: - * - *
    - *
  • TITLE
  • - *
  • VERSION
  • - *
  • ALBUM
  • - *
  • ARTIST
  • - *
  • PERFORMER
  • - *
  • COPYRIGHT
  • - *
  • ORGANIZATION
  • - *
  • DESCRIPTION
  • - *
  • GENRE
  • - *
  • DATE
  • - *
  • LOCATION
  • - *
  • CONTACT
  • - *
  • ISRC
  • - *
- * - * For a more detailed description of these fields, please see the Ogg - * Vorbis specification, section 5.2.2.1. - * - * \note The Ogg Vorbis comment specification does allow these key values - * to be either upper or lower case. However, it is conventional for them - * to be upper case. As such, TagLib, when parsing a Xiph/Vorbis comment, - * converts all fields to uppercase. When you are using this data - * structure, you will need to specify the field name in upper case. - * - * \warning You should not modify this data structure directly, instead - * use addField() and removeField(). - */ - const FieldListMap &fieldListMap() const; - - /*! - * Implements the unified property interface -- export function. - * The result is a one-to-one match of the Xiph comment, since it is - * completely compatible with the property interface (in fact, a Xiph - * comment is nothing more than a map from tag names to list of values, - * as is the dict interface). - */ - PropertyMap properties() const; - - /*! - * Implements the unified property interface -- import function. - * The tags from the given map will be stored one-to-one in the file, - * except for invalid keys (less than one character, non-ASCII, or - * containing '=' or '~') in which case the according values will - * be contained in the returned PropertyMap. - */ - PropertyMap setProperties(const PropertyMap&); - - /*! - * Check if the given String is a valid Xiph comment key. - */ - static bool checkKey(const String&); - - /*! - * Returns the vendor ID of the Ogg Vorbis encoder. libvorbis 1.0 as the - * most common case always returns "Xiph.Org libVorbis I 20020717". - */ - String vendorID() const; - - /*! - * Add the field specified by \a key with the data \a value. If \a replace - * is true, then all of the other fields with the same key will be removed - * first. - * - * If the field value is empty, the field will be removed. - */ - void addField(const String &key, const String &value, bool replace = true); - - /*! - * Remove the field specified by \a key with the data \a value. If - * \a value is null, all of the fields with the given key will be removed. - * - * \deprecated Using this method may lead to a linkage error. - */ - // BIC: remove and merge with below - TAGLIB_DEPRECATED void removeField(const String &key, const String &value = String()); - - /*! - * Remove all the fields specified by \a key. - * - * \see removeAllFields() - */ - void removeFields(const String &key); - - /*! - * Remove all the fields specified by \a key with the data \a value. - * - * \see removeAllFields() - */ - void removeFields(const String &key, const String &value); - - /*! - * Remove all the fields in the comment. - * - * \see removeFields() - */ - void removeAllFields(); - - /*! - * Returns true if the field is contained within the comment. - * - * \note This is safer than checking for membership in the FieldListMap. - */ - bool contains(const String &key) const; - - /*! - * Renders the comment to a ByteVector suitable for inserting into a file. - */ - ByteVector render() const; // BIC: remove and merge with below - - /*! - * Renders the comment to a ByteVector suitable for inserting into a file. - * - * If \a addFramingBit is true the standard Vorbis comment framing bit will - * be appended. However some formats (notably FLAC) do not work with this - * in place. - */ - ByteVector render(bool addFramingBit) const; - - - /*! - * Returns a list of pictures attached to the xiph comment. - */ - List pictureList(); - - /*! - * Removes an picture. If \a del is true the picture's memory - * will be freed; if it is false, it must be deleted by the user. - */ - void removePicture(FLAC::Picture *picture, bool del = true); - - /*! - * Remove all pictures. - */ - void removeAllPictures(); - - /*! - * Add a new picture to the comment block. The comment block takes ownership of the - * picture and will handle freeing its memory. - * - * \note The file will be saved only after calling save(). - */ - void addPicture(FLAC::Picture *picture); - - protected: - /*! - * Reads the tag from the file specified in the constructor and fills the - * FieldListMap. - */ - void parse(const ByteVector &data); - - private: - XiphComment(const XiphComment &); - XiphComment &operator=(const XiphComment &); - - class XiphCommentPrivate; - XiphCommentPrivate *d; - }; - } // namespace Ogg -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/xmfile.h b/taglib/include/taglib/xmfile.h deleted file mode 100644 index e72c92c..0000000 --- a/taglib/include/taglib/xmfile.h +++ /dev/null @@ -1,112 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_XMFILE_H -#define TAGLIB_XMFILE_H - -#include "tfile.h" -#include "audioproperties.h" -#include "taglib_export.h" -#include "modfilebase.h" -#include "modtag.h" -#include "xmproperties.h" - -namespace TagLib { - - namespace XM { - - class TAGLIB_EXPORT File : public Mod::FileBase { - public: - /*! - * Constructs an Extended Module file from \a file. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - */ - File(FileName file, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Constructs an Extended Module file from \a stream. - * - * \note In the current implementation, both \a readProperties and - * \a propertiesStyle are ignored. The audio properties are always - * read. - * - * \note TagLib will *not* take ownership of the stream, the caller is - * responsible for deleting it after the File object. - */ - File(IOStream *stream, bool readProperties = true, - AudioProperties::ReadStyle propertiesStyle = - AudioProperties::Average); - - /*! - * Destroys this instance of the File. - */ - virtual ~File(); - - Mod::Tag *tag() const; - - /*! - * Implements the unified property interface -- export function. - * Forwards to Mod::Tag::properties(). - */ - PropertyMap properties() const; - - /*! - * Implements the unified property interface -- import function. - * Forwards to Mod::Tag::setProperties(). - */ - PropertyMap setProperties(const PropertyMap &); - - /*! - * Returns the XM::Properties for this file. If no audio properties - * were read then this will return a null pointer. - */ - XM::Properties *audioProperties() const; - - /*! - * Save the file. - * This is the same as calling save(AllTags); - * - * \note Saving Extended Module tags is not supported. - */ - bool save(); - - private: - File(const File &); - File &operator=(const File &); - - void read(bool readProperties); - - class FilePrivate; - FilePrivate *d; - }; - } // namespace XM -} // namespace TagLib - -#endif diff --git a/taglib/include/taglib/xmproperties.h b/taglib/include/taglib/xmproperties.h deleted file mode 100644 index 8d953f2..0000000 --- a/taglib/include/taglib/xmproperties.h +++ /dev/null @@ -1,85 +0,0 @@ -/*************************************************************************** - copyright : (C) 2011 by Mathias Panzenböck - email : grosser.meister.morti@gmx.net - ***************************************************************************/ - -/*************************************************************************** - * This library is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Lesser General Public License version * - * 2.1 as published by the Free Software Foundation. * - * * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * Lesser General Public License for more details. * - * * - * You should have received a copy of the GNU Lesser General Public * - * License along with this library; if not, write to the Free Software * - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * - * 02110-1301 USA * - * * - * Alternatively, this file is available under the Mozilla Public * - * License Version 1.1. You may obtain a copy of the License at * - * http://www.mozilla.org/MPL/ * - ***************************************************************************/ - -#ifndef TAGLIB_XMPROPERTIES_H -#define TAGLIB_XMPROPERTIES_H - -#include "taglib.h" -#include "tstring.h" -#include "audioproperties.h" - -namespace TagLib { - namespace XM { - class TAGLIB_EXPORT Properties : public AudioProperties { - friend class File; - public: - /*! Flag bits. */ - enum { - LinearFreqTable = 1 // otherwise its the amiga freq. table - }; - - Properties(AudioProperties::ReadStyle propertiesStyle); - virtual ~Properties(); - - int length() const; - int lengthInSeconds() const; - int lengthInMilliseconds() const; - int bitrate() const; - int sampleRate() const; - int channels() const; - - unsigned short lengthInPatterns() const; - unsigned short version() const; - unsigned short restartPosition() const; - unsigned short patternCount() const; - unsigned short instrumentCount() const; - unsigned int sampleCount() const; - unsigned short flags() const; - unsigned short tempo() const; - unsigned short bpmSpeed() const; - - void setChannels(int channels); - - void setLengthInPatterns(unsigned short lengthInPatterns); - void setVersion(unsigned short version); - void setRestartPosition(unsigned short restartPosition); - void setPatternCount(unsigned short patternCount); - void setInstrumentCount(unsigned short instrumentCount); - void setSampleCount(unsigned int sampleCount); - void setFlags(unsigned short flags); - void setTempo(unsigned short tempo); - void setBpmSpeed(unsigned short bpmSpeed); - - private: - Properties(const Properties&); - Properties &operator=(const Properties&); - - class PropertiesPrivate; - PropertiesPrivate *d; - }; - } // namespace XM -} // namespace TagLib - -#endif diff --git a/taglib/lib/libtag.a b/taglib/lib/libtag.a deleted file mode 100644 index bf97ccd..0000000 Binary files a/taglib/lib/libtag.a and /dev/null differ diff --git a/taglib/lib/libtag_c.a b/taglib/lib/libtag_c.a deleted file mode 100644 index 74f1f79..0000000 Binary files a/taglib/lib/libtag_c.a and /dev/null differ diff --git a/taglib/lib/pkgconfig/taglib.pc b/taglib/lib/pkgconfig/taglib.pc deleted file mode 100644 index f7b799a..0000000 --- a/taglib/lib/pkgconfig/taglib.pc +++ /dev/null @@ -1,11 +0,0 @@ -prefix=C:/Users/TaurusXin/Downloads/ncmdump/taglib -exec_prefix=${prefix} -libdir=${prefix}/lib -includedir=${prefix}/include - -Name: TagLib -Description: Audio meta-data library -Requires: -Version: 1.13.1 -Libs: -L${libdir} -ltag -Cflags: -I${includedir} -I${includedir}/taglib diff --git a/taglib/lib/pkgconfig/taglib_c.pc b/taglib/lib/pkgconfig/taglib_c.pc deleted file mode 100644 index 68c15e7..0000000 --- a/taglib/lib/pkgconfig/taglib_c.pc +++ /dev/null @@ -1,11 +0,0 @@ -prefix=C:/Users/TaurusXin/Downloads/ncmdump/taglib -exec_prefix=${prefix} -libdir=${prefix}/lib -includedir=${prefix}/include - -Name: TagLib C Bindings -Description: Audio meta-data library (C bindings) -Requires: taglib -Version: 1.13.1 -Libs: -L${libdir} -ltag_c -Cflags: -I${includedir}/taglib