blob: 23f2b86164309276376476f590cd7aff8da9128e [file] [log] [blame]
/*
* functions for writing ID3 tags in LAME
*
* text functions stolen from mp3info by Ricardo Cerqueira <rmc@rccn.net>
* adapted for LAME by Conrad Sanderson <c.sanderson@me.gu.edu.au>
*
*
*/
#include <stdio.h>
#include <string.h>
#include "id3tag.h"
ID3TAGDATA id3tag;
/*
* If "string" is shorter than "length", pad it with ' ' (spaces)
*/
static void id3_pad(char *string, int length) {
int l; l=strlen(string);
while(l<length) { string[l] = ' '; l++; }
string[l]='\0';
}
/*
* initialize temporary fields
*/
void id3_inittag(ID3TAGDATA *tag) {
strcpy( tag->title, "");
strcpy( tag->artist, "");
strcpy( tag->album, "");
strcpy( tag->year, "");
strcpy( tag->comment, "");
tag->genre[0] = 'ΓΏ'; /* unset genre */
tag->track = 0;
tag->valid = 0; /* not ready for writing*/
}
/*
* build an ID3 tag from temporary fields
*/
void id3_buildtag(ID3TAGDATA *tag) {
strcpy(tag->tagtext,"TAG");
id3_pad( tag->title, 30); strncat( tag->tagtext, tag->title,30);
id3_pad( tag->artist, 30); strncat( tag->tagtext, tag->artist,30);
id3_pad( tag->album, 30); strncat( tag->tagtext, tag->album,30);
id3_pad( tag->year, 4); strncat( tag->tagtext, tag->year,4);
id3_pad( tag->comment, 30); strncat( tag->tagtext, tag->comment,30);
id3_pad( tag->genre, 1); strncat( tag->tagtext, tag->genre,1);
if( tag->track != 0 ) {
tag->tagtext[125] = '\0';
tag->tagtext[126] = tag->track;
}
tag->valid = 1; /* ready for writing*/
}
/*
* write ID3 tag
*/
int id3_writetag(char* filename, ID3TAGDATA *tag) {
FILE* f;
if( ! tag->valid ) return -1;
f=fopen(filename,"rb+"); if(!f) return -1;
fseek(f,0,SEEK_END); fwrite(tag->tagtext,1,128,f);
fclose(f); return 0;
}
int genre_last=147;
char *genre_list[]={
"Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk",
"Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies",
"Other", "Pop", "R&B", "Rap", "Reggae", "Rock",
"Techno", "Industrial", "Alternative", "Ska", "Death Metal", "Pranks",
"Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk",
"Fusion", "Trance", "Classical", "Instrumental", "Acid", "House",
"Game", "Sound Clip", "Gospel", "Noise", "AlternRock", "Bass",
"Soul", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock",
"Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk",
"Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta",
"Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret",
"New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi",
"Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical",
"Rock & Roll", "Hard Rock", "Folk", "Folk/Rock", "National Folk", "Swing",
"Fast-Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde",
"Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band",
"Chorus", "Easy Listening", "Acoustic", "Humour", "Speech", "Chanson",
"Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus",
"Porn Groove", "Satire", "Slow Jam", "Club", "Tango", "Samba",
"Folklore", "Ballad", "Power Ballad", "Rhythmic Soul", "Freestyle", "Duet",
"Punk Rock", "Drum Solo", "A capella", "Euro-House", "Dance Hall",
"Goa", "Drum & Bass", "Club House", "Hardcore", "Terror",
"Indie", "BritPop", "NegerPunk", "Polsk Punk", "Beat",
"Christian Gangsta", "Heavy Metal", "Black Metal", "Crossover", "Contemporary C",
"Christian Rock", "Merengue", "Salsa", "Thrash Metal", "Anime", "JPop",
"SynthPop",
};