Newsgroup: it.comp.lang.c
Titolo: read tag mp3

Premetto che sono un novellino  e non so praticamente nulla di c.
Sto cercando di fare un programma per leggere la tag di un file mp3.In
particolare della tag vorrei leggere solo il nome della canzone e dell
'artista.Trovandosi la tag negli ultimi 128 byte del file , e precisamente
il titolo nei primi 30 byte di questi 128,e il nome dell'artista nei 30
seguenti, ho scritto questo codice scopiazzando un pò qua  là.Come
compilatore uso Lcc per windows, che me lo linka e compila senza riportare
errori,ma quando lo vado ad eseguire dal prompt in win 95, mi dice "il
programma ha eseguito un operazione non valida e sarà terminato".Se c'è
qualcuno che può darmi una mano è il benvenuto.Ho allegato anche
l'eseguibile(9k).
#include<stdio.h>
#include<io.h>
FILE  *mp3_file;
void main(void);
void main(void)
{
char Title[30];
char Artist[30];
int i = 0;
fseek(mp3_file, -128, SEEK_END);
for(i = 0; i < 30; i++)
 Title[i] = fgetc(mp3_file);
    Title[29] = 0;
for(i = 0; i<30; i++)
 Artist[i] = fgetc(mp3_file);
    Artist[29] = 0;
fclose(mp3_file);
printf("\n                  Title=%s",Title);
printf("\n                 Artist=%s",Artist);
}

#include<stdio.h>
/* l'include di io.h mi sembra inutile e quindi l'ho eliminato*/
 
FILE  *mp3_file;
/* cambiato da void main a int main. Il prototipo non credo che serva a 
   niente */
int main(void) 
 {
 
 char Title[30];
 char Artist[30];
 int i = 0;
 /* Il file va aperto, altrimenti non puoi eseguire fseek e fgetc!!! */
 mp3_file = fopen("pippo.mp3","r");   /* al posto di pippo.mp3 ci va il
                                         nome del tuo file */
 /* controllo su apertura file */
 if(mp3_FILE == NULL) { 
    perror("impossibile aprire il file pippo.mp3");
    return -1;
 }
 
 
 fseek(mp3_file, -128, SEEK_END);
 
 
 for(i = 0; i < 30; i++)
  Title[i] = fgetc(mp3_file);
     Title[29] = 0;
 
 for(i = 0; i<30; i++)
  Artist[i] = fgetc(mp3_file);
     Artist[29] = 0;
 
 fclose(mp3_file);
 
 
 printf("\n                  Title=%s",Title);
 printf("\n                 Artist=%s",Artist);
 
 return 0; /* avendo cambiato da void main a int main */ 
 }
 
 

 wrote:
[ Snip ]
G>Sto cercando di fare un programma per leggere la tag di un file mp3.
Seguendo delle indicazioni (non so nulla del formato MP3) ho
fatto il seguente programmino che mi dicono funziona ;)
--------------------------------------------------------------
/* Legge (se presenti) le informazioni di un file MP3  */
/* @1999 Andrea Foco - 
f...@lycosmail.com
               */
#include <stdio.h>
#include <string.h>
#define BUFFLEN 128
struct info {
                char TAG[3];
                char titolo[30];
                char artista[30];
                char album[30];
                char anno[4];
                char commento[30];
                unsigned char genere;
};
int main(int argc, char *argv[])
{
        FILE *mp3_file;
        char buffer[BUFFLEN];
        if(argc != 2) {
                fprintf(stderr, "Utilizzo: %s <file_mp3>\n", argv[0]);
                exit(1);
        }
        if ((mp3_file = fopen(argv[1], "r")) == NULL) {
                perror("fopen"); exit(1);
        }
        if(fseek(mp3_file, (long)-128, SEEK_END) == (int)-1) {
                perror("fseek"); exit(1);
        }
        if (fread(buffer, 1, BUFFLEN, mp3_file) != BUFFLEN) {
                perror("fread"); exit(1);
        }
        fclose(mp3_file);
        if(strncmp(buffer, "TAG", 3) == 0) {
                struct info *i = (struct info *)buffer;
                printf("\tArtista  : %.30s\n\tTitolo   : %.30s"
                        "\n\tAlbum    : %.30s\n\tAnno     : %.4s"
                        "\n\tCommento : %.30s\n",
                        i->artista, i->titolo, i->album,
                        i->anno, i->commento);
        } else
                puts("Nessuna informazione disponibile");
        return 0;
}
--------------------------------------------------------------
Vedi un po' se ti puo' servire.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)