155 lines · 3.7 KB · C
RawDownload
#pragma once #ifdef __cplusplusextern "C" {#endif typedef union Tag Tag;typedef struct Tagctx Tagctx;typedef int (*Tagdecode)(void *buf, int *cnt); /* Tag type. */enum {	Tunknown = -1,	Tartist,	Talbum,	Ttitle,	Tdate, /* "2014", "2015/02/01", but the year goes first */	Ttrack, /* "1", "01", "1/4", but the track number goes first */	Talbumgain, /* see GAIN note */	Talbumpeak,	Ttrackgain, /* see GAIN note */	Ttrackpeak,	Tgenre,	Timage,	Tcomposer,	Tcomment,	Talbumartist,}; /* GAIN note: * * Even though the gain value may be expected to look as "52 dB", it * very well may be a plain integer (such as "12032") for R128_* tags. * To do things correctly you will have to check 'const char *k' argument * passed into your callback and parse it accordingly. * * FIXME the output gain (opus) is not parsed, btw. */ /* Format of the audio file. */enum {	Funknown = -1,	Fmp3,	Fvorbis,	Fflac,	Fm4a,	Fopus,	Fwav,	Fit,	Fxm,	Fs3m,	Fmod, 	Fmax,	Fogg __attribute__((deprecated("use Fvorbis instead"))) = Fvorbis,}; /* Image types, according to id3v2. */enum {	ITother,	IT32x32_file_icon,	ITother_file_icon,	ITcover_front,	ITcover_back,	ITleaflet,	ITmedia,	ITlead,	ITartist,	ITconductor,	ITband,	ITcomposer,	ITlyricist,	ITlocation,	ITrecording,	ITperformance,	ITmovie_capture,	ITfish,	ITillustration,	ITlogo_band,	ITlogo_publisher, 	ITnum,}; /* Tag itself, either text or image, depending on the "type" passed to the tag callback. */union Tag {	/* Any tag type except Timage */	struct {		char *k; /* "TPE1", "replaygain_album_peak" etc */		char *v; /* value */	}text; 	/* Tag type Timage */	struct {		/* If not NULL, reading the image cover requires additional decoding of the data.		 * In that case you will need to read the raw data (specified by "offset" and "size")		 * and call this function on the buffer (tag->decode(offset, &size)).		 * "Size" will be updated with the actual image size after decoding if the function		 * returned 0, else there was an error.		 */		Tagdecode decode;		const char *mime; /* "image/png", "image/jpeg" etc */		int offset; /* offset from the beginning of the file */		int size; /* number of bytes occupied by the raw image data (not decoded) */		int type; /* type of the image (ITcover_front, ...) */	}image;}; /* Tag parser context. You need to set it properly before parsing an audio file using libtags. */struct Tagctx {	/* Read function. This is what libtags uses to read the file. */	int (*read)(Tagctx *ctx, void *buf, int cnt); 	/* Seek function. This is what libtags uses to seek through the file. */	int (*seek)(Tagctx *ctx, int offset, int whence); 	/* Callback that is used by libtags to inform about the tags of a file.	 * "type" is the tag's type (Tartist, ...) or Tunknown if libtags doesn't	 * know how to map a tag kind to any of these.	 * ANY tag type that isn't Timage is considered a text tag.	 */	void (*tag)(Tagctx *ctx, int type, Tag *tag); 	/* Approximate millisecond-to-byte offsets within the file, if available. This callback is optional. */	void (*toc)(Tagctx *ctx, int ms, int offset); 	/* Auxiliary data. Not used by libtags, left for the library user. */	void *aux; 	/* Memory buffer to work in. */	char *buf; 	/* Size of the buffer. Must be at least 256 bytes. */	int bufsz; 	/* Here goes the stuff libtags sets. It should be accessed after tagsget() returns.	 * A value of 0 means it's undefined.	 */	int channels; /* Number of channels. */	int samplerate; /* Hz */	int bitrate; /* Bitrate, bits/s. */	int duration; /* ms */	int format; /* Fmp3, Fvorbis, Fflac, Fm4a etc */ 	/* Private, don't touch. */	int found;	int restart;}; /* Parse the file using this function. Returns 0 on success. */int tagsget(Tagctx *ctx); #ifdef __cplusplus}#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t