TagLib Audio Meta-Data Library

Related tags

Multimedia taglib
Overview

TagLib

Build Status

TagLib Audio Metadata Library

https://taglib.org/

TagLib is a library for reading and editing the metadata of several popular audio formats. Currently it supports both ID3v1 and ID3v2 for MP3 files, Ogg Vorbis comments and ID3 tags in FLAC, MPC, Speex, WavPack, TrueAudio, WAV, AIFF, MP4, APE, and ASF files.

TagLib is distributed under the GNU Lesser General Public License (LGPL) and Mozilla Public License (MPL). Essentially that means that it may be used in proprietary applications, but if changes are made to TagLib they must be contributed back to the project. Please review the licenses if you are considering using TagLib in your project.

Comments
  • Workaround for 64-bit MP4 atoms.

    Workaround for 64-bit MP4 atoms.

    Workaround for the issue #411. TagLib already supports large files on the systems that long is 64-bit. (e.g. GCC on 64-bit Linux, MacOSX etc.) However, MP4::Atom can't handle 64-bit atoms even on such systems.

    This is just a workaround, so I think that we should change MP4::Atom::offset and length to long long or offset_t in taglib2 branch.

    opened by TsudaKageyu 43
  • Saving corrupts some Ogg Vorbis files

    Saving corrupts some Ogg Vorbis files

    Using this code (from @jacobvosmaer) and these Ogg Vorbis files (from @nguillaumin):

    #include <iostream>
    #include <taglib/fileref.h>
    
    int main(int argc, char **argv) {
      if (argc != 2) {
        std::cout << "usage: " << argv[0] << " file.ogg" << std::endl;
        exit(1);
      }
    
      const char *filename = argv[1];
    
      TagLib::FileRef file(filename);
    
      std::cerr << "saving " << filename << " with taglib." << std::endl;
    
      if (!file.save()) {
        std::cerr << "file save failed" << std::endl;
        exit(1);
      }
    }
    

    The saved Ogg Vorbis files can't be decoded any program I've tried.

    opened by jangler 26
  • Compiled TagLib framework for OS X fails at codesign

    Compiled TagLib framework for OS X fails at codesign

    I created a framework from the v1.9.1 source code with the following cmake:

    cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_FRAMEWORK=ON -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/c++ -DCMAKE_OSX_SYSROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.10 -DCMAKE_OSX_ARCHITECTURES="x86_64"

    I then drag-and-dropped the tag.framework file (folder) from /Library/Frameworks/ into my Xcode 7.0 project, ticked the "Copy files if needed" checkbox and checked that the file was indeed present in my project folder. I then added the framework to the "Embedded Binaries", which automatically also adds it to "Linked Frameworks and Libraries". I checked that the framework was present in the Build Phases under the "Link binary with libraries" and "Embed frameworks" sections.

    I can link to the header files with no error from Xcode (i.e. #include <tag/mpegfile.h>) but when I try to compile, I get an error: Command /usr/bin/codesign failed with exit code 1

    The compiler gives the following additional info: /Users/valentin/Library/Developer/Xcode/DerivedData/Squeed-gsytetlenuelapbdgypechfnxbht/Build/Products/Debug/Squeed.app/Contents/Frameworks/tag.framework/Versions/A: No such file or directory

    I went and looked in the framework and, indeed, there is no "A" folder in the Versions, but a "1.14.0" folder.. Why is the compiler trying to look at a version that's not there?

    Thanks !

    opened by beeb 25
  • support for mod, s3m, it and xm tags

    support for mod, s3m, it and xm tags

    This patch adds support for mod, s3m, it and xm files.

    These files actually only have a title tag, but the names of the samples are commonly (always) abused as a multiline comment so I parse them into the comment tag. I also provide a trackerName tag which is only really available for xm. For the other formats I derive this tag from the file format. For s3m it is always "ScreamTracker III", for it it is "Impulse Tracker". For mod it is "ProTracker", "StarTrekker", "Atari Oktalyzer", "TakeTracker" or "NoiseTracker", depending on the modId.

    I support writing of the title and comment tags and for xm files also the trackerName tag. But note that all these fields are limited in size (the limit depends on the file format). For it files the comment tag does not just consist of the instrument and sample names but also of the special message tag it supports. This would actually be the right place to store a comment, but no one seem to do that. Instead the instrument and sample names are abused as with the other formats. Because I do not completely rewrite the files but only overwrite the tags in place the length of characters I can put in this tag is limited by the already existing length. If no message tag (or a zero length message tag) exists, then I append the message at the end of the file. In this case the message can be the maximum of 8000 characters (including the termination NUL character) that is supported by Impulse Tracker 1.04+.

    I also parse some other properties of these files, but the standard bitrate and sampleRate properties are not supported, because they simply do not apply for this file formats. Also I do not support the length property, because the only way to find out how long the songs are is to dummy-interpret them (which common players actually do, but I don't think replicating that functionality here is a good idea).

    Also note that the readProperties parameter is ignored, because the tags and properties are so intertwined that I have to read both anyway. Should I remove the readProperties parameter from the constructors?

    opened by panzi 25
  • ID3v1 tags being returned nul character padded

    ID3v1 tags being returned nul character padded

    Noticed a change in Taglib 1.10 from 1.9 in the way ID3v1 tags are returned and wondering if this is deliberate or a side-effect, and either way is it desireable? I have not been able to test 1.11 yet to see what happens there.

    In 1.9 accessing ID3v1 tags using to8Bit returned a standard nul terminated string the size of the actual text as happens for ID3v2, but in 1.10 this string is always padded with nul characters to a fixed size. This means that using size() or empty() on the returned string is meaningless. Generally the trailing nul padding is not too much an issue, but it makes it harder to detect an empty tag. The wiki says that this should return nul, but for ID3v1 it is returning a string of nul characters instead.

    If 1.10 behaviour is to be kept, then it would be good to highlight this change in the release notes.

    opened by DaveTBlake 23
  • TagLib - Segfault when fetching tag.

    TagLib - Segfault when fetching tag.

    I'm using TagLib to get tags from audio files for my application that I'm making using wxWidgets. I have set it up to fetch multiple tags like artist, title, album and all, some files load fine, but some when loaded crashes my application and gives error saying,

    ./build.sh: line 12:  5891 Segmentation fault      ./SampleBrowser
    

    I tried running with GDB,

    Thread 1 "SampleBrowser" received signal SIGSEGV, Segmentation fault.
    Browser::AddSamples (this=0x555555a73e00, file=...) at ../src/Browser.cpp:248
    248         std::string Artist = File.tag()->artist().to8Bit(true);
    (gdb)
    

    Here is the function that is responsible for fetching tags,

    void Browser::AddSamples(wxString file)
    {
        TagLib::FileRef f (static_cast<const char*>(file), true, TagLib::AudioProperties::ReadStyle::Average);
    
        if (!f.isNull() && f.tag() && f.audioProperties())
        {
            TagLib::Tag* tag = f.tag();
            TagLib::AudioProperties* properties = f.audioProperties();
    
            TagLib::String Artist = tag->artist();
            TagLib::String Album = tag->album();
            TagLib::String Genre = tag->genre();
            TagLib::String Title = tag->title();
            TagLib::String Comment = tag->comment();
    
            int seconds = properties->length() % 60;
            int minutes = (properties->length() - seconds) / 60;
    
            int Bitrate = properties->bitrate();
            int Channels = properties->channels();
            int Length = properties->lengthInMilliseconds();
            int LengthSec = properties->lengthInSeconds();
            int SampleRate = properties->sampleRate();
    
            wxString Path = file;
            wxString Filename = file.AfterLast('/').BeforeLast('.');
    
            Data.clear();
            Data.push_back(false);
            Data.push_back(Filename);
            Data.push_back(wxString::FromUTF8(Artist.toCString(true)));
            Data.push_back(wxString::Format("%d", Channels));
            Data.push_back(wxString::Format("%d", Length));
            Data.push_back(wxString::Format("%d", SampleRate));
            Data.push_back(wxString::Format("%d", Bitrate));
            Data.push_back(wxString::FromUTF8(Comment.toCString(true)));
    
            SampleListView->AppendItem(Data);
    
            db.InsertSample(0, Filename.ToStdString(), Artist.to8Bit(true),
                            Channels, Length, SampleRate, Bitrate,
                            Comment.to8Bit(true), Path.ToStdString());
        }
        else
        {
            for (int i = 0; i < f.isNull(); i++)
            {
                const wxString& msg = wxString::Format("Error! Cannot open file %s", f.file()->name());
                wxMessageDialog *msgDialog = new wxMessageDialog(NULL, msg, "Error", wxOK | wxICON_ERROR);
                msgDialog->ShowModal();
            }
        }
    }
    

    I have this AddSamples(), that I call inside 2 other functions, as I have different ways of adding files to my application, via drag and drop and by file browser inside the application, both of which uses this AddSamples() to get tags and insert them in the wxDataViewListCtrl and SQLite3 database. file here is the parameter passed in the function, which is of wxString type. I am able to successfully add files to the application using AddSamples(), but say there are 5 files in a directory, 3 will add fine, but other 2 crashes the application and causes segmentation fault.

    Peek 2021-02-06 04-46 As you can see, there are 30 files in the directory, Kick 001 and Kick 006 fails to add to the application. I tried opening those 2 files in a audio player, it plays fine, file is not corrupt. Also say user drags and drops 1000+ files at once, a lot of files are going to fail to be added this way.

    opened by apoorv569 22
  • the c function taglib_set_strings_unicode

    the c function taglib_set_strings_unicode

    taglib_set_strings_unicode will make taglib output in only one encoding(unicode or Latin1), if the original id3 information is like GBK charset, then the output encoding is incorrect. how to make the c api output the original characters?

    wishlist 
    opened by goog 22
  • Add DSF and DSDIFF file types management

    Add DSF and DSDIFF file types management

    This adds the management of tags for the DSD audio files types: DSF and DSDIFF

    • DSF: backport from the work done by sbooth on the taglib2 branch, ID3v2 tags as per the DSF standard
    • DSDIFF: manages 'DIIN' chunk (Edited Master Information chunk, for title and artist) as per the DSDIFF 1.5 standard, and adds management of an 'ID3 ' (ID3v2) chunk as found in popular softwares understanding DSDIFF that store it at either the root level, or for some as a child of the 'PROP' chunk
    opened by damien78 20
  • Support the audio length in milliseconds

    Support the audio length in milliseconds

    This patch enables TagLib to return the length of audio in milliseconds in addition to seconds.

    As suggested in #503, it adds an abstract function like this to AudioProperties and its derived classes.

        /*!
         * Returns the length of the file in milliseconds.
         */
        virtual int lengthInMilliseconds() const = 0;
    

    This also enables to calculate the actual average bitrate of Vorbis/Speex files and removes some useless data members from AudioProperties related classes.

    opened by TsudaKageyu 20
  • MPEG::File::save() ignores tag()->header()->setMajorVersion()

    MPEG::File::save() ignores tag()->header()->setMajorVersion()

    Save tags in latest available version realy not good idea. For example windows media player and windows explorer can't read ID3v2.4 tags.

    Fixed realy strange behavior.

    TagLib::MPEG::FileRef fref(filename); // .mp3 file without any tags TagLib::MPEG::File* file = fref.file(); TagLib::ID3v2::Tag *tag = file->ID3v2Tag(); ASSERT(tag); tag->header()->setMajorVersion(3); // !!! // set other tag fields fref.save();

    Got ID3v2.4 tags in file.

    PS. Also added constructor MP4::Tag::Tag()

    opened by asergunov 20
  • taglib 1.10 segfaulting on: ParseID3v2Tag(TagLib::ID3v2::Tag*, MUSIC_INFO::EmbeddedArt...

    taglib 1.10 segfaulting on: ParseID3v2Tag(TagLib::ID3v2::Tag*, MUSIC_INFO::EmbeddedArt...

    Hello, I have taglib 1.10 on Arch linux and due to this library the complete Kodi is constantly crashing.

    Important lines from gdb stacktrace:

    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib/libthread_db.so.1".
    Core was generated by `/usr/lib/kodi/kodi.bin --standalone'.
    Program terminated with signal SIGSEGV, Segmentation fault.
    #0  0x0000000000c842c2 in CTagLoaderTagLib::ParseID3v2Tag(TagLib::ID3v2::Tag*, MUSIC_INFO::EmbeddedArt*, MUSIC_INFO::CMusicInfoTag&) ()
    [Current thread is 1 (Thread 0x7eff91f64700 (LWP 24064))]
    

    Full crashlog is here: http://pastebin.com/iiQ8eSae

    Folks from Kodi user forums suggested to downgrade to the taglib 1.9.1 which is not crashing. Here: http://forum.kodi.tv/showthread.php?tid=254289&pid=2200524

    Will be this problem fixed in the near future? Do you need details or the given MP3 file (on which taglib is segfaulting)?

    Thanks very much

    opened by petr-fischer 18
  • TagLib on AWS lambda

    TagLib on AWS lambda

    Hello. I'm trying to use taglib on AWS Lambda and almost everything is ok, text data is being updated correctly, but picture adding doesn't work. Does the taglib need some extra dependencies?

    Installed version is 1.12 https://www.linuxfromscratch.org/blfs/view/svn/multimedia/taglib.html

    help 
    opened by oleksiivykhor 1
  • TagLib corrupting memory/stack with some files

    TagLib corrupting memory/stack with some files

    I can't really pin point what taglib is doing, but whenever I try to read any of the attached files memory gets corrupted and the application eventually SEGFAULTs. The only thing I manage to see with valgrind was an ilegal read on the string comparator, but I couldn't find out why. Here's valgrind output Screenshot_20220324_213712

    These are the test files that generate the error: test.tar.gz

    opened by pyaggi 19
  • Improve FrameFactory subclassing merge

    Improve FrameFactory subclassing merge

    This PR changes the ID3v2-FrameFactory so it is possible to subclass it for implementing own frames. Additionally it splits up the createFrame() method to make its usage in subclasses a bit more easy.

    As this is a binary-incompatible change I do not expect you to take this PR in consideration until next major release.

    taglib2 
    opened by Max-F-Helm 4
  • Artist support for XM/IT formats (OpenMPT extensions)

    Artist support for XM/IT formats (OpenMPT extensions)

    OpenMPT, a popular Windows module tracker has support for storing artist information in FastTracker II (.xm) and Impulse Tracker (.it) modules through extension chunks. It would be awesome if TagLib could extract this metadata.

    File format reference: https://wiki.openmpt.org/Development:_OpenMPT_Format_Extensions

    Example files: openmpt-artist-examples.tar.gz

    wishlist 
    opened by xTibor 1
  • TagLib::FileRef and  MPEG::File very slow destructor

    TagLib::FileRef and MPEG::File very slow destructor

    I'm using taglib for a media player Is very fast to get mp3 tags and embedded pixmaps, but destructor is very slow: in Ryzen 3900X /linux: parse time arround 1-25ms per mp3 destructor is arround 100ms !!!

    watcher->setFuture(QtConcurrent::run([filename](){
    QStringList ret;
            QElapsedTimer timer;
            timer.start();
            qDebug() << "-- TAG (CHECK) --"<<filename ;
            {
                TagLib::FileRef f(filename.toStdString().c_str(),true,TagLib::AudioProperties::Fast);
                if(!f.isNull() && f.tag()) {
                    TagLib::Tag *tag = f.tag();
                    ret.push_back(QString::fromUtf8(tag->artist().toCString(true)));
                    ret.push_back(QString::fromUtf8((tag->title().toCString(true))));
                    ret.push_back(QString::fromUtf8((tag->album().toCString(true))));
                }
                 if(!f.isNull() && f.audioProperties()) {
                    TagLib::AudioProperties *properties = f.audioProperties();
                    ret.push_back(QString::number(properties->length()*1000));
                }
                qDebug() << "----> parse interval"<<timer.elapsed()<<"ms";
                timer.start();
            **}  //TagLib::FileRef  DESTRUCTIOR**
            qDebug() << "----> destructor interval "<<timer.elapsed()<<"ms";
            ...
    

    ----> parse interval 15 ms ----> parse interval 21 ms ----> parse interval 24 ms ----> parse interval 25 ms ----> parse interval 35 ms ----> parse interval 34 ms ----> parse interval 40 ms ----> destructor interval 105 ms ----> destructor interval 109 ms ----> destructor interval 106 ms ----> destructor interval 107 ms ----> destructor interval 102 ms ----> destructor interval 106 ms

    any idea?

    opened by mapons 4
Releases(v1.13)
  • v1.13(Oct 27, 2022)

    • Added interface StreamTypeResolver to support streams which cannot be fopen()'ed, e.g. network files.
    • Added MP4::File::strip() to remove meta atom from MP4 file.
    • Added Map::value() to look up without creating entry.
    • Use property "WORK" instead of "CONTENTGROUP" for ID3v2 "TIT1" frame, use property "WORK" for ASF "WM/ContentGroupDescription", use property "COMPILATION" for ID3v2 "TCMP" frame.
    • Build system improvements: option WITH_ZLIB, BUILD_TESTING instead of BUILD_TESTS, GNUInstallDirs, FeatureSummary, tests with BUILD_SHARED_LIBS, cross compilation with Buildroot, systems without HAVE_GCC_ATOMIC, Clang.
    • Fixed heap-buffer-overflows when handling ASF, APE, FLAC, ID3v2, MP4, MPC tags.
    • Fixed detection of invalid file by extension when correct type can be detected by contents.
    • Fixed unnecessary creation of map entries in APE and FLAC tags if looked up tag does not exist.
    • Fixed parsing of MP4 non-full meta atoms.
    • Fixed potential ID3v1 false positive in the presence of an APE tag.
    • Fixed ID3v2 version handling for frames embedded in CHAP or CTOC frames.
    • Fixed parsing of multiple strings with a single BOM in ID3v2.4.0.
    • Fixed several smaller issues reported by clang-tidy.
    Source code(tar.gz)
    Source code(zip)
    taglib-1.13.tar.gz(1.30 MB)
  • v1.12(Feb 16, 2021)

    • Added support for WinRT.
    • Added support for Linux on POWER.
    • Added support for classical music tags of iTunes 12.5.
    • Added support for file descriptor to FileStream.
    • Added support for 'cmID', 'purl', 'egid' MP4 atoms.
    • Added support for 'GRP1' ID3v2 frame.
    • Added support for extensible WAV subformat.
    • Enabled FileRef to detect file types based on the stream content.
    • Dropped support for Windows 9x and NT 4.0 or older.
    • Check for mandatory header objects in ASF files.
    • More tolerant handling of RIFF padding, WAV files, broken MPEG streams.
    • Improved calculation of Ogg, Opus, Speex, WAV, MP4 bitrates.
    • Improved Windows compatibility by storing FLAC picture after comments.
    • Fixed numerical genres in ID3v2.3.0 'TCON' frames.
    • Fixed consistency of API removing MP4 items when empty values are set.
    • Fixed consistency of API preferring COMM frames with no description.
    • Fixed OOB read on invalid Ogg FLAC files (CVE-2018-11439).
    • Fixed handling of empty MPEG files.
    • Fixed parsing MP4 mdhd timescale.
    • Fixed reading MP4 atoms with zero length.
    • Fixed reading FLAC files with zero-sized seektables.
    • Fixed handling of lowercase field names in Vorbis Comments.
    • Fixed handling of 'rate' atoms in MP4 files.
    • Fixed handling of invalid UTF-8 sequences.
    • Fixed possible file corruptions when saving Ogg files.
    • Fixed handling of non-audio blocks, sampling rates, DSD audio in WavPack files.
    • TableOfContentsFrame::toString() improved.
    • UserTextIdentificationFrame::toString() improved.
    • Marked FileRef::create() deprecated.
    • Marked MPEG::File::save() with boolean parameters deprecated, provide overloads with enum parameters.
    • Several smaller bug fixes and performance improvements.
    Source code(tar.gz)
    Source code(zip)
    taglib-1.12.tar.gz(1.30 MB)
  • v1.11.1(Oct 24, 2016)

  • v1.11(Apr 29, 2016)

    1.11:

    • Fixed reading APE items with long keys.
    • Fixed reading ID3v2 SYLT frames when description is empty.

    1.11 BETA 2:

    • Better handling of PCM WAV files with a 'fact' chunk.
    • Better handling of corrupted APE tags.
    • Efficient decoding of unsynchronized ID3v2 frames.
    • Fixed text encoding when saving certain frames in ID3v2.3 tags.
    • Fixed updating the size of RIFF files when removing chunks.
    • Several smaller bug fixes and performance improvements.

    1.11 BETA:

    • New API for creating FileRef from IOStream.
    • Added support for ID3v2 PCST and WFED frames.
    • Added support for pictures in XiphComment.
    • Added String::clear().
    • Added FLAC::File::strip() for removing non-standard tags.
    • Added alternative functions to XiphComment::removeField().
    • Added BUILD_BINDINGS build option.
    • Added ENABLE_CCACHE build option.
    • Replaced ENABLE_STATIC build option with BUILD_SHARED_LIBS.
    • Better handling of duplicate ID3v2 tags in all kinds of files.
    • Better handling of duplicate tag chunks in WAV files.
    • Better handling of duplicate tag chunks in AIFF files.
    • Better handling of duplicate Vorbis comment blocks in FLAC files.
    • Better handling of broken MPEG audio frames.
    • Fixed crash when calling File::properties() after strip().
    • Fixed crash when parsing certain MPEG files.
    • Fixed crash when saving Ogg files.
    • Fixed possible file corruptions when saving ASF files.
    • Fixed possible file corruptions when saving FLAC files.
    • Fixed possible file corruptions when saving MP4 files.
    • Fixed possible file corruptions when saving MPEG files.
    • Fixed possible file corruptions when saving APE files.
    • Fixed possible file corruptions when saving Musepack files.
    • Fixed possible file corruptions when saving WavPack files.
    • Fixed updating the comment field of Vorbis comments.
    • Fixed reading date and time in ID3v2.3 tags.
    • Marked ByteVector::null and ByteVector::isNull() deprecated.
    • Marked String::null and String::isNull() deprecated.
    • Marked XiphComment::removeField() deprecated.
    • Marked Ogg::Page::getCopyWithNewPageSequenceNumber() deprecated. It returns null.
    • Marked custom integer types deprecated.
    • Many smaller bug fixes and performance improvements.
    Source code(tar.gz)
    Source code(zip)
    taglib-1.11.tar.gz(1.20 MB)
  • v1.10(Dec 4, 2015)

    • New API for the audio length in milliseconds.
    • Added support for ID3v2 ETCO and SYLT frames.
    • Added support for album artist in PropertyMap API of MP4 files.
    • Added support for embedded frames in ID3v2 CHAP and CTOC frames.
    • Added support for AIFF-C files.
    • Better handling of duplicate ID3v2 tags in MPEG files.
    • Allowed generating taglib.pc on Windows.
    • Added ZLIB_SOURCE build option.
    • Fixed backwards-incompatible change in TagLib::String when constructing UTF16 strings.
    • Fixed crash when parsing certain FLAC files.
    • Fixed crash when encoding empty strings.
    • Fixed saving of certain XM files on OS X.
    • Changed Xiph and APE generic getters to return space-concatenated values.
    • Fixed possible file corruptions when removing tags from WAV files.
    • Added support for MP4 files with 64-bit atoms in certain 64-bit environments.
    • Prevented ID3v2 padding from being too large.
    • Fixed crash when parsing corrupted APE files.
    • Fixed crash when parsing corrupted WAV files.
    • Fixed crash when parsing corrupted Ogg FLAC files.
    • Fixed crash when parsing corrupted MPEG files.
    • Fixed saving empty tags in WAV files.
    • Fixed crash when parsing corrupted Musepack files.
    • Fixed possible memory leaks when parsing AIFF and WAV files.
    • Fixed crash when parsing corrupted MP4 files.
    • Stopped writing empty ID3v2 frames.
    • Fixed possible file corruptions when saving WMA files.
    • Added TagLib::MP4::Tag::isEmpty().
    • Added accessors to manipulate MP4 tags.
    • Fixed crash when parsing corrupted WavPack files.
    • Fixed seeking MPEG frames.
    • Fixed reading FLAC files with zero-sized padding blocks.
    • Added support for reading the encoder information of WMA files.
    • Added support for reading the codec of WAV files.
    • Added support for multi channel WavPack files.
    • Added support for reading the nominal bitrate of Ogg Speex files.
    • Added support for VBR headers in MPEG files.
    • Added new options to the tagwriter example.
    • Marked FLAC::File::streamInfoData() deprecated. It returns an empty ByteVector.
    • Marked FLAC::File::streamLength() deprecated. It returns zero.
    • Fixed possible file corruptions when adding an ID3v1 tag to FLAC files.
    • Fixed self-assignment operator in some types.
    • Fixed extraction of MP4 tag keys with an empty list.
    • Many smaller bug fixes and performance improvements.
    Source code(tar.gz)
    Source code(zip)
    taglib-1.10.tar.gz(1.17 MB)
  • v1.9.1(Oct 8, 2013)

    • Fixed binary incompatible change in TagLib::Map and TagLib::List.
    • Fixed constructing TagLib::String from TagLib::ByteVector.
    • Fixed compilation on MSVC with the /Zc:wchar_t- option.
    • Fixed detecting of RIFF files with invalid chunk sizes.
    • Added TagLib::MP4::PropertyMap::codec().
    Source code(tar.gz)
    Source code(zip)
    taglib-1.9.1.tar.gz(638.74 KB)
  • v1.9(Oct 6, 2013)

    Changes in this release:

    • Added support for the Ogg Opus file format.
    • Added support for INFO tags in WAV files.
    • Changed FileStream to use Windows file API.
    • Included taglib-config.cmd script for Windows.
    • New ID3v1::Tag methods for working directly with genre numbers.
    • New MPEG::File methods for checking which tags are saved in the file.
    • Added support for the PropertyMap API to ASF and MP4 files.
    • Added MusicBrainz identifiers to the PropertyMap API.
    • Allowed reading of MP4 cover art without an explicitly specified format.
    • Better parsing of corrupted FLAC files.
    • Fixed saving of PropertyMap comments without description into ID3v2 tags.
    • Fixed crash when parsing certain XM files.
    • Fixed compilation of unit test with clang.
    • Better handling of files that can't be open or have read-only permissions.
    • Improved atomic reference counting.
    • New hookable API for debug messages.
    • More complete Windows install instructions.
    • Many smaller bug fixes and performance improvements.
    Source code(tar.gz)
    Source code(zip)
    taglib-1.9.tar.gz(638.03 KB)
a library for audio and music analysis

aubio aubio is a library to label music and sounds. It listens to audio signals and attempts to detect events. For instance, when a drum is hit, at wh

aubio 2.9k Jan 1, 2023
Simple and Fast Multimedia Library

SFML — Simple and Fast Multimedia Library SFML is a simple, fast, cross-platform and object-oriented multimedia API. It provides access to windowing,

Simple and Fast Multimedia Library 8.3k Jan 8, 2023
Minimalistic MP3 decoder single header library

minimp3 Minimalistic, single-header library for decoding MP3. minimp3 is designed to be small, fast (with SSE and NEON support), and accurate (ISO con

Lion 1.2k Jan 4, 2023
PML is a simple, lightweight, easy to use multimedia library written in C.

PML is a simple, lightweight, easy to use multimedia library written in C. PML also works natively with C++, and bindings can be used/made to the native C code for other languages.

Fossbay 12 May 6, 2021
Meta programming utilities for C++14. Merged in matt-42/lithium

Important Note This project has been refactored and renamed as the Lithium Libraries: https://github.com/matt-42/lithium The IOD Library The IOD libra

Matthieu Garrigues 724 Dec 22, 2022
Armazena a tabela nutricional dos alimentos em um banco de dados (SQLITE), salva as quantidades em um arquivo EXCEL, informando se a meta diária foi batida.

QT-Controle-de-Dieta Armazena a tabela nutricional dos alimentos em um banco de dados (SQLITE), salva as quantidades em um arquivo EXCEL, informando s

null 1 Oct 26, 2021
Meta - static reflection tools for c++. i mostly use this with entt.

meta Static reflection tools for C++. I use it with EnTT but it can work with anything. The main features the library provides are: Registering types

Nikhilesh S 9 Jul 12, 2022
Metamath - Meta mathematics. Symbolic functions and derivatives.

metamath Meta mathematic metamath is a tiny header-only library. It can be used for symbolic computations on single-variable functions, such as dynami

eg 31 Nov 4, 2022
PortAudio is a portable audio I/O library designed for cross-platform support of audio

PortAudio is a cross-platform, open-source C language library for real-time audio input and output.

PortAudio 786 Jan 1, 2023
Background Music, a macOS audio utility: automatically pause your music, set individual apps' volumes and record system audio.

Background Music macOS audio utility Overview Auto-pause music Application volume Recording system audio Download Build and Install Uninstall Troubles

Kyle Neideck 12.8k Jan 2, 2023
A C library for reading and writing sound files containing sampled audio data.

libsndfile libsndfile is a C library for reading and writing files containing sampled audio data. Authors The libsndfile project was originally develo

null 1.1k Jan 2, 2023
This is a tool for software engineers to view,record and analyse data(sensor data and module data) In the process of software development.

![Contributors][Huang Jianyu] Statement 由于工具源码在网上公开,除使用部分开源项目代码外,其余代码均来自我个人,工具本身不包含公司的知识产权,所有与公司有关的内容均从软件包中移除,软件发布遵循Apache协议,任何人均可下载进行修改使用,如使用过程中出现任何问

HuangJianyu 36 Dec 25, 2022
BerylDB is a data structure data manager that can be used to store data as key-value entries.

BerylDB is a data structure data manager that can be used to store data as key-value entries. The server allows channel subscription and is optimized to be used as a cache repository. Supported structures include lists, sets, and keys.

BerylDB 203 Dec 16, 2022
Convenient unified display of the most relevant technical and tag data for video and audio files.

MediaInfoLib README MediaInfo(Lib) is a convenient unified display of the most relevant technical and tag data for video and audio files. MediaInfoLib

MediaArea 495 Jan 6, 2023
Integrate PhysFS with raylib, allowing to load images, audio and fonts from data archives.

raylib-physfs Integrate the virtual file system PhysicsFS with raylib, allowing to load images, audio, and fonts from data archives. Features Load the

Rob Loach 21 Dec 3, 2022
An improved plot widget for Dear ImGui, aimed at displaying audio data

imgui-plot An improved plot widget for Dear ImGui, aimed at displaying audio data TOC Screenshots Rationale Usage Installation FAQ Screenshots Display

Anton Lobashev 399 Jan 3, 2023
Samir Teymurov 1 Oct 6, 2021
Warp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths.

WDT Warp speed Data Transfer Design philosophy/Overview Goal: Lowest possible total transfer time - to be only hardware limited (disc or network bandw

Facebook 2.7k Dec 31, 2022