File m3u

di il
13 risposte

File m3u

Salve avrei bisogno di aiuto per un programma che gestisca file m3u. Purtroppo non saprei dove iniziare....Il compito sarebbe quello di aprire un file m3u attraverso fopen()...dopodiche estrarre in ordine tutti i file mp3 che contiene (saltando quelli che inizinano con # e quelli non apribili o daneggiati).

13 Risposte

  • Re: File m3u

    Ovvero cosa non riesci a fare? conosci il formato .m3u? hai le sue specifiche?
    Inizia a buttare giu del codice.
  • Re: File m3u

    Con fopen() riesco ad aprire il file m3u.....il problema è isolare le string dei file mp3 al suo interno(evitando di estrarre file che iniziano con # o file mp3 che non si riescano ad aprire) inoltre grazie a le string dovrei essere in grado di aprire i file mp3 dal file m3u e isolare le info come artista,surata e ste cose qua.....il problema è appunto che non mi viene nulla quando provo a scrivere codice per isolare le strings dei file mp3 e ad aprire con esse i file mp3....
  • Re: File m3u

    Il tutto in c.....
  • Re: File m3u

    Cioè per dirla breve devo isolare i nomi dei file mp3 nella playlist(tranne quelli che iniziano per # o i file inesistenti o daneggiati) e salvarli per poterli elaborare successivamente....mi serve dunque una funzione per fare ciò
  • Re: File m3u

    E il codice dov'é?
    Fammi vedere cosa stai facendo e dove sei bloccato.
    Postami anche il link da dove vedi le specifiche del formato.
    Questa é la base poi verranno gli aiuti.
  • Re: File m3u

      #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int file_size (char filename[255]){
      unsigned int file_size = 0;
      strip(filename);//gets the size of one file
      FILE* m3u_file = fopen(filename, "r");
    
      if (filename[0] == '#') {
        return 0;//ignore files with # on start
      }
    
      if (m3u_file == NULL) {
        return 0;  //ignore inexisting files
      }
    
      fseek(m3u_file, 0L, SEEK_END);
      file_size = ftell(m3u_file); //return the position of the reader in bytes
      fclose(m3u_file);
      return file_size; //go to EOF
    }
    
    int main(int argc, const char * argv[])
    {
      argv[1] = "playlist.m3u";
      FILE* m3u_file;
      m3u_file= fopen(argv[1], "r");
    
      if (m3u_file == NULL)
      {
        printf("Error: File %s not found.\n", argv[1]);
        return 2;
      }
    
    }
    
  • Re: File m3u

    Manca il link sulle specifiche del file m3u è fondamentale!

    Non è buona norma modificare "argc" e "argv"
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXPATH 256
    
    void fgets_wintoc(char *b)
    {
        int l = strlen(b);
        if ( b[l - 2] == '\r')
            b[l - 2] = '\0';
        else if ( b[l - 1] == '\n')
            b[l - 1] = '\0';
    }
    
    void m3u_parse(FILE* m3u,FILE* d)
    {
        printf("parsing file...\n");
    
        int line = 0;
        char buffer[MAXPATH];
        while ( fgets(buffer,MAXPATH,m3u) )
        {
            fgets_wintoc(buffer);
    
            ++line;
            if (buffer[0] == '#')
            {
                printf("\tskip line(%d) started with #\n",line);
            }
            else
            {
                FILE* test = fopen(buffer,"r");
                if ( test == NULL)
                {
                    printf("\tfile %s at line(%d) can't open\n",buffer,line);
                }
                else
                {
                    printf("\tadd file %s at line(%d)\n",buffer,line);
                    fclose(test);
                    fprintf(d,"%s\n",buffer);
                }
            }
        }
    
        printf("End parser");
    }
    
    int main(int argc, const char * argv[])
    {
        char listpath[MAXPATH];
        char m3upath[MAXPATH];
    
        puts(".M3U\n");
    
        if (argc == 1)
        {
            printf("Use default path:");
            strcpy(m3upath,"playlist.m3u");
            strcpy(listpath,"mylist.txt");
        }
        else
        {
            printf("Use param path:");
            strcpy(m3upath,argv[1]);
            if (argc == 2)
                strcpy(listpath,"mylist.txt");
            else
                strcpy(listpath,argv[2]);
        }
    
        printf("\n\tm3u:%s\n\tlst:%s\n\n",m3upath,listpath);
    
    
        printf("Open file:");
    
        FILE* dest = fopen(listpath, "w");;
        if ( dest == NULL)
        {
            printf("error destination file.\n");
            return -1;
        }
    
        FILE* m3u = fopen(m3upath, "r");
        if ( m3u == NULL)
        {
            fclose(dest);//cordiale
            printf("error m3u file.\n");
            return -1;
        }
    
        printf("ok\n");
    
        m3u_parse(m3u,dest);
    
        //cordiale
        fclose(m3u);
        fclose(dest);
    
        return 0;
    }
    
    Non so se funziona, l'ho scritto al volo,ma sicuramente con un pò di debug andrà.
  • Re: File m3u

    Che intendi per specifiche del file m3u?
  • Re: File m3u

    Quale è lo scopo di void fgets_wintoc(char *b) che usi?
  • Re: File m3u

    erry00777 ha scritto:


    Che intendi per specifiche del file m3u?
    Ma che domanda fa?
    Sta dicendo che stai leggendo o scrivendo un file m3u senza sapere come questo file e' strutturato?
    Cosi' ... a capocchia?



    Come minimo dovresti conoscere a memoria questo:



    STUDIA
    - prima di scrivere anche solo una riga di codice!
    - anzi, prima di pensare di scrivere ...
    - anzi prima di decidere che devi pensare di scrivere ...
    - anzi, piu' in generale: PRIMA!!!!

  • Re: File m3u

    Beh si che avevo dato un'occhiata alla struttura del mio file m3u...nel mio caso è una playlist d'esempio che mi viene fornita per poter effettuare alcuni tastcases scritta in plain text...aprendolo con un editor si ha :
    # comment line
    4.mp3
    5.mp3
    #another comment line
    6.mp3

    Il programma deve essere in grado di gestire file simili....
  • Re: File m3u

    Quale è lo scopo di void fgets_wintoc(char *b) che usi?
    dato che non sapevo le specifiche allora quella funzione si assicura che alla fine del buffer non ci sia ne '\r' ne '\n'

    Ma va? veramente???? l'ho scritto sul notepad senza nemmeno compilare...
  • Re: File m3u

    Grazie
Devi accedere o registrarti per scrivere nel forum
13 risposte