sigrid/libtags

Description
libtags
=======

A cross-platform library for reading tags, designed for highly constrained environments.

Comparison to id3lib and taglib:

|                | libtags         | id3lib           | taglib           |
|:---------------|:----------------|:-----------------|:-----------------|
| ID3v2.4        | yes             | no               | yes              |
| Ogg/Vorbis     | yes             | no               | yes              |
| FLAC           | yes             | no               | yes              |
| m4a            | yes             | no               | yes              |
| opus           | yes             | no               | yes              |
| WAV            | yes             | no               | yes              |
| IT             | yes             | no               | ???              |
| XM             | yes             | no               | ???              |
| replay gain    | yes             | no               | ???              |
| size           | tiny            | bloated          | more bloated     |
| license        | MIT             | LGPL             | LGPL/MPL         |
| written in     | C               | C++              | C++              |
| memory         | no allocations  | allocates memory | allocates memory |
| thread safe    | yes             | ???              | ???              |
| speed          | ultra-fast      | slow             | fast             |
| tag writing    | no, not a goal  | yes              | yes              |
| Plan 9 support | yes, native     | no               | no               |

CPU time (784 files: mp3, ogg, flac):

|                | libtags          | taglib           |
|:---------------|:-----------------|:-----------------|
| files cached   | real    0m0.027s | real    0m0.155s |
|                | user    0m0.014s | user    0m0.102s |
|                | sys     0m0.012s | sys     0m0.053s |
|                |                  |                  |
| cache dropped  | real    0m1.158s | real    0m1.628s |
|                | user    0m0.024s | user    0m0.211s |
|                | sys     0m0.132s | sys     0m0.187s |

## Usage

Just compile it to an archive (`.a`) and link to your program. Use it in your code
by including `tags.h`, that's the API. Documentation is in the header.

See `examples/readtags.c`. You can compile it on Linux like so: `gcc examples/readtags.c *.c -I. -o readtags`.
Last 5 commits (shortlog)
Date Author Short message Commit hash
2021-03-02 Sigrid add a very simple XM parser 5f03152c619d5b15ffb100fc325ff8046593d606
2021-02-11 Michael [PATCH libtags] flac: handle vorbis comments with no fields a2dc55b11af2a516fef397f8af0f49d041b932f0
2020-12-24 Sigrid fix another non-interruptable temporary 7532a6a2fe10b954163cb82f2151222226e4a5b3
2020-12-09 Sigrid add very basic IT support 5287e980106078295287e6485d624c48fe225cec
2020-11-02 Sigrid make sure beuint/leuint work correctly with d of any type cb906b7f354c006a9f26d08bcf9de36678c5a47b
Files (browse)
.gitignore
8859.c
LICENSE
README.md
examples/
flac.c
id3genres.c
id3v1.c
id3v2.c
it.c
m4a.c
mkfile
opus.c
tags.c
tags.h
tagspriv.h
utf16.c
vorbis.c
wav.c
xm.c