Binärdateien lesen / Mp3 - Datei
-
Hallo leute!
Ich muss ne Mp3Datei auslesen in rohem C!! Ich habe ein beispiel in VisualBasic gesehen und weiss daher das die datei Binär geöffnet und gelesen wird aber irgendwie kann ich das net richtig! Vielleicht koennt ihr mir sagen was ich falsch macheEs ist erst mal nur ein hack deswegen entschuldigt die unordentlichkeit
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <string.h> #define MAXLINE 1000 void main(void) { char szText[MAXLINE]; unsigned long ulCount = 0; FILE * fhandle; int i = 0; char buf[255]; fhandle = fopen("C:\\Westernhagen.mp3","rb"); if(fhandle == NULL) { puts ("Fehler beim öffnen von Westernhagen.mp3"); MessageBox(NULL,"ANY KEY TO CONTINUE","LOL MACHT DAS SPASS",MB_OK); exit(EXIT_FAILURE); } else { puts ("C:\\Westernhagen.mp3 wurde geöffnet"); /* while(1) { (void) fgetc(fhandle); if(feof(fhandle) != 0) { MessageBox(NULL,szText,"LOL MACHT DAS SPASS",MB_OK); break; } ulCount++; i++; } printf("Die Datei ist %lu Bytes gross\n",ulCount); } szText[i] = fgetc(fhandle); i++; */ fgetc(fhandle); // fread (&buf,100,100,fhandle); fclose (fhandle); buf = NULL; MessageBox(NULL,buf,"LOL MACHT DAS SPASS",MB_OK); } }
-
was für einen Fehler erhälst du den? (BTW. rohes C ist kein windows.h und keine MessageBox
)
main sollte int zurückgeben und nicht void!
wenn du die Dateigröße bestimmen willst, kannst du auch an das Dateiende springen und dann mit ftell erhälst du die Länge.
(void) fgetc(handle);
das (void) kannst du dir hier auch sparen.
und du solltest den Präfix ++ Operator nehmen, nicht den Postfix, wenn es geht, da der Präfix ++ Operator schneller ist.
-
Original erstellt von kingruedi:
**...und du solltest den Präfix ++ Operator nehmen, nicht den Postfix, wenn es geht, da der Präfix ++ Operator schneller ist.**
Das war, meine ich, früher mal so. Bei den "neueren" Compilern nicht mehr.
-
Ja ich schäme mich schon tierisch!
Ich wollte halt mit den Messageboxen wissen wo er gerade ist. Es ist auch nur Anfang
Also die Messagebox am schluss gibt denke ich binärcode aus!! es sind zwar nicht 1und 0len aber es sieht danach verdammt aus! Nen Freund meinte ich sollte das in eine Struct lesen wusste aber nicht wie? Was hat es damit auf sich? Der Vb Code ist uebrigens hier! : [url] http://www.activevb-archiv.de/vb/VBtips/VBtip0408.shtml [/url] Ich danke fü+r eure Hilfe!
-
Hi,
buf = NULL;
MessageBox(NULL,buf,"LOL MACHT DAS SPASS",MB_OK);Ist das gewollt? Warum setzt du buf auf NULL, wenn du den Inhalt noch
ausgeben willst?mfg
v R
-
ne sorry da wa der code auch gerade in bearbeitung hier ne neuere version
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <string.h> #define MAXLINE 1000 void main(void) { char szText[MAXLINE]; unsigned long ulCount = 0; FILE * fhandle; int i = 0; char buf[255]; fhandle = fopen("C:\\Westernhagen.mp3","rb"); if(fhandle == NULL) { puts ("Fehler beim öffnen von Westernhagen.mp3"); MessageBox(NULL,"ANY KEY TO CONTINUE","LOL MACHT DAS SPASS",MB_OK); exit(EXIT_FAILURE); } else { puts ("C:\\Westernhagen.mp3 wurde geöffnet"); /* while(1) { (void) fgetc(fhandle); if(feof(fhandle) != 0) { MessageBox(NULL,szText,"LOL MACHT DAS SPASS",MB_OK); break; } ulCount++; i++; } printf("Die Datei ist %lu Bytes gross\n",ulCount); } szText[i] = fgetc(fhandle); i++; */ // fgetc(fhandle); fread (buf,100,100,fhandle); fclose (fhandle); MessageBox(NULL,buf,"LOL MACHT DAS SPASS",MB_OK); } }
-
ich sehe gerade das fgetc was ich auskommentiert habe muss ansein!! fragt mich net warum aber sonst gibt er den inhalt nicht aus *genervtis*
was denkt ihr denn ueber auslesen in eine struct?
-
man fread/fwrite
-
Hi,
ich hab dafür vor ner Weile mal etwas geschrieben.
Sollte Dir vielleicht weiter helfen.
Du kannst damit allerdings nur ID3v1 Tags auslesen/schreiben.
ID3v2 geht net.Ist zwar nicht komplett ANSI-C, aber zum Abkucken sollte es gehen.
Und bitte nicht die Credits rausnhemen.
[INFOS ZUR BENUTZUNG]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% BESCHREIBUNG: %
% ============= %
% %
% int checkID3(AnsiString FileName) %
% """"""""""""""""""""""""""""""""" %
% Funktion stellt fest, ob die MP3-Datei ein ID3TAG besitzt %
% %
% Rückgabewerte: 1: ID3TAG vorhanden %
% 0: kein ID3TAG vorhanden %
% -1: ungültiger Dateiname/Pfad %
% %
% %
% %
% AnsiString getTitle(AnsiString FileName) %
% """""""""""""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung den %
% Eintrag "Title" des ID3TAGs %
% %
% weitere %
% Rückgabewerte: "FileNotFound" : ungültiger Dateiname/Pfad %
% "noTAG" : kein ID3TAG vorhanden %
% %
% %
% %
% AnsiString setTitle(AnsiString FileName, AnsiString newTitle) %
% """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung den neuen %
% Eintrag für "Title" in das ID3TAG %
% %
% Rückgabewerte: "writeTAGok" : ID3TAG geschrieben %
% "writeTAGfailed" : ID3TAG nicht geschrieben %
% "FileNotFound" : ungültiger Dateiname/Pfad %
% %
% %
% %
% AnsiString getArtist(AnsiString FileName) %
% """"""""""""""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung den %
% Eintrag "Artist" des ID3TAGs %
% %
% weitere %
% Rückgabewerte: "FileNotFound" : ungültiger Dateiname/Pfad %
% "noTAG" : kein ID3TAG vorhanden %
% %
% %
% %
% AnsiString setArtist(AnsiString FileName, AnsiString newArtist) %
% """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung den neuen %
% Eintrag für "Artist" in das ID3TAG %
% %
% Rückgabewerte: "writeTAGok" : ID3TAG geschrieben %
% "writeTAGfailed" : ID3TAG nicht geschrieben %
% "FileNotFound" : ungültiger Dateiname/Pfad %
% %
% %
% %
% AnsiString getAlbum(AnsiString FileName) %
% """""""""""""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung den %
% Eintrag "Album" des ID3TAGs %
% %
% weitere %
% Rückgabewerte: "FileNotFound" : ungültiger Dateiname/Pfad %
% "noTAG" : kein ID3TAG vorhanden %
% %
% %
% %
% AnsiString setAlbum(AnsiString FileName, AnsiString newAlbum) %
% """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung den neuen %
% Eintrag für "Album" in das ID3TAG %
% %
% Rückgabewerte: "writeTAGok" : ID3TAG geschrieben %
% "writeTAGfailed" : ID3TAG nicht geschrieben %
% "FileNotFound" : ungültiger Dateiname/Pfad %
% %
% %
% %
% AnsiString getYear(AnsiString FileName) %
% """"""""""""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung den %
% Eintrag "Year" des ID3TAGs %
% %
% weitere %
% Rückgabewerte: "FileNotFound" : ungültiger Dateiname/Pfad %
% "noTAG" : kein ID3TAG vorhanden %
% %
% %
% %
% AnsiString setYear(AnsiString FileName, AnsiString newYear) %
% """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung den neuen %
% Eintrag für "Year" in das ID3TAG %
% %
% Rückgabewerte: "writeTAGok" : ID3TAG geschrieben %
% "writeTAGfailed" : ID3TAG nicht geschrieben %
% "FileNotFound" : ungültiger Dateiname/Pfad %
% %
% %
% %
% AnsiString getComment(AnsiString FileName) %
% """""""""""""""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung den %
% Eintrag "Comment" des ID3TAGs %
% %
% weitere %
% Rückgabewerte: "FileNotFound" : ungültiger Dateiname/Pfad %
% "noTAG" : kein ID3TAG vorhanden %
% %
% %
% %
% AnsiString setComment(AnsiString FileName, AnsiString newComment) %
% """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung den neuen %
% Eintrag für "Comment" in das ID3TAG %
% %
% Rückgabewerte: "writeTAGok" : ID3TAG geschrieben %
% "writeTAGfailed" : ID3TAG nicht geschrieben %
% "FileNotFound" : ungültiger Dateiname/Pfad %
% %
% %
% %
% void genreListUp() %
% """""""""""""""""" %
% nach Aufruf dieser Funktion steht in der Variablen (AnsiString) GenreList %
% die Liste aller gültigen Genres zur Verfügung %
% %
% Hinweis: Variable ist ein Array mit 148 Werten %
% %
% %
% %
% AnsiString getGenre(AnsiString FileName) %
% """""""""""""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung den %
% Eintrag "Genre" des ID3TAGs %
% %
% weitere %
% Rückgabewerte: "FileNotFound" : ungültiger Dateiname/Pfad %
% "noTAG" : kein ID3TAG vorhanden %
% %
% %
% %
% AnsiString setGenre(AnsiString FileName, AnsiString newGenre) %
% """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung den neuen %
% Eintrag für "Genre" in das ID3TAG %
% %
% Rückgabewerte: "writeTAGok" : ID3TAG geschrieben %
% "writeTAGfailed" : ID3TAG nicht geschrieben %
% "invalidGenre" : ungültige Genre-Bezeichnung %
% "FileNotFound" : ungültiger Dateiname/Pfad %
% %
% %
% %
% int getTrack(AnsiString FileName) %
% """"""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung die Track-Nummer des ID3TAG %
% der durch FileName bestimmten MP3-Datei. %
% %
% weitere %
% Rückgabewerte: 0: keine Tracknummer verfügbar %
% -1: kein ID3TAG vorhanden %
% -2: ungültiger Dateiname/Pfad %
% %
% Hinweis: Bei Track-Nummern größer als 255 oder kleiner als 0 erfolgt %
% ein Überlauf. %
% %
% %
% %
% int setTrack(AnsiString FileName, AnsiString newTrackNumber) %
% """""""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung die Track-Nummer in das ID3TAG %
% der durch FileName bestimmten MP3-Datei. %
% %
% Rückgabewerte: 1: Track-Nummer geschrieben %
% 0: Track-Nummer nicht geschrieben %
% -1: ungültiger Dateiname/Pfad %
% -2: Track-Nummer zu hoch/niedrig %
% %
% Hinweis: Bei Track-Nummern größer als 255 oder kleiner als 0 erfolgt %
% Rückgabe des Wertes -2. %
% %
% %
% %
% fullTAG %
% """"""" %
% Strukturierter Variablentyp, der alle Elemente eines ID3TAGs enthält. %
% %
% Beispiel: fullTAG meinID3Struct; %
% %
% %
% Wird nur mit den Werten des ID3TAGs gefüllt, wenn getFullTAG() aufgerufen %
% worden ist. %
% %
% Werte: AnsiString fullTAG.Title %
% AnsiString fullTAG.Artist %
% AnsiString fullTAG.Album %
% AnsiString fullTAG.Year %
% AnsiString fullTAG.Comment %
% AnsiString fullTAG.Genre %
% AnsiString fullTAG.TrackNumber (falls im ID3TAG vorhanden) %
% %
% %
% %
% fullTAG getFullTAG(AnsiString FileName) %
% """""""""""""""""""""""""""""""""""""""" %
% Funktion liefert bei fehlerfreier Ausführung alle Informationen des ID3TAGs %
% der durch FileName bestimmten MP3-Datei. Sie sind als Elemente vom struct %
% der Form fullTAG zugänglich. %
% %
% weitere %
% Rückgabewerte: "FileNotFound" : ungültiger Dateiname/Pfad %
% (jedes AnsiString-Element vom Typ fullTAG %
% enhält diesen String; %
% .TrackNumber enhält den Wert -1 ) %
% "noTAG" : kein ID3TAG vorhanden %
% (jedes AnsiString-Element vom Typ fullTAG %
% enhält diesen String; %
% .TrackNumber enhält den Wert -1 ) %
% %
% %
% %
% AnsiString setFullTAG(AnsiString Filename, AnsiString newTitle, %
% AnsiString newArtist, AnsiString newYear, %
% AnsiString newComment, Ansistring newGenre) %
% """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" %
% Funktion schreibt bei fehlerfreier Ausführung alle Parameter in das ID3TAG %
% der durch FileName bestimmten MP3-Datei. %
% %
% Rückgabewerte: "writeTAGok" : ID3TAG geschrieben %
% "writeTAGfailed" : ID3TAG nicht geschrieben %
% "invalidGenre" : ungültige Genre-Bezeichnung %
% "FileNotFound" : ungültiger Dateiname/Pfad %
% %
% %
% %
% int removeTAG(AnsiString FileName) %
% """""""""""""""""""""""""""""""""" %
% Funktion entfernt bei fehlerfreier Ausführung das ID3TAG der durch %
% FileName bestimmten MP3-Datei. %
% %
% Rückgabewerte: 1: ID3TAG entfernt %
% 0: kein ID3TAG vorhanden %
% -1: ungültiger Dateiname/Pfad %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[SOURCE-CODE]
/////////////////////////////////////////////////////// /////////////////////////////////////////////////////// //// //// //// Datei: ID3_Lib.c //// //// Autor: Carsten L. //// //// Beschreibung: C - Unit zum Auslesen //// //// und Schreiben von ID3TAGs //// //// ==> fuer ID3TAG Ver.: 1.1 //// //// Datum: 27.02.2002 //// //// Copyright (C): Carsten L. //// //// midnighter@my-mail.ch //// //// //// /////////////////////////////////////////////////////// /////////////////////////////////////////////////////// //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "ID3_Lib.h" #pragma package(smart_init) //--------------------------------------------------------------------------- //////////////////////////////////////// //// Includes //// //////////////////////////////////////// #include <stdio.h> #include <string.h> #include <io.h> //////////////////////////////////////// //// //// //// ..:: genreListUP ::.. //// //// //// //// after execution the list of //// //// every possible genre is //// //// available in the variable //// //// //// //// => (String) GenreList <= //// //// //// //// :: Array with 148 elements :: //// //// //// //////////////////////////////////////// String GenreList[148]; void genreListUp() { GenreList[0] = "Blues"; GenreList[1] = "Classic Rock"; GenreList[2] = "Country"; GenreList[3] = "Dance"; GenreList[4] = "Disco"; GenreList[5] = "Funk"; GenreList[6] = "Grunge"; GenreList[7] = "Hip-Hop"; GenreList[8] = "Jazz"; GenreList[9] = "Metal"; GenreList[10] = "New Age"; GenreList[11] = "Oldies"; GenreList[12] = "Other"; GenreList[13] = "Pop"; GenreList[14] = "R&B"; GenreList[15] = "Rap"; GenreList[16] = "Reggae"; GenreList[17] = "Rock"; GenreList[18] = "Techno"; GenreList[19] = "Industrial"; GenreList[20] = "Alternative"; GenreList[21] = "Ska"; GenreList[22] = "Death Metal"; GenreList[23] = "Pranks"; GenreList[24] = "Soundtrack"; GenreList[25] = "Euro-Techno"; GenreList[26] = "Ambient"; GenreList[27] = "Trip-Hop"; GenreList[28] = "Vocal"; GenreList[29] = "Jazz+Funk"; GenreList[30] = "Fusion"; GenreList[31] = "Trance"; GenreList[32] = "Classical"; GenreList[33] = "Instrumental"; GenreList[34] = "Acid"; GenreList[35] = "House"; GenreList[36] = "Game"; GenreList[37] = "Sound Clip"; GenreList[38] = "Gospel"; GenreList[39] = "Noise"; GenreList[40] = "Alternative Rock"; GenreList[41] = "Bass"; GenreList[43] = "Punk"; GenreList[44] = "Space"; GenreList[45] = "Meditative"; GenreList[46] = "Instrumental Pop"; GenreList[47] = "Instrumental Rock"; GenreList[48] = "Ethnic"; GenreList[49] = "Gothic"; GenreList[50] = "Darkwave"; GenreList[51] = "Techno-Industrial"; GenreList[52] = "Electronic"; GenreList[53] = "Pop-Folk"; GenreList[54] = "Eurodance"; GenreList[55] = "Dream"; GenreList[56] = "Southern Rock"; GenreList[57] = "Comedy"; GenreList[58] = "Cult"; GenreList[59] = "Gangsta"; GenreList[60] = "Top 40"; GenreList[61] = "Christian Rap"; GenreList[62] = "Pop/Funk"; GenreList[63] = "Jungle"; GenreList[64] = "Native US"; GenreList[65] = "Cabaret"; GenreList[66] = "New Wave"; GenreList[67] = "Psychadelic"; GenreList[68] = "Rave"; GenreList[69] = "Showtunes"; GenreList[70] = "Trailer"; GenreList[71] = "Lo-Fi"; GenreList[72] = "Tribal"; GenreList[73] = "Acid Punk"; GenreList[74] = "Acid Jazz"; GenreList[75] = "Polka"; GenreList[76] = "Retro"; GenreList[77] = "Musical"; GenreList[78] = "Rock & Roll"; GenreList[79] = "Hard Rock"; GenreList[80] = "Folk"; GenreList[81] = "Folk-Rock"; GenreList[82] = "National Folk"; GenreList[83] = "Swing"; GenreList[84] = "Fast Fusion"; GenreList[85] = "Bebob"; GenreList[86] = "Latin"; GenreList[87] = "Revival"; GenreList[88] = "Celtic"; GenreList[89] = "Bluegrass"; GenreList[90] = "Avantgarde"; GenreList[91] = "Gothic Rock"; GenreList[92] = "Progressive Rock"; GenreList[93] = "Psychedelic Rock"; GenreList[94] = "Symphonic Rock"; GenreList[95] = "Slow Rock"; GenreList[96] = "Big Band"; GenreList[97] = "Chorus"; GenreList[98] = "Easy Listening"; GenreList[99] = "Acoustic"; GenreList[100] = "Humour"; GenreList[101] = "Speech"; GenreList[102] = "Chanson"; GenreList[103] = "Opera"; GenreList[104] = "Chamber Music"; GenreList[105] = "Sonata"; GenreList[106] = "Symphony"; GenreList[107] = "Booty Bass"; GenreList[108] = "Primus"; GenreList[109] = "Porn Groove"; GenreList[110] = "Satire"; GenreList[111] = "Slow Jam"; GenreList[112] = "Club"; GenreList[113] = "Tango"; GenreList[114] = "Samba"; GenreList[115] = "Folklore"; GenreList[116] = "Ballad"; GenreList[117] = "Power Ballad"; GenreList[118] = "Rhytmic Soul"; GenreList[119] = "Freestyle"; GenreList[120] = "Duet"; GenreList[121] = "Punk Rock"; GenreList[122] = "Drum Solo"; GenreList[123] = "Acapella"; GenreList[124] = "Euro-House"; GenreList[125] = "Dance Hall"; GenreList[126] = "Goa"; GenreList[127] = "Drum & Bass"; GenreList[128] = "Club-House"; GenreList[129] = "Hardcore"; GenreList[130] = "Terror"; GenreList[131] = "Indie"; GenreList[132] = "BritPop"; GenreList[133] = "Negerpunk"; GenreList[134] = "Polsk Punk"; GenreList[135] = "Beat"; GenreList[136] = "Christian Gangsta"; GenreList[137] = "Heavy Metal"; GenreList[138] = "Black Metal"; GenreList[139] = "Crossover"; GenreList[140] = "Contemporary C"; GenreList[141] = "Christian Rock"; GenreList[142] = "Merengue"; GenreList[143] = "Salsa"; GenreList[144] = "Thrash Metal"; GenreList[145] = "Anime"; GenreList[146] = "JPop"; GenreList[147] = "SynthPop"; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: readGenre ::.. //// //// //// //// => JUST INTERNAL USE <= //// //// //// //// Parameter: int //// //// //// //// RETURN-VALUES: //// //// success => (String) Genre //// //// failure => (String) NULL //// //// //// //////////////////////////////////////////// String readGenre(int ziffer) { char genre[148][20]; genreListUp(); if(ziffer <= 147) { return (GenreList[ziffer]); } else return NULL; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: writeGenre ::.. //// //// //// //// => JUST INTERNAL USE <= //// //// //// //// Parameter: String //// //// //// //// RETURN-VALUES: //// //// success => (int) GenreNumber //// //// failure => (int) -1 //// //// //// //////////////////////////////////////////// int writeGenre(String gen) { char genre[148][20]; int i = 0, result_a; genreListUp(); do { result_a = strcmp(gen.c_str(), GenreList[i++].c_str()); } while(result_a != 0 && (i <= 148)); if(i == 149) return (-1); return (--i); } //----------------------------------------- //////////////////////////////////////// //// //// //// ..:: checkID3 ::.. //// //// //// //// Checks if ID3TAG available //// //// //// //// RETURN-VALUES: //// //// TAGok => 1 //// //// noTAG => 0 //// //// File not found => -1 //// //// //// //////////////////////////////////////// int checkID3(String path) { FILE *fp; char TAG[4] = ""; if( (bool) (fp = fopen( path.c_str(), "rb") ) ) { fseek(fp, -128, SEEK_END); fread(TAG, 3, 1, fp); fclose(fp); if(!strcmp(TAG, "TAG")) return 1; else return 0; } return -1; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: getTitle ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// success => Title of the ID3 //// //// file not found => FileNotFound //// //// no ID3TAG found => noTAG //// //// //// /////////////////////////////////////////// String getTitle(String path) { FILE *fp; char TITLE[31] = ""; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { fseek(fp, -125, SEEK_END); fread(TITLE, 30, 1, fp); fclose(fp); return (String) TITLE; } } if(i == 0) return "noTAG"; return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: setTitle ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new Title //// //// //// //// RETURN-VALUES: //// //// success => writeTAGok //// //// failure => writeTAGfailed //// //// file not found => FileNotFound //// //// //// /////////////////////////////////////////// String setTitle(String path, String newTitle) { FILE *fp; char TITLE[31] = ""; strcpy(TITLE, newTitle.c_str()); TITLE[30] = 0; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -125, SEEK_END); if( fwrite(TITLE, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fseek(fp, -125, SEEK_END); if( fwrite(TITLE, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: getArtist ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// success => Artist of the ID3 //// //// file not found => FileNotFound //// //// no ID3TAG found => noTAG //// //// //// /////////////////////////////////////////// String getArtist(String path) { FILE *fp; char ARTIST[31] = ""; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { fseek(fp, -95, SEEK_END); fread(ARTIST, 30, 1, fp); fclose(fp); return (String) ARTIST; } } if(i == 0) return "noTAG"; return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: setArtist ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new Artist //// //// //// //// RETURN-VALUES: //// //// success => writeTAGok //// //// failure => writeTAGfailed //// //// file not found => FileNotFound //// //// //// /////////////////////////////////////////// String setArtist(String path, String newArtist) { FILE *fp; char ARTIST[31] = ""; strcpy(ARTIST, newArtist.c_str()); ARTIST[30] = 0; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -95, SEEK_END); if( fwrite(ARTIST, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fseek(fp, -95, SEEK_END); if( fwrite(ARTIST, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: getAlbum ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// success => Album of the ID3 //// //// file not found => FileNotFound //// //// no ID3TAG found => noTAG //// //// //// /////////////////////////////////////////// String getAlbum(String path) { FILE *fp; char ALBUM[31] = ""; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { fseek(fp, -65, SEEK_END); fread(ALBUM, 30, 1, fp); fclose(fp); return (String) ALBUM; } } if(i == 0) return "noTAG"; return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: setAlbum ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new Album //// //// //// //// RETURN-VALUES: //// //// success => writeTAGok //// //// failure => writeTAGfailed //// //// file not found => FileNotFound //// //// //// /////////////////////////////////////////// String setAlbum(String path, String newAlbum) { FILE *fp; char ALBUM[31] = ""; strcpy(ALBUM, newAlbum.c_str()); ALBUM[30] = 0; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -65, SEEK_END); if( fwrite(ALBUM, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fseek(fp, -65, SEEK_END); if( fwrite(ALBUM, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: getComment ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// success => Comment of the ID3 //// //// file not found => FileNotFound //// //// no ID3TAG found => noTAG //// //// //// /////////////////////////////////////////// String getComment(String path) { FILE *fp; char COMMENT[31] = ""; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { fseek(fp, -31, SEEK_END); fread(COMMENT, 30, 1, fp); fclose(fp); return (String) COMMENT; } } if(i == 0) return "noTAG"; return "FileNotFound"; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: setComment ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new Comment //// //// //// //// RETURN-VALUES: //// //// success => writeTAGok //// //// failure => writeTAGfailed //// //// file not found => FileNotFound //// //// //// //////////////////////////////////////////// String setComment(String path, String newComment) { FILE *fp; char COMMENT[31] = ""; strcpy(COMMENT, newComment.c_str()); COMMENT[30] = 0; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -31, SEEK_END); if( fwrite(COMMENT, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fseek(fp, -31, SEEK_END); if( fwrite(COMMENT, 30, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: getYear ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// success => Year of the ID3 //// //// file not found => FileNotFound //// //// no ID3TAG found => noTAG //// //// //// /////////////////////////////////////////// String getYear(String path) { FILE *fp; char YEAR[5] = ""; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { fseek(fp, -35, SEEK_END); fread(YEAR, 4, 1, fp); fclose(fp); return (String) YEAR; } } if(i == 0) return "noTAG"; return "FileNotFound"; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: setYear ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new Year //// //// //// //// RETURN-VALUES: //// //// success => writeTAGok //// //// failure => writeTAGfailed //// //// file not found => FileNotFound //// //// //// //////////////////////////////////////////// String setYear(String path, String newYear) { FILE *fp; char YEAR[5] = ""; strcpy(YEAR, newYear.c_str()); YEAR[4] = 0; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -35, SEEK_END); if( fwrite(YEAR, 4, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fseek(fp, -35, SEEK_END); if( fwrite(YEAR, 4, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } return "FileNotFound"; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: getGenre ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// success => Genre of the ID3 //// //// file not found => FileNotFound //// //// no ID3TAG found => noTAG //// //// //// /////////////////////////////////////////// String getGenre(String path) { FILE *fp; int gen_number; unsigned char GENRE[2] = ""; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { fseek(fp, -1, SEEK_END); fread(GENRE, 1, 1, fp); gen_number = GENRE[0]; fclose(fp); return readGenre(gen_number); } } if(i == 0) return "noTAG"; return "FileNotFound"; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: setGenre ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new Genre //// //// //// //// RETURN-VALUES: //// //// success => writeTAGok //// //// failure => writeTAGfailed //// //// invalid Genre => invalidGenre //// //// file not found => FileNotFound //// //// //// //////////////////////////////////////////// String setGenre(String path, String newGenre) { FILE *fp; unsigned char GENRE[2] = ""; int gen_number = writeGenre(newGenre); if(gen_number == -1) return "invalidGenre"; else GENRE[0] = gen_number; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -1, SEEK_END); if( fwrite(GENRE, 1, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fseek(fp, -1, SEEK_END); if( fwrite(GENRE, 1, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } return "FileNotFound"; } //----------------------------------------- ////////////////////////////////////////////////// //// //// //// type containing full TAG-information //// //// //// ////////////////////////////////////////////////// typedef struct { String Title, Artist, Album, Year, Comment, Genre; int TrackNumber; } fullTAG; //----------------------------------------- ///////////////////////////////////////////// //// //// //// ..:: getFullTAG ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// success => Full ID3TAG as struct //// //// //// //// no Track => TrackNumber = -2 //// //// //// //// file not found => every entry in //// //// the struct contains: //// //// "FileNotFound" //// //// except TrackNumber ==> -1 //// //// no ID3TAG found => every entry in //// //// the struct contains: "noTAG" //// //// except TrackNumber ==> -1 //// //// //// ///////////////////////////////////////////// fullTAG getFullTAG(String path) { fullTAG ID3; FILE *fp; char TITLE[31] = "", ARTIST[31] = "", ALBUM[31] = ""; char YEAR[5] = "", COMMENT[31] = ""; unsigned char GENRE[2] = "", flag[2] = "", tracknumber[2] = ""; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { fseek(fp, -125, SEEK_END); fread(TITLE, 30, 1, fp); fread(ARTIST, 30, 1, fp); fread(ALBUM, 30, 1, fp); fread(YEAR, 4, 1, fp); fread(COMMENT, 30, 1, fp); fread(GENRE, 1, 1, fp); fseek(fp, -3, SEEK_END); fread(flag, 1, 1, fp); fread(tracknumber, 1, 1, fp); fclose(fp); int a = flag[0]; int b = tracknumber[0]; ID3.Title = TITLE; ID3.Artist = ARTIST; ID3.Album = ALBUM; ID3.Year = YEAR; ID3.Comment = COMMENT; if( a == 0 && b != 0) ID3.TrackNumber = b; else ID3.TrackNumber = -2; int gen_number = GENRE[0]; ID3.Genre = readGenre(gen_number); return ID3; } } if(i == 0) { ID3.Title = "noTAG"; ID3.Artist = "noTAG"; ID3.Album = "noTAG"; ID3.Year = "noTAG"; ID3.Comment = "noTAG"; ID3.Genre = "noTAG"; ID3.TrackNumber = -1; return ID3; } ID3.Title = "FileNotFound"; ID3.Artist = "FileNotFound"; ID3.Album = "FileNotFound"; ID3.Year = "FileNotFound"; ID3.Comment = "FileNotFound"; ID3.Genre = "FileNotFound"; ID3.TrackNumber = -1; return ID3; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: setFullTAG ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new Title //// //// AnsiString - new Artist //// //// AnsiString - new Album //// //// AnsiString - new Year //// //// AnsiString - new Comment //// //// AnsiString - new Genre //// //// //// //// RETURN-VALUES: //// //// success => writeTAGok //// //// failure => writeTAGfailed //// //// file not found => FileNotFound //// //// invalid Genre => invalidGenre //// //// //// //////////////////////////////////////////// String setFullTAG(String path, String newTitle, String newArtist, String newAlbum, String newYear, String newComment, String newGenre) { FILE *fp; char TITLE[31] = "", ARTIST[31] = "", ALBUM[31] = ""; char YEAR[5] = "", COMMENT[31] = ""; unsigned char GENRE[2] = ""; strcpy(TITLE, newTitle.c_str()); strcpy(ARTIST, newArtist.c_str()); strcpy(ALBUM, newAlbum.c_str()); strcpy(YEAR, newYear.c_str()); strcpy(COMMENT, newComment.c_str()); int gen_number = writeGenre(newGenre); if(gen_number == -1) return "invalidGenre"; else GENRE[0] = gen_number; TITLE[30] = 0; ARTIST[30] = 0; ALBUM[30] = 0; YEAR[4] = 0; COMMENT[30] = 0; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -125, SEEK_END); fwrite(TITLE, 30, 1, fp); fwrite(ARTIST, 30, 1, fp); fwrite(ALBUM, 30, 1, fp); fwrite(YEAR, 4, 1, fp); fwrite(COMMENT, 30, 1, fp); if( fwrite(GENRE, 1, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fwrite(TITLE, 30, 1, fp); fwrite(ARTIST, 30, 1, fp); fwrite(ALBUM, 30, 1, fp); fwrite(YEAR, 4, 1, fp); fwrite(COMMENT, 30, 1, fp); if( fwrite(GENRE, 1, 1, fp) ) { fclose(fp); return "writeTAGok"; } else { fclose(fp); return "writeTAGfailed"; } } } return "FileNotFound"; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: removeTAG ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// TAG removed => 1 //// //// had already no TAG => 0 //// //// file not found => -1 //// //// //// //////////////////////////////////////////// int removeTAG(String path) { FILE *fp; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { if( !chsize(fileno(fp), filelength( fileno(fp) ) - 128) ) { fclose(fp); return 1; } } } if(i == 0) return 0; return -1; } //----------------------------------------- //////////////////////////////////////////// //// //// //// ..:: getTrack ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// //// //// RETURN-VALUES: //// //// no TAG => -1 //// //// file not found => -2 //// //// no tracknumber available => 0 //// //// tracknumber available => number //// //// //// //// --== MAX bis 255 ==-- //// //// //// //////////////////////////////////////////// int getTrack(String path) { FILE *fp; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "rb") ) ) { unsigned char flag[2] = "", tracknumber[2] = ""; fseek(fp, -3, SEEK_END); fread(flag, 1, 1, fp); fread(tracknumber, 1, 1, fp); int a = flag[0]; int b = tracknumber[0]; if( a == 0 && b != 0) { fclose(fp); return b; } else { fclose(fp); return 0; } } } if(i == 0) return -1; return -2; } //----------------------------------------- /////////////////////////////////////////// //// //// //// ..:: setTrack ::.. //// //// //// //// Parameter: //// //// AnsiString - Path //// //// AnsiString - new number //// //// //// //// RETURN-VALUES: //// //// success => 1 //// //// failure => 0 //// //// file not found => -1 //// //// number to low/high => -2 //// //// //// //// --== MAX bis 255 ==-- //// //// //// /////////////////////////////////////////// int setTrack(String path, String newTrack) { FILE *fp; unsigned char flag[2] = "", tracknumber[2] = ""; int a = atoi(newTrack.c_str()); if(a > 255 || a < 0) return -2; else tracknumber[0] = a; int i = checkID3(path); if(i == 1) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { fseek(fp, -3, SEEK_END); fwrite(flag, 1, 1, fp); if( fwrite(tracknumber, 1, 1, fp) ) { fclose(fp); return 1; } else { fclose(fp); return 0; } } } if(i == 0) { if( (bool) (fp = fopen(path.c_str(), "r+b") ) ) { chsize( fileno(fp), filelength( fileno(fp) ) + 128 ); fseek(fp, -128, SEEK_END); fwrite("TAG", 3, 1, fp); fseek(fp, -3, SEEK_END); fwrite(flag, 1, 1, fp); if( fwrite(tracknumber, 1, 1, fp) ) { fclose(fp); return 1; } else { fclose(fp); return 0; } } } return -1; } //-----------------------------------------
[ Dieser Beitrag wurde am 03.10.2002 um 22:22 Uhr von Midnighter editiert. ]
-
Läuft der Code auch unter c++??? Falls ja, wo krieg ich
#include <vcl.h> #pragma hdrstop #include "ID3_Lib.h" #pragma package(smart_init)
her????
thx, mfg