mp3-Tag auslesen und dateien umbenennen



  • Kann The GodFather nur empfehlen.



  • ist auch nicht schwer selbst zu schreiben, die letzten 128 bytes einer mp3 beinhalten den mp3-tag (version 1), falls die ersten 3 Bytes dieser 128 Bytes den Inhalt "TAG" aufweisen.



  • Herr-Vorragend schrieb:

    ist auch nicht schwer selbst zu schreiben, die letzten 128 bytes einer mp3 beinhalten den mp3-tag (version 1), falls die ersten 3 Bytes dieser 128 Bytes den Inhalt "TAG" aufweisen.

    💡 vielleicht sollte man mal einen beitrag schreiben wie man richtig den tag ausliesst (wenn keine lib erwünscht ist) und dann flenders bitten diesen in die faq zu schieben. 😉



  • miller_m schrieb:

    Herr-Vorragend schrieb:

    ist auch nicht schwer selbst zu schreiben, die letzten 128 bytes einer mp3 beinhalten den mp3-tag (version 1), falls die ersten 3 Bytes dieser 128 Bytes den Inhalt "TAG" aufweisen.

    💡 vielleicht sollte man mal einen beitrag schreiben wie man richtig den tag ausliesst (wenn keine lib erwünscht ist) und dann flenders bitten diesen in die faq zu schieben. 😉

    Gerne. Allerdings würde das eher in die FAQ zu Rund um die Programmierung gehören.
    ID3-tags sind schließlich unabhängig vom Betriebssystem. 🙂



  • cd9000 schrieb:

    Gerne. Allerdings würde das eher in die FAQ zu Rund um die Programmierung gehören.
    ID3-tags sind schließlich unabhängig vom Betriebssystem. 🙂

    ich meinte natürlich nicht mich 😉
    besitze noch nicht mal ne einzige mp3 (kein bezug dazu, warum auch immer 🙄 )



  • Wieso sollte man dazu ein Beispiel erstellen?

    Der Id3Tag sieht folgendermassen aus:

    Byte 1-3 = ID 'TAG'
    Byte 4-33 = Titel / Title
    Byte 34-63 = Artist
    Byte 64-93 = Album
    Byte 94-97 = Jahr / Year
    Byte 98-127 = Kommentar / Comment
    Byte 128 = Genre

    Das sollte doch vollkommen ausreichen!?



  • ist ganz einfach, die falls die letzten 128 bytes einen id3-tag beschreiben sieht das so aus:

    3 Byte für "TAG"
    30 Bytes für den Titel
    30 Bytes für den Artist
    30 Bytes für das Album
    4 Bytes für das Jahr
    30 Bytes für ein Kommentar
    1 Byte für die ID des Genres

    = 128. 😉

    MfG, Herr-Vorragend

    edit: oh, war wohl zu langsam 🙂



  • mp3-tag schrieb:

    Wieso sollte man dazu ein Beispiel erstellen?

    für die fragenden 😮



  • Herr-Vorragend schrieb:

    ist ganz einfach, die falls die letzten 128 bytes einen id3-tag beschreiben sieht das so aus:

    3 Byte für "TAG"
    30 Bytes für den Titel
    30 Bytes für den Artist
    30 Bytes für das Album
    4 Bytes für das Jahr
    30 Bytes für ein Kommentar
    1 Byte für die ID des Genres

    = 128. 😉

    Ist nur bei ID3v1 so, bei ID3v2 sieht das ganze ein bißchen anders aus, und deshalb habe ich auch geraten, die id3lib zu benutzen... das selbst zu machen ist ein bißchen zu aufwendig.

    Paul



  • PaulW schrieb:

    ... und deshalb habe ich auch geraten, die id3lib zu benutzen... das selbst zu machen ist ein bißchen zu aufwendig.

    Für wem ist es zu Aufwendig? Für uns alle?
    Gut dann bleiben wir auf Hello World und dem eigenen Editor sitzen.

    Last euch nicht bremsen, macht es selbst.



  • ... also alle Mann HexEditor/Editor und Firefox anschmeißen und ab gehts an das analysieren von MP3 Datein 😃



  • MichaM. schrieb:

    PaulW schrieb:

    ... und deshalb habe ich auch geraten, die id3lib zu benutzen... das selbst zu machen ist ein bißchen zu aufwendig.

    Für wem ist es zu Aufwendig? Für uns alle?
    Gut dann bleiben wir auf Hello World und dem eigenen Editor sitzen.

    Last euch nicht bremsen, macht es selbst.

    Für euch alle nicht, für mich wäre es das (ich habs zwar hingekriegt, war aber keine schöne Lösung, hab dann die id3lib gefunden/genommen)!
    Bitte, nur zu, aber wozu alles doppelt und dreifach machen ;)?

    Der Aufbau der ID3 Tags steht auf ID3.org...



  • sorry leuz, aber ich bin erst heute dazu gekommen hier was zu posten...
    ich wollte eigentlich noch meinen ersten post ändern, aber dann hab ichs vergessen... 😞
    jetzt hab ich nurmehr ein problem mit dem proggi:
    das Umbenennen...
    ich mach das mit MoveFile (zumindest hab ich das vor)
    aber es funktioniert nicht...
    der Fehler ist beim 1. string

    MoveFile(datPath /*Fehler*/, newPath);
    

    Was kann da falsch sein ??
    mfg domi



  • böserwolf schrieb:

    Was kann da falsch sein ??

    alles ⚠
    genau fehlerbeschreibung ⚠
    compiler oder linkererror ⚠
    laufzeitfehler ⚠
    welcher datentyp ⚠
    null terminiert ⚠
    gültig ⚠
    ...



  • böserwolf schrieb:

    aber es funktioniert nicht...
    der Fehler ist beim 1. string

    MoveFile(datPath /*Fehler*/, newPath);
    

    Was kann da falsch sein ??

    Deine Fehlerbeschreibung ist echt klasse 😉 🤡



  • ok.. ich weiß, dass ich nicht grad der beste bin...

    ich übergebe dem MoveFile einen String mit dem Pfad und Dateinamen einer mp3-datei
    "C:\spastelruther_katz.mp3"
    und wenn ich den Pfad selbst eingib dann gehts
    ach ja: Der Compiler meldet keinen Error es funktioniert nur nicht...

    Code kommt bald (ist am anderen PC...)



  • Rückgabewert von MoveFile ???



  • Und falls FALSE ( 🙂 ), dann GetLastError() prüfen.



  • // Da gibts noch die übliche include-geschichte
    // und dann gibts da nock eine 128-zeichen struktur (mp3-tag/für die letzten 128
    // Zeichen der mp3-datei
    
    int find_last_point(char a[]); //liefert Index des letzten Punktes zurück
    bool check_if_mp3(char a[]);   //prüft, ob am Ende des Namens ".mp3" steht
    
    int main()
    {
        HANDLE fHandle;
        WIN32_FIND_DATA wfd;
        char filePath[MAX_PATH];
        char anhang[MAX_PATH];
        id3 test;
        int i;
        char newPath[MAX_PATH];
        ifstream datei;
        char szProgramPath[MAX_PATH];
    
        GetModuleFileName(NULL, (LPSTR)szProgramPath, MAX_PATH);
        strcpy(strrchr((const char *)szProgramPath, '\\')+1, "");
        strcat(szProgramPath,"*");
    
        fHandle=FindFirstFile(szProgramPath,&wfd);
        FindNextFile(fHandle,&wfd);
        while (FindNextFile(fHandle,&wfd))
        {
            if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            {
                if(check_if_mp3(wfd.cFileName))
                {
                    datei.open(wfd.cFileName);
                    datei.seekg(-128,ios::end);
                    datei.read(test.tag,3);
                    datei.read(test.title,30);
                    datei.read(test.artist,30);
                    datei.read(test.album,30);
                    datei.read(test.year,4);
                    datei.read(test.komment,28);
                    datei.read(test.track,2);
                    datei.read(test.genre,1);
                    strcpy(filePath,szProgramPath);
                    filePath[strlen(filePath)-1]='\0';
                    strcat(filePath,wfd.cFileName);
                    strcpy(newPath,szProgramPath);
                    newPath[strlen(newPath)-1]='\0';
                    sprintf(anhang,"%s - %s.mp3",test.artist,test.title);
                    strcat(newPath,anhang);
                    cout << "Umbenannt von " << endl << wfd.cFileName << endl << "zu" << endl << newPath << endl << endl;
                    MoveFile(filePath, newPath);
                    cout << filePath << endl;
                    ShellExecute(NULL,"open",filePath,NULL,NULL,SW_SHOWNORMAL);
                    datei.close();
                }
            }
        }
        FindClose(fHandle);
    
        cout << endl << endl << "Ende";
        getch();
        return 0;
    }
    


  • na der wückgabewert ist natürlich NULL (oder das wenns nicht geht) wenns net geht...
    (sonst hätt ich das problem nicht)

    aber ich weiß den GRUND nicht...
    😞 😞 😞


Anmelden zum Antworten