⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mp3audiotag.cpp

📁 游戏音频程序设计-Beginning.Game.Audio.Programming
💻 CPP
字号:
// MP3AudioTag.cpp: implementation of the CMP3AudioTag class.
//
//////////////////////////////////////////////////////////////////////

#include <io.h>
#include <fcntl.h>
#include <sys/stat.h>

#include "MP3AudioTag.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

namespace AudioEngine {

CMP3AudioTag::CMP3AudioTag()
{

}

CMP3AudioTag::~CMP3AudioTag()
{

}

bool CMP3AudioTag::Read(std::string filename)
{
  char header[4] = { 0 };
  char title[31] = { 0 };
  char artist[31] = { 0 };
  char album[31] = { 0 };
  char year[5] = { 0 };
  char comment[31] = { 0 };
  char genre = 0;

  int handle = open(filename.c_str(), O_RDONLY);
  lseek(handle, -128L, SEEK_END);
  read(handle, header, 3);

  bool result = false;

  if (!stricmp(header, "TAG")) {
    // valid header... this MP3 has an audio tag!
    read(handle, title, 30);      m_Title = title;
    read(handle, artist, 30);     m_Artist = artist;
    read(handle, album, 30);      m_Album = album;
    read(handle, year, 4);        m_Year = year;
    read(handle, comment, 30);    m_Comment = comment;
    read(handle, &genre, 1);      m_Genre = (MP3_GENRE)genre; m_GenreStr = GenreToString(m_Genre);
    result = true;
  }
  close(handle);
  return(result);
}

std::string CMP3AudioTag::GenreToString(MP3_GENRE genre)
{
  switch (genre) {
    case GENRE_BLUES:             return("Blues");
    case GENRE_CLASSICROCK:       return("Classic Rock");
    case GENRE_COUNTRY:           return("Country");
    case GENRE_DANCE:             return("Dance");
    case GENRE_DISCO:             return("Disco");
    case GENRE_FUNK:              return("Funk");
    case GENRE_GRUNGE:            return("Grunge");
    case GENRE_HIPHOP:            return("Hip-hop");
    case GENRE_JAZZ:              return("Jazz");
    case GENRE_METAL:             return("Metal");
    case GENRE_NEWAGE:            return("New Age");
    case GENRE_OLDIES:            return("Oldies");
    case GENRE_OTHER:             return("Other");
    case GENRE_POP:               return("Pop");
    case GENRE_RANDB:             return("R&B");
    case GENRE_RAP:               return("Rap");
    case GENRE_REGGAE:            return("Reggae");
    case GENRE_ROCK:              return("Rock");
    case GENRE_TECHNO:            return("Techno");
    case GENRE_INDUSTRIAL:        return("Industrial");
    case GENRE_ALTERNATIVE:       return("Alternative");
    case GENRE_SKA:               return("Ska");
    case GENRE_DEATHMETAL:        return("Death Metal");
    case GENRE_PRANKS:            return("Pranks");
    case GENRE_SOUNDTRACK:        return("Soundtrack");
    case GENRE_EUROTECHNO:        return("Eurotechno");
    case GENRE_AMBIENT:           return("Ambient");
    case GENRE_TRIPHOP:           return("Triphop");
    case GENRE_VOCAL:             return("Vocal");
    case GENRE_JAZZANDFUNK:       return("Jazz & Funk");
    case GENRE_FUSION:            return("Fusion");
    case GENRE_TRANCE:            return("Trance");
    case GENRE_CLASSICAL:         return("Classical");
    case GENRE_INSTRUMENTAL:      return("Instrumental");
    case GENRE_ACID:              return("Acid");
    case GENRE_HOUSE:             return("House");
    case GENRE_GAME:              return("Game");
    case GENRE_SOUNDCLIP:         return("Sound Clip");
    case GENRE_GOSPEL:            return("Gospel");
    case GENRE_NOISE:             return("Noise");
    case GENRE_ALTERNROCK:        return("Alternative Rock");
    case GENRE_BASS:              return("Bass");
    case GENRE_SOUL:              return("Soul");
    case GENRE_PUNK:              return("Punk");
    case GENRE_SPACE:             return("Space");
    case GENRE_MEDITATIVE:        return("Meditative");
    case GENRE_INSTRUMENTALPOP:   return("Instrumental Pop");
    case GENRE_INSTRUMENTALROCK:  return("Instrumental Rock");
    case GENRE_ETHNIC:            return("Ethnic");
    case GENRE_GOTHIC:            return("Gothic");
    case GENRE_DARKWAVE:          return("Darkwave");
    case GENRE_TECHNOINDUSTRIAL:  return("Techno-industrial");
    case GENRE_ELECTRONIC:        return("Electronic");
    case GENRE_POPFOLK:           return("Pop Folk");
    case GENRE_EURODANCE:         return("EuroDance");
    case GENRE_DREAM:             return("Dream");
    case GENRE_SOUTHERNROCK:      return("Southern Rock");
    case GENRE_COMEDY:            return("Comedy");
    case GENRE_CULT:              return("Cult");
    case GENRE_GANGSTA:           return("Gangsta");
    case GENRE_TOP40:             return("Top 40");
    case GENRE_CHRISTIANRAP:      return("Christian Rap");
    case GENRE_POPFUNK:           return("Pop Funk");
    case GENRE_JUNGLE:            return("Jungle");
    case GENRE_NATIVAAMERICAN:    return("Native American");
    case GENRE_CABARET:           return("Cabaret");
    case GENRE_NEWWAVE:           return("New Wave");
    case GENRE_PSYCHADELIC:       return("Psychadelic");
    case GENRE_RAVE:              return("Rave");
    case GENRE_SHOWTUNES:         return("Showtunes");
    case GENRE_TRAILER:           return("Trailer");
    case GENRE_LOFI:              return("Lo-fi");
    case GENRE_TRIBAL:            return("Tribal");
    case GENRE_ACIDPUNK:          return("Acid Punk");
    case GENRE_ACIDJAZZ:          return("Acid Jazz");
    case GENRE_POLKA:             return("Polka");
    case GENRE_RETRO:             return("Retro");
    case GENRE_MUSICAL:           return("Musical");
    case GENRE_ROCKANDROLL:       return("Rock & Roll");
    case GENRE_HARDROCK:          return("Hard Rock");
    case GENRE_FOLK:              return("Folk");
    case GENRE_FOLKROCK:          return("Folk Rock");
    case GENRE_NATIONALFOLK:      return("National Folk");
    case GENRE_SWING:             return("Swing");
    case GENRE_FASTFUSION:        return("Fast Fusion");
    case GENRE_BEBOP:             return("Bebop");
    case GENRE_LATIN:             return("Latin");
    case GENRE_REVIVAL:           return("Revival");
    case GENRE_CELTIC:            return("Celtic");
    case GENRE_BLUEGRASS:         return("Bluegrass");
    case GENRE_AVANTGARDE:        return("Avant-Garde");
    case GENRE_GOTHICROCK:        return("Gothic Rock");
    case GENRE_PROGRESSIVEROCK:   return("Progressive Rock");
    case GENRE_PSYCHEDELICROCK:   return("Psychedelic Rock");
    case GENRE_SYMPHONICROCK:     return("Symphonic Rock");
    case GENRE_SLOWROCK:          return("Slow Rock");
    case GENRE_BIGBAND:           return("Big Band");
    case GENRE_CHORUS:            return("Chorus");
    case GENRE_EASYLISTENING:     return("Easy Listening");
    case GENRE_ACOUSTIC:          return("Acoustic");
    case GENRE_HUMOR:             return("Humor");
    case GENRE_SPEECH:            return("Speech");
    case GENRE_CHANSON:           return("Chanson");
    case GENRE_OPERA:             return("Opera");
    case GENRE_CHAMBERMUSIC:      return("Chamber Music");
    case GENRE_SONATA:            return("Sonata");
    case GENRE_SYMPHONY:          return("Symphony");
    case GENRE_BOOTYBRASS:        return("Booty Brass");
    case GENRE_PRIMUS:            return("Primus");
    case GENRE_PORNGROOVE:        return("Porn Groove");
    case GENRE_SATIRE:            return("Satire");
    case GENRE_SLOWJAM:           return("Slow Jam");
    case GENRE_CLUB:              return("Club");
    case GENRE_TANGO:             return("Tango");
    case GENRE_SAMBA:             return("Samba");
    case GENRE_FOLKLORE:          return("Folklore");
    case GENRE_BALLAD:            return("Ballad");
    case GENRE_POWERBALLAD:       return("Power Ballad");
    case GENRE_RTHYMICSOUL:       return("Rthymic Soul");
    case GENRE_FREESTYLE:         return("Freestyle");
    case GENRE_DUET:              return("Duet");
    case GENRE_PUNKROCK:          return("Punk Rock");
    case GENRE_DRUMSOLO:          return("Drum Solo");
    case GENRE_ACAPELA:           return("A Capela");
    case GENRE_EUROHOUSE:         return("EuroHouse");
    case GENRE_DANCEHALL:         return("Dance Hall");
  }
  return("Unknown");
}                               


} // namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -