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


Log in to reply