nächstes Problem! =>id3 Tags<=



  • Wir ihr ja vielleicht wisst bastel ich grad ne verkettete Liste
    hatte schon so einige Probleme damit
    und hier kommt das nächste:

    würde gern die id3 Tags von mp3´s auslesen und die Daten
    an meine Liste hängen.

    Hab schon ein bißchen rum probiert aber es liest nur Müll
    aus...vielleicht wisst ihr ja warum?

    Meine DATEN Struktur:

    struct DATEN
    
    {
    	char tag[3];
    	char Titel[31];
    	char Interpret[31];
    	char Album[31];
    	char Jahr[4];
    	char Track[31];
    	char Genre[31];
    	char Kommentar[31];
    
    };
    

    und meine Funktion um die id3 Tags auszulesen:

    struct DATEN *id3()
    
    {
    
    		struct DATEN *neudaten;
    		neudaten=(struct DATEN*)malloc(sizeof(struct DATEN));
    
            FILE    *datei_ptr; 
            char    ver[4];
    
            datei_ptr = fopen("test.mp3", "rb"); 
    
            if ( datei_ptr != 0) 
    
            { 
    
                /* Nach ID3v2 Tag suchen*/ 
                fseek(datei_ptr,0,SEEK_SET); 
                fread(ver,3,1,datei_ptr); 
    
                if (strcmp(ver, "ID3") == 0)
    	   {
                    printf("ID3v2 Tag vorhanden!");
    	   }
    
                /* Nach ID3v1 Tag suchen */ 
                if (fseek(datei_ptr,-128,SEEK_END) == 0) 
    	   { 
    
                    fread(neudaten->tag,3,1,datei_ptr); 
    
                    if (strcmp(neudaten->tag, "TAG") == 0) 
    	       { 
                      fread(neudaten->Titel,30,datei_ptr); 
                      fread(neudaten->Interpret,30,1,datei_ptr); 
                      fread(neudaten->Album,30,1,datei_ptr); 
                      fread(neudaten->Jahr,4,1,datei_ptr); 
                      fread(neudaten->Kommentar,29,1,datei_ptr);    
    	         fread(neudaten->Genre, sizeof(unsigned char), 1, datei_ptr); 
                      fread(neudaten->Track, sizeof(unsigned char), 1, datei_ptr); 
                      neudaten->Titel[30]='\0'; 
                      neudaten->Interpret[30]='\0'; 
                      neudaten->Album[30]='\0'; 
                      neudaten->Jahr[4]='\0'; 
                      neudaten->Kommentar[30]='\0';
    
                    }    
    
                } 
                else 
    	   {
                    printf("Zeiger konnte nicht gesetzt werden!"); 
    				fclose(datei_ptr); 
                }
            } 
    
            else 
            {
                printf("Fehler beim öffnen der Datei!"); 
            }
    
    		return neudaten;
    
    }
    


  • strcmp() erwartet, dass der String mit dem Stringendezeichen abgeschlossen ist, fread() macht aber nicht automatisch das Stringendezeichen hinten dran (wär ja auch schmarrn). Du hast somit 2 Möglichkeiten. Entweder du machst das Stringendezeichen (0 oder '\0') selber hinten dran (also ver[3] = 0) oder du vergleichst mit strncmp(). Diese Funktion vergleicht entweder bis es das Stringendezeichen liest oder bis zu der angegebenen maximalen Anzahl an Zeichen. In deinem Fall wären das 3.


Anmelden zum Antworten