komplette Datei einlesen...
-
Hi...hab mal wieder ein kleines Problem!
Würde gerne mit hilfe einer kleinen Funktion
die ID3-Tags einer MP3-Datei löschen...Die ID3v2-Tags stehen am Anfang der Datei,
die ID3v1-Tags am Ende der Datei...jetzt hab ich mir überlegt ich öffne die Datei(Binär),spring an das Ende des ID3V2-Tag und lese dann ab hier die komplette Datei in ein Array oder in String ein,
schneide dann das ID3V1-Tag ab, und speicher die MP3 Rohdaten dann wieder in
einer Datei...funktioniert auch einigermaßen aber dauert ewig lange..hab es mit fstream
versucht...- gibt es eine bessere Methode?
- wie würdet ihr so was lösen?void main(){ char datei[]= "C:\\test.mp3"; fstream mp3(datei,ios_base::in|ios_base::binary); if(mp3.good()){ int TagSize = 4192; //Größe des id3v2 Tag char buffer[1]; //Zwischenspeicher string AudioSource = ""; //reine Mp3 datei ohne Tag //Größe ermitteln mp3.seekg(0,ios::end); int AudioSize = mp3.tellg(); // größe ist 3909730 bytes //zum Anfang Springen mp3.seekg(TagSize,ios::beg); //Datei einlesen while(!mp3.eof()){ mp3.read(buffer,1); AudioSource += buffer[0]; } mp3.close(); } else{ cout<<"Fehler beim Datei oeffnen"<<endl; } }
-
mach den zwischenspeicher 4096 bytes groß. dann geht's blitzschnell.
und das speichern im string ist suboptimal. kannste das vermeiden?while(AudioSize>4096){ mp3.read(buffer,4096); ausgabe.write(buffer,4096); AudioSize-=4096; } if(Audiosize){ mp3.read(buffer,Audiosize); ausgabe.write(buffer,Audiosize); }
-
Vielen Dank für die schnelle Hilfe