ein stück eines char zurückgeben
-
danek für deine mühe, aber vergessen wir nun mal die GetString funktion. dies hat sich bereits erledigt da ich es ja anderst löse. das char buffer[128] was auch bei der funktion GetString vorkommt hat nichts miteinander zu tun. ich weis das ganze verwirrt ein bisschen. aber lassen wir nun einfach die GetString funktion weg.
was dein letztes posting angeht:
Kann es ein das dein File Zeilenumbrüche beinhaltet
hm, eigentlich sollte das alles auf einer zeile beruhen. es handelt sich um einen mp3 tag. dieser ist oder sollte imho in einer zeile stehen. insofern sollte es bei fread und dems chreiben in das buffer array ja keine konflikte geben. ebenfalls insofern sollte dann ja auch die ausgabe der messagebox erfolgreich sein, was aber nicht der fall ist. hmmmmmmmm
-
ich poste am besten mal meinen ganzen code.
dann könnt ihr mir (da ich noch anfänger bin) auch gleich sagen ob ich sonst alles richtig deklariert habe. weil z.B. wollte ich eigentlich das GenreList array im konstruktor initialisieren etc.also, ich habe mir eine kleine klasse geschrieben die den header bzw. den mp3 tag auslesen soll.
header
//--------------------------------------------------------------------------- #include <vcl.h> //borland, für String (AnsiString) #include <string> //--------------------------------------------------------------------------- using namespace std; //--------------------------------------------------------------------------- class CMP3Header { public: CMP3Header(); ~CMP3Header(); String Artist; String Title; String Album; String Genre; void LoadMP3File(String FileName); private: bool isVersion1; bool isVersion2; //char *GenreList[126]; }; //---------------------------------------------------------------------------
quellcode .cpp
//--------------------------------------------------------------------------- #include "mp3header.h" //--------------------------------------------------------------------------- char *GenreList[] = {"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","Trace","Classical","Istrumental","Acid", "House","Game","Sound Clip","Gospel","Noise","AlternRock","Bass","Soul", "Punk","Space","Mediatative","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","Fast Fusion","Bebob","Latin","Revival","Celtic","Bluegrass","Avantgarde", "Gothic Rock","Progressive Rock","Psychedelic Rock","Symphonic Rock","Slow Rock", "Big Band","Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson", "Opera","Chamber Music","Sonata","Symphony","Booty Brass","Primus","Porn Groove", "Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Poweer Ballad","Rhytmic Soul", "Freestile","Duet","Punk Rock","Drum Solo","A Capela","Euro-House","Dance Hall"}; CMP3Header::CMP3Header() { } //--------------------------------------------------------------------------- CMP3Header::~CMP3Header() { } //--------------------------------------------------------------------------- void CMP3Header::LoadMP3File(String FileName) { Artist = ""; Title = ""; Album = ""; Genre = ""; char buffer[128]; FILE *MP3File = fopen(FileName.c_str(), "rb"); if(MP3File) { fseek(MP3File, -128, SEEK_END); if(fread(buffer, 1, 128, MP3File) == 128) { String t_Artist(&buffer[33],30); String t_Title(&buffer[3],30); String t_Album(&buffer[63],30); if(buffer[0] == 'T' && buffer[1] == 'A' && buffer[2] == 'G') { Artist = t_Artist; Title = t_Title; Album = t_Album; Genre = GenreList[buffer[127]]; } } } fclose(MP3File); } //---------------------------------------------------------------------------
-
was mir gerade selber aufgefallen ist:
habe die GenreList nun als konstant deklariert.
aber wie initialisiere ich die liste nun im konstruktor? versucht habe ich das so:CMP3Header::CMP3Header() { GenreList = {"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","Trace","Classical","Istrumental","Acid", "House","Game","Sound Clip","Gospel","Noise","AlternRock","Bass","Soul", "Punk","Space","Mediatative","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","Fast Fusion","Bebob","Latin","Revival","Celtic","Bluegrass","Avantgarde", "Gothic Rock","Progressive Rock","Psychedelic Rock","Symphonic Rock","Slow Rock", "Big Band","Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson", "Opera","Chamber Music","Sonata","Symphony","Booty Brass","Primus","Porn Groove", "Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Poweer Ballad","Rhytmic Soul", "Freestile","Duet","Punk Rock","Drum Solo","A Capela","Euro-House","Dance Hall"}; }
und auch mit GenreList[] = ...
jedoch krieg ich so oder so einen "Ausdruckssyntax" fehler.
-
OT: Das ist das ID3 Tag Version 1 und nicht der MP3 Header.
-
das weis ich doch
lass dich von meiner klassen definition nicht irritieren.
-
hallo schniischnaa (bei dem namen müsste man eigentlich jeden umgang mit musik unterbinden, aber ich will nicht urteilen ...)
ich habe folgenden vorschlag:
mach doch die Genere Liste zu einer statischen Klassenvariablen. Es macht ja keinen Sinn eine globale Variable im Konstruktor einer Klasse zu initalisieren (was passiert wenn du versuchst auf diese variable zuzugreifen ohne jemals eine instanz von CMP3Header zu erzeugen?). Ich würde es in etwa so formulieren:
class CMP3Header { public: CMP3Header(); ~CMP3Header(); char* Artist; char* Title; char* Album; char* Genre; void LoadMP3File(char* FileName); private: bool isVersion1; bool isVersion2; static char *GenreList[3]; }; char* CMP3Header::GenreList[] = {"Good", "Bad", "Classic"};
-
schniischnaa schrieb:
//--------------------------------------------------------------------------- FILE *MP3File = fopen(FileName.c_str(), "rb"); if(MP3File) { fseek(MP3File, -128, SEEK_END); if(fread(buffer, 1, 128, MP3File) == 128) { String t_Artist(&buffer[33],30); } //---------------------------------------------------------------------------
nur so als Verständnisfrage:
bedeutet dies, das in den letzten 128 byte deines file die id3 informationen stehen?
-
bei dem namen müsste man eigentlich jeden umgang mit musik unterbinden
he! ich finde das lied scheisse!
war nur so irgendwie... so hald... :pdein vorschlag übernehme ich dann. danke
aber ist sonnst alles ok? ich weis echt nicht was der fehler sein sollte, hm....
-
bedeutet dies, das in den letzten 128 byte deines file die id3 informationen stehen?
exakt
-
Ja, das ID3v1 Tag hängt 128kb hinten an die MP3 Datei an und das Tag wird mit einem "TAG" eingeleitet.