function [tag, message] = read_id3v1(in_file);
%READ_ID3V1 A Function That Will Read In The ID3
% (version 1 only) Tags From an MP3 File.
%
% Usage:
% [TAG, MESSAGE] = READ_ID3V1(IN_FILE);
%
% INFILE: mp3 file to have its tag read
% TAG: structure containing tags read in. Empty on failure
% MESSAGE: returns status of function call.
%
% Author: Gordon Forbes
% Date: 1 September 2009
if ~exist(in_file,'file')
tag=[];
message='File Not Found';
return
end
finfo=dir(in_file);
fid=fopen(in_file,'rb');
if finfo.bytes>128
fseek(fid,-128,'eof');
buffer=fread(fid,1000,'char');
buffer=buffer';
header=char(buffer(1:3));
if ~strcmp(header,'TAG')
tag=[];
message='No ID3v1 TAG Found!';
return
end
% Song Name
tag.song_name=process_buffer(buffer,4,33);
tag.artist=process_buffer(buffer,34,63);
tag.album_name=process_buffer(buffer,64,93);
tag.year=process_buffer(buffer,94,97);
tag.comment=process_buffer(buffer,98,127);
tag.genre=process_genre(buffer(end));
message='Success';
else
tag=[];
message='No ID3v1 TAG Found - File Too Small!';
end
function result = process_buffer(buffer,the_start,the_end)
% extract specified region from buffer, and remove zero padding at end
result=buffer(the_start:the_end);
for k=1:length(result)
if result(k)==0
result(k:end)=[];
break;
end
end
result=char(result);
function out = process_genre(input)
% convert Genre ID to String
switch input
case 0 , out ='Blues';
case 1 , out ='Classic Rock';
case 2 , out ='Country';
case 3 , out ='Dance';
case 4 , out ='Disco';
case 5 , out ='Funk';
case 6 , out ='Grunge';
case 7 , out ='Hip-Hop';
case 8 , out ='Jazz';
case 9 , out ='Metal';
case 10, out ='New Age';
case 11, out ='Oldies';
case 12, out ='Other';
case 13, out ='Pop';
case 14, out ='R&B';
case 15, out ='Rap';
case 16, out ='Reggae';
case 17, out ='Rock';
case 18, out ='Techno';
case 19, out ='Industrial';
case 20, out ='Alternative';
case 21, out ='Ska';
case 22, out ='Death Metal';
case 23, out ='Pranks';
case 24, out ='Soundtrack';
case 25, out ='Euro-Techno';
case 26, out ='Ambient';
case 27, out ='Trip-Hop';
case 28, out ='Vocal';
case 29, out ='Jazz+Funk';
case 30, out ='Fusion';
case 31, out ='Trance';
case 32, out ='Classical';
case 33, out ='Instrumental';
case 34, out ='Acid';
case 35, out ='House';
case 36, out ='Game';
case 37, out ='Sound Clip';
case 38, out ='Gospel';
case 39, out ='Noise';
case 40, out ='Alternative Rock';
case 41, out ='Bass';
case 42, out ='Soul';
case 43, out ='Punk';
case 44, out ='Space';
case 45, out ='Meditative';
case 46, out ='Instrumental Pop';
case 47, out ='Instrumental Rock';
case 48, out ='Ethnic';
case 49, out ='Gothic';
case 50, out ='Darkwave';
case 51, out ='Techno-Industrial';
case 52, out ='Electronic';
case 53, out ='Pop-Folk';
case 54, out ='Eurodance';
case 55, out ='Dream';
case 56, out ='Southern Rock';
case 57, out ='Comedy';
case 58, out ='Cult';
case 59, out ='Gangsta';
case 60, out ='Top 40';
case 61, out ='Christian Rap';
case 62, out ='Pop/Funk';
case 63, out ='Jungle';
case 64, out ='Native US';
case 65, out ='Cabaret';
case 66, out ='New Wave';
case 67, out ='Psychadelic';
case 68, out ='Rave';
case 69, out ='Showtunes';
case 70, out ='Trailer';
case 71, out ='Lo-Fi';
case 72, out ='Tribal';
case 73, out ='Acid Punk';
case 74, out ='Acid Jazz';
case 75, out ='Polka';
case 76, out ='Retro';
case 77, out ='Musical';
case 78, out ='Rock & Roll';
case 79, out ='Hard Rock';
case 80, out ='Folk';
case 81, out ='Folk-Rock';
case 82, out ='National Folk';
case 83, out ='Swing';
case 84, out ='Fast Fusion';
case 85, out ='Bebob';
case 86, out ='Latin';
case 87, out ='Revival';
case 88, out ='Celtic';
case 89, out ='Bluegrass';
case 90, out ='Avantgarde';
case 91, out ='Gothic Rock';
case 92, out ='Progressive Rock';
case 93, out ='Psychedelic Rock';
case 94, out ='Symphonic Rock';
case 95, out ='Slow Rock';
case 96, out ='Big Band';
case 97, out ='Chorus';
case 98, out ='Easy Listening';
case 99, out ='Acoustic';
case 100, out ='Humour';
case 101, out ='Speech';
case 102, out ='Chanson';
case 103, out ='Opera';
case 104, out ='Chamber Music';
case 105, out ='Sonata';
case 106, out ='Symphony';
case 107, out ='Booty Bass';
case 108, out ='Primus';
case 109, out ='Porn Groove';
case 110, out ='Satire';
case 111, out ='Slow Jam';
case 112, out ='Club';
case 113, out ='Tango';
case 114, out ='Samba';
case 115, out ='Folklore';
case 116, out ='Ballad';
case 117, out ='Power Ballad';
case 118, out ='Rhythmic Soul';
case 119, out ='Freestyle';
case 120, out ='Duet';
case 121, out ='Punk Rock';
case 122, out ='Drum Solo';
case 123, out ='Acapella';
case 124, out ='Euro-House';
case 125, out ='Dance Hall';
case 126, out ='Goa';
case 127, out ='Drum & Bass';
case 128, out ='Club/House';
case 129, out ='Hardcore';
case 130, out ='Terror';
case 131, out ='Indie';
case 132, out ='BritPop';
case 133, out ='Negerpunk';
case 134, out ='Polsk Punk';
case 135, out ='Beat';
case 136, out ='Christian Gangsta Rap';
case 137, out ='Heavy Metal';
case 138, out ='Black Metal';
case 139, out ='Crossover';
case 140, out ='Contemporary Christian';
case 141, out ='Christian Rock';
case 142, out ='Merengue';
case 143, out ='Salsa';
case 144, out ='Thrash Metal';
case 145, out ='Anime';
case 146, out ='JPop';
case 147, out ='Synthpop';
otherwise out ='Unknown';
end