Journal ID3v1

Posté par  .
Étiquettes : aucune
0
5
nov.
2003
Bonjour mon petit journal,

Bon, voilà, je suis en train d'écrire un petit programme en C qui me permet de télécharger une émission radio en mp3. Donc, pour la partie download, pas de souci, cURL est mon ami (de fraîche date, mais bon, ce n'est pas important). Maintenant, je souhaiterais tagger le fichier mp3 downloadé, afin d'assurer son classement. Mais voilà, cruel dilemne, dois-je utiliser id3lib et son id3v2 ou alors me tourner vers un simple id3v1. J'ai choisi l'id3v1, qui me semble plus simple à implémenter. Je me suis donc mis en quête de quelques fichiers sources pour l'inspiration, et j'ai trouvé dans grip et dans id3edit des exemples intéressants. Malheureusement, la structure diffère.
Pour grip:
typedef struct _id3_tag {
char tag[3];
char title[30];
char artist[30];
char album[30];
char year[4];
char comment[29];
unsigned char tracknum;
unsigned char genre;
} ID3v1Tag;

Pour id3edit :
#define HEADER_SIZE 3
#define SONG_SIZE 30
#define ARTIST_SIZE 30
#define ALBUM_SIZE 30
#define YEAR_SIZE 4
#define COMMENT_SIZE 28
#define TRACK_SIZE 1
#define GENRE_SIZE 1

struct regular_id3tag {
char header[HEADER_SIZE+BYTE];
char song[SONG_SIZE+BYTE];
char artist[ARTIST_SIZE+BYTE];
char album[ALBUM_SIZE+BYTE];
char year[YEAR_SIZE+BYTE];
char comment[COMMENT_SIZE+BYTE];
unsigned char track;
unsigned char genre;
};
typedef struct regular_id3tag regular_id3tag;

Donc, voilà, avez-vous une idée, des sources d'infos, bref, un truc qui me permettrai de voir plus clair et de sortir du paté ? Dans le pire des cas, je me tourne vers id3lib, mais bon, j'ai pas envie de dépendre d'une bibliothèque en plus, surtout pour le bête truc que je veux faire.
  • # Re: ID3v1

    Posté par  (site web personnel) . Évalué à 1.

    c pas pour etre desagreable hein, mais pour moi ca se ressemble drolement tout
    cela. a part pe que id3edit stocke des chaines AZT partout et grip utilise une taille fixe.
    • [^] # Re: ID3v1

      Posté par  (site web personnel) . Évalué à 1.

      et pis utiliser une librarie d'eviterai les erreurs dues a une implementation
      rapide du sujet.

      pis je serai toi je ferai cela en perl, avec les modules existants ca doit etre
      l'affaire de quelques lignes.
  • # Re: ID3v1

    Posté par  (site web personnel) . Évalué à 1.

    Effectivement ça se ressemble beaucoup comme le fait remarquer Benoit.
    A part le 0 terminal, la seule "taille" qui diffère c'est le COMMENT_SIZE (28 ou 29).
    En fait il suffit de lire la spec pour comprendre d'où ça vient (le 0 est déjà dans le commentaire du ID3v1.1, donc il n'est pas nécessaire de le rajouter.

    http://www.id3.org/id3v1.html(...)

    Après je pense que si ça te suffit, contentes toi du ID3v1.x qui est très simple à implémenter et qui ne justifie pas d'utiliser une librairie... Ce qui n'est pas trop le cas du ID3v2.x !
    (je m'y suis un peu frotté en faisant ça : http://royale.zerezo.com/fapg/(...) ;-))
    • [^] # Re: ID3v1

      Posté par  . Évalué à 1.

      Oui, en fait, j'ai oublié de prendre un peu de recul en écrivant le journal, et de fait, je me suis mal fait comprendre.
      En réalité, je ne comprenais pas d'où venait la différence de taille entre les deux ; j'avais bien compris le principe des 128 octets, mais si d'un côté, c'est 127 et de l'autre 128, les tags sont pourris !
      Et lisant la norme (merci pour le lien ; je le connaissais, mais depuis le matin je le recherchais sans grande réussite) ; et bien, j'ai su quoi chercher dans les sources d'id3edit : un petit fputc(0, fp) juste après l'écriture du champ comment. Un détail qui compte beaucoup !
      Mais bon, je vais aller tester mon code, et s'il marche, aller lire le code de fapg (cela me fera toujours du bien) ;-))
  • # Re: ID3v1

    Posté par  . Évalué à 1.

    Je vais peut-être dire une annerie, mais franchement, je ne comprends pas pourquoi tu fais ça en C.
    C'est quand même le truc qui se fait vraiment très façilement (disons, en 30mn) en python ou ruby (voire même en perl, mais bon)...

    BIP !
    TROLL TARGETED
    • [^] # Re: ID3v1

      Posté par  . Évalué à 1.

      Ouh le vilain troll.
      En plus, c'est un vieux troll, tout poilu et dégoulinant de bave.
      Malgré tout, je ne résiste pas à répondre. J'ai dans un premier temps réaliser un script bash réalisant cette opération (relativement simple, un coup de wget, un coup d'id3edit et hop, c'est emballé !). Mais bon, je voulais recommencer à programmer. De préférence en C car c'est le langage que j'ai appris scolairement, et finalement, c'est encore celui avec lequel je me sens le mieux. Donc, pour occuper mes soirées, j'ai recommencé à potasser mes bouquins de C, puis j'ai découvert cURL, puis j'ai downloadé quelques softs qui l'utilisaient et finalement, j'ai jeté quelques lignes de codes qui me permettaient de tester la bête, et après quelques heures, je suis arrivé à mon petit programme. Alors, j'ai commencé à réfléchir au moyen de remplacer id3edit, et donc, voilà, je me suis penché sur son code.
      Donc, mon premier choix pour ce genre d'application était bien un langage de script, mais bon, mes lectures de code m'ont entraîné un peu plus loin. Et je ne le regrette pas. Je relis du code comme il y a quelques temps, et je suis content ;-))

      TROLL DESTROYED
      SAME PLAYER PLAY AGAIN...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.