Code covered by the BSD License  

Highlights from
MP3 Tag Reader (ID3 version 1.0 only)

from MP3 Tag Reader (ID3 version 1.0 only) by Gordon
Reads in the ID3v1 tags from an MP3 file

read_id3v1(in_file);
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

Contact us at files@mathworks.com