mirror of
				https://github.com/taglib/taglib.git
				synced 2025-11-03 16:26:18 -05:00 
			
		
		
		
	This commit was manufactured by cvs2svn to accommodate
a server-side copy/move. git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@288617 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
		
							
								
								
									
										14
									
								
								mpeg/id3v1/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								mpeg/id3v1/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
INCLUDES = \
 | 
			
		||||
	-I$(top_srcdir)/taglib \
 | 
			
		||||
	-I$(top_srcdir)/taglib/toolkit \
 | 
			
		||||
	-I$(top_srcdir)/taglib/mpeg \
 | 
			
		||||
	$(all_includes)
 | 
			
		||||
 | 
			
		||||
noinst_LTLIBRARIES = libid3v1.la
 | 
			
		||||
 | 
			
		||||
libid3v1_la_SOURCES = id3v1tag.cpp id3v1genres.cpp
 | 
			
		||||
 | 
			
		||||
taglib_include_HEADERS = id3v1tag.h id3v1genres.h
 | 
			
		||||
taglib_includedir = $(includedir)/taglib
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = $(libid3v1_la_SOURCES) $(taglib_include_HEADERS)
 | 
			
		||||
							
								
								
									
										215
									
								
								mpeg/id3v1/id3v1genres.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								mpeg/id3v1/id3v1genres.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,215 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
    copyright            : (C) 2002 by Scott Wheeler
 | 
			
		||||
    email                : wheeler@kde.org
 | 
			
		||||
***************************************************************************/
 | 
			
		||||
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
 *   This library is free software; you can redistribute it and/or modify  *
 | 
			
		||||
 *   it  under the terms of the GNU Lesser General Public License version  *
 | 
			
		||||
 *   2.1 as published by the Free Software Foundation.                     *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   This library is distributed in the hope that it will be useful, but   *
 | 
			
		||||
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 | 
			
		||||
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 | 
			
		||||
 *   Lesser General Public License for more details.                       *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   You should have received a copy of the GNU Lesser General Public      *
 | 
			
		||||
 *   License along with this library; if not, write to the Free Software   *
 | 
			
		||||
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
 | 
			
		||||
 *   USA                                                                   *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include "id3v1genres.h"
 | 
			
		||||
 | 
			
		||||
using namespace TagLib;
 | 
			
		||||
 | 
			
		||||
namespace TagLib {
 | 
			
		||||
  namespace ID3v1 {
 | 
			
		||||
 | 
			
		||||
    static const int genresSize = 147;
 | 
			
		||||
    static const String genres[] = {
 | 
			
		||||
      "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",
 | 
			
		||||
      "Alternative Rock",
 | 
			
		||||
      "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",
 | 
			
		||||
      "Fusion",
 | 
			
		||||
      "Bebob",
 | 
			
		||||
      "Latin",
 | 
			
		||||
      "Revival",
 | 
			
		||||
      "Celtic",
 | 
			
		||||
      "Bluegrass",
 | 
			
		||||
      "Avantgarde",
 | 
			
		||||
      "Gothic Rock",
 | 
			
		||||
      "Progressive Rock",
 | 
			
		||||
      "Psychadelic 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 Rap",
 | 
			
		||||
      "Heavy Metal",
 | 
			
		||||
      "Black Metal",
 | 
			
		||||
      "Crossover",
 | 
			
		||||
      "Contemporary Christian",
 | 
			
		||||
      "Christian Rock",
 | 
			
		||||
      "Merengue",
 | 
			
		||||
      "Salsa",
 | 
			
		||||
      "Thrash Metal",
 | 
			
		||||
      "Anime",
 | 
			
		||||
      "Jpop",
 | 
			
		||||
      "Synthpop"
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
StringList ID3v1::genreList()
 | 
			
		||||
{
 | 
			
		||||
  static StringList l;
 | 
			
		||||
  if(l.isEmpty()) {
 | 
			
		||||
    for(int i = 0; i < genresSize; i++)
 | 
			
		||||
      l.append(genres[i]);
 | 
			
		||||
  }
 | 
			
		||||
  return l;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ID3v1::GenreMap ID3v1::genreMap()
 | 
			
		||||
{
 | 
			
		||||
  static GenreMap m;
 | 
			
		||||
  if(m.isEmpty()) {
 | 
			
		||||
    for(int i = 0; i < genresSize; i++)
 | 
			
		||||
      m.insert(genres[i], i);
 | 
			
		||||
  }
 | 
			
		||||
  return m;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String ID3v1::genre(int i)
 | 
			
		||||
{
 | 
			
		||||
  if(i >= 0 && i < genresSize)
 | 
			
		||||
    return genres[i];
 | 
			
		||||
  return String::null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ID3v1::genreIndex(const String &name)
 | 
			
		||||
{
 | 
			
		||||
  if(genreMap().contains(name))
 | 
			
		||||
    return genreMap()[name];
 | 
			
		||||
  return 255;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								mpeg/id3v1/id3v1genres.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								mpeg/id3v1/id3v1genres.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,61 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
    copyright            : (C) 2003 by Scott Wheeler
 | 
			
		||||
    email                : wheeler@kde.org
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
 *   This library is free software; you can redistribute it and/or modify  *
 | 
			
		||||
 *   it  under the terms of the GNU Lesser General Public License version  *
 | 
			
		||||
 *   2.1 as published by the Free Software Foundation.                     *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   This library is distributed in the hope that it will be useful, but   *
 | 
			
		||||
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 | 
			
		||||
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 | 
			
		||||
 *   Lesser General Public License for more details.                       *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   You should have received a copy of the GNU Lesser General Public      *
 | 
			
		||||
 *   License along with this library; if not, write to the Free Software   *
 | 
			
		||||
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
 | 
			
		||||
 *   USA                                                                   *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef TAGLIB_ID3V1GENRE_H
 | 
			
		||||
#define TAGLIB_ID3V1GENRE_H
 | 
			
		||||
 | 
			
		||||
#include <tmap.h>
 | 
			
		||||
#include <tstringlist.h>
 | 
			
		||||
 | 
			
		||||
namespace TagLib {
 | 
			
		||||
  namespace ID3v1 {
 | 
			
		||||
 | 
			
		||||
    typedef Map<String, int> GenreMap;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * Returns the list of canonical ID3v1 genre names in the order that they
 | 
			
		||||
     * are listed in the standard.
 | 
			
		||||
     */
 | 
			
		||||
    StringList genreList();
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * A "reverse mapping" that goes from the canonical ID3v1 genre name to the
 | 
			
		||||
     * respective genre number.   genreMap()["Rock"] ==
 | 
			
		||||
     */
 | 
			
		||||
    GenreMap genreMap();
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * Returns the name of the genre at \a index in the ID3v1 genre list.  If
 | 
			
		||||
     * \a index is out of range -- less than zero or greater than 146 -- a null
 | 
			
		||||
     * string will be returned.
 | 
			
		||||
     */
 | 
			
		||||
    String genre(int index);
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * Returns the genre index for the (case sensitive) genre \a name.  If the
 | 
			
		||||
     * genre is not in the list 255 (which signifies an unknown genre in ID3v1)
 | 
			
		||||
     * will be returned.
 | 
			
		||||
     */
 | 
			
		||||
    int genreIndex(const String &name);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										215
									
								
								mpeg/id3v1/id3v1tag.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								mpeg/id3v1/id3v1tag.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,215 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
    copyright            : (C) 2002, 2003 by Scott Wheeler
 | 
			
		||||
    email                : wheeler@kde.org
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
 *   This library is free software; you can redistribute it and/or modify  *
 | 
			
		||||
 *   it  under the terms of the GNU Lesser General Public License version  *
 | 
			
		||||
 *   2.1 as published by the Free Software Foundation.                     *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   This library is distributed in the hope that it will be useful, but   *
 | 
			
		||||
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 | 
			
		||||
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 | 
			
		||||
 *   Lesser General Public License for more details.                       *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   You should have received a copy of the GNU Lesser General Public      *
 | 
			
		||||
 *   License along with this library; if not, write to the Free Software   *
 | 
			
		||||
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
 | 
			
		||||
 *   USA                                                                   *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <tdebug.h>
 | 
			
		||||
#include <tfile.h>
 | 
			
		||||
 | 
			
		||||
#include "id3v1tag.h"
 | 
			
		||||
#include "id3v1genres.h"
 | 
			
		||||
 | 
			
		||||
using namespace TagLib;
 | 
			
		||||
using namespace ID3v1;
 | 
			
		||||
 | 
			
		||||
class ID3v1::Tag::TagPrivate
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
  TagPrivate() : file(0), tagOffset(-1), track(0), genre(255) {}
 | 
			
		||||
 | 
			
		||||
  File *file;
 | 
			
		||||
  long tagOffset;
 | 
			
		||||
 | 
			
		||||
  String title;
 | 
			
		||||
  String artist;
 | 
			
		||||
  String album;
 | 
			
		||||
  String year;
 | 
			
		||||
  String comment;
 | 
			
		||||
  uchar track;
 | 
			
		||||
  uchar genre;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// public methods
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
ID3v1::Tag::Tag() : TagLib::Tag()
 | 
			
		||||
{
 | 
			
		||||
  d = new TagPrivate;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ID3v1::Tag::Tag(File *file, long tagOffset) : TagLib::Tag()
 | 
			
		||||
{
 | 
			
		||||
  d = new TagPrivate;
 | 
			
		||||
  d->file = file;
 | 
			
		||||
  d->tagOffset = tagOffset;
 | 
			
		||||
 | 
			
		||||
  read();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ID3v1::Tag::~Tag()
 | 
			
		||||
{
 | 
			
		||||
  delete d;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ByteVector ID3v1::Tag::render() const
 | 
			
		||||
{
 | 
			
		||||
  ByteVector data;
 | 
			
		||||
 | 
			
		||||
  data.append(fileIdentifier());
 | 
			
		||||
  data.append(d->title.data(String::Latin1).resize(30));
 | 
			
		||||
  data.append(d->artist.data(String::Latin1).resize(30));
 | 
			
		||||
  data.append(d->album.data(String::Latin1).resize(30));
 | 
			
		||||
  data.append(d->year.data(String::Latin1).resize(4));
 | 
			
		||||
  data.append(d->comment.data(String::Latin1).resize(28));
 | 
			
		||||
  data.append(char(0));
 | 
			
		||||
  data.append(char(d->track));
 | 
			
		||||
  data.append(char(d->genre));
 | 
			
		||||
 | 
			
		||||
  return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ByteVector ID3v1::Tag::fileIdentifier()
 | 
			
		||||
{
 | 
			
		||||
  return ByteVector::fromCString("TAG");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String ID3v1::Tag::title() const
 | 
			
		||||
{
 | 
			
		||||
  return d->title;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String ID3v1::Tag::artist() const
 | 
			
		||||
{
 | 
			
		||||
  return d->artist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String ID3v1::Tag::album() const
 | 
			
		||||
{
 | 
			
		||||
  return d->album;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String ID3v1::Tag::comment() const
 | 
			
		||||
{
 | 
			
		||||
  return d->comment;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
String ID3v1::Tag::genre() const
 | 
			
		||||
{
 | 
			
		||||
  return ID3v1::genre(d->genre);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TagLib::uint ID3v1::Tag::year() const
 | 
			
		||||
{
 | 
			
		||||
  return d->year.toInt();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TagLib::uint ID3v1::Tag::track() const
 | 
			
		||||
{
 | 
			
		||||
  return d->track;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::setTitle(const String &s)
 | 
			
		||||
{
 | 
			
		||||
  d->title = s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::setArtist(const String &s)
 | 
			
		||||
{
 | 
			
		||||
  d->artist = s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::setAlbum(const String &s)
 | 
			
		||||
{
 | 
			
		||||
  d->album = s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::setComment(const String &s)
 | 
			
		||||
{
 | 
			
		||||
  d->comment = s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::setGenre(const String &s)
 | 
			
		||||
{
 | 
			
		||||
  d->genre = ID3v1::genreIndex(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::setYear(uint i)
 | 
			
		||||
{
 | 
			
		||||
  d->year = String::number(i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::setTrack(uint i)
 | 
			
		||||
{
 | 
			
		||||
  d->track = i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// protected methods
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::read()
 | 
			
		||||
{
 | 
			
		||||
  if(d->file && d->file->isValid()) {
 | 
			
		||||
    d->file->seek(d->tagOffset);
 | 
			
		||||
    // read the tag -- always 128 bytes
 | 
			
		||||
    ByteVector data = d->file->readBlock(128);
 | 
			
		||||
 | 
			
		||||
    // some initial sanity checking
 | 
			
		||||
    if(data.size() == 128 && data.mid(0, 3) == "TAG")
 | 
			
		||||
      parse(data);
 | 
			
		||||
    else
 | 
			
		||||
      debug("ID3v1 tag is not valid or could not be read at the specified offset.");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ID3v1::Tag::parse(const ByteVector &data)
 | 
			
		||||
{
 | 
			
		||||
  int offset = 3;
 | 
			
		||||
 | 
			
		||||
  d->title = data.mid(offset, 30);
 | 
			
		||||
  offset += 30;
 | 
			
		||||
 | 
			
		||||
  d->artist = data.mid(offset, 30);
 | 
			
		||||
  offset += 30;
 | 
			
		||||
 | 
			
		||||
  d->album = data.mid(offset, 30);
 | 
			
		||||
  offset += 30;
 | 
			
		||||
 | 
			
		||||
  d->year = data.mid(offset, 4);
 | 
			
		||||
  offset += 4;
 | 
			
		||||
 | 
			
		||||
  // Check for ID3v1.1 -- Note that ID3v1 *does not* support "track zero" -- this
 | 
			
		||||
  // is not a bug in TagLib.  Since a zeroed byte is what we would expect to
 | 
			
		||||
  // indicate the end of a C-String, specifically the comment string, a value of
 | 
			
		||||
  // zero must be assumed to be just that.
 | 
			
		||||
 | 
			
		||||
  if(data[offset + 28] == 0 && data[offset + 29] != 0) {
 | 
			
		||||
    // ID3v1.1 detected
 | 
			
		||||
 | 
			
		||||
    d->comment = data.mid(offset, 28);
 | 
			
		||||
    d->track = uchar(data[offset + 29]);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    d->comment = data.mid(offset, 30);
 | 
			
		||||
 | 
			
		||||
  offset += 30;
 | 
			
		||||
 | 
			
		||||
  d->genre = uchar(data[offset]);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										118
									
								
								mpeg/id3v1/id3v1tag.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								mpeg/id3v1/id3v1tag.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,118 @@
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
    copyright            : (C) 2002, 2003 by Scott Wheeler
 | 
			
		||||
    email                : wheeler@kde.org
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
/***************************************************************************
 | 
			
		||||
 *   This library is free software; you can redistribute it and/or modify  *
 | 
			
		||||
 *   it  under the terms of the GNU Lesser General Public License version  *
 | 
			
		||||
 *   2.1 as published by the Free Software Foundation.                     *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   This library is distributed in the hope that it will be useful, but   *
 | 
			
		||||
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 | 
			
		||||
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 | 
			
		||||
 *   Lesser General Public License for more details.                       *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   You should have received a copy of the GNU Lesser General Public      *
 | 
			
		||||
 *   License along with this library; if not, write to the Free Software   *
 | 
			
		||||
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
 | 
			
		||||
 *   USA                                                                   *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
#ifndef TAGLIB_ID3V1TAG_H
 | 
			
		||||
#define TAGLIB_ID3V1TAG_H
 | 
			
		||||
 | 
			
		||||
#include <tag.h>
 | 
			
		||||
#include <tbytevector.h>
 | 
			
		||||
 | 
			
		||||
namespace TagLib {
 | 
			
		||||
 | 
			
		||||
  class File;
 | 
			
		||||
 | 
			
		||||
  //! An ID3v1 implementation
 | 
			
		||||
 | 
			
		||||
  namespace ID3v1 {
 | 
			
		||||
 | 
			
		||||
    //! The main class in the ID3v1 implementation
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * This is an implementation of the ID3v1 format.  ID3v1 is both the simplist
 | 
			
		||||
     * and most common of tag formats but is rather limited.  Because of its
 | 
			
		||||
     * pervasiveness and the way that applications have been written around the
 | 
			
		||||
     * fields that it provides, the generic TagLib::Tag API is a mirror of what is
 | 
			
		||||
     * provided by ID3v1.
 | 
			
		||||
     *
 | 
			
		||||
     * \note Most fields are truncated to a maximum of 28-30 bytes.  The
 | 
			
		||||
     * truncation happens automatically when the tag is rendered.
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    class Tag : public TagLib::Tag
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
      /*!
 | 
			
		||||
       * Create an ID3v1 tag with default values.
 | 
			
		||||
       */
 | 
			
		||||
      Tag();
 | 
			
		||||
 | 
			
		||||
      /*!
 | 
			
		||||
       * Create an ID3v1 tag and parse the data in \a file starting at
 | 
			
		||||
       * \a tagOffset.
 | 
			
		||||
       */
 | 
			
		||||
      Tag(File *file, long tagOffset);
 | 
			
		||||
 | 
			
		||||
      /*!
 | 
			
		||||
       * Destroys this Tag instance.
 | 
			
		||||
       */
 | 
			
		||||
      virtual ~Tag();
 | 
			
		||||
 | 
			
		||||
      /*!
 | 
			
		||||
       * Renders the in memory values to a ByteVector suitable for writing to
 | 
			
		||||
       * the file.
 | 
			
		||||
       */
 | 
			
		||||
      ByteVector render() const;
 | 
			
		||||
 | 
			
		||||
      /*!
 | 
			
		||||
       * Returns the string "TAG" suitable for usage in locating the tag in a
 | 
			
		||||
       * file.
 | 
			
		||||
       */
 | 
			
		||||
      static ByteVector fileIdentifier();
 | 
			
		||||
 | 
			
		||||
      // Reimplementations.
 | 
			
		||||
 | 
			
		||||
      virtual String title() const;
 | 
			
		||||
      virtual String artist() const;
 | 
			
		||||
      virtual String album() const;
 | 
			
		||||
      virtual String comment() const;
 | 
			
		||||
      virtual String genre() const;
 | 
			
		||||
      virtual uint year() const;
 | 
			
		||||
      virtual uint track() const;
 | 
			
		||||
 | 
			
		||||
      virtual void setTitle(const String &s);
 | 
			
		||||
      virtual void setArtist(const String &s);
 | 
			
		||||
      virtual void setAlbum(const String &s);
 | 
			
		||||
      virtual void setComment(const String &s);
 | 
			
		||||
      virtual void setGenre(const String &s);
 | 
			
		||||
      virtual void setYear(uint i);
 | 
			
		||||
      virtual void setTrack(uint i);
 | 
			
		||||
 | 
			
		||||
    protected:
 | 
			
		||||
      /*!
 | 
			
		||||
       * Reads from the file specified in the constructor.
 | 
			
		||||
       */
 | 
			
		||||
      void read();
 | 
			
		||||
      /*!
 | 
			
		||||
       * Pareses the body of the tag in \a data.
 | 
			
		||||
       */
 | 
			
		||||
      void parse(const ByteVector &data);
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
      Tag(const Tag &);
 | 
			
		||||
      Tag &operator=(const Tag &);
 | 
			
		||||
 | 
			
		||||
      class TagPrivate;
 | 
			
		||||
      TagPrivate *d;
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
		Reference in New Issue
	
	Block a user