📄 mp3audiotag.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 + -