IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez .NET Discussion :

lecture et écriture des tags id3 d'un fichier mp3 [Sources]


Sujet :

Contribuez .NET

  1. #1
    Inactif  

    Homme Profil pro
    développeur Vala
    Inscrit en
    Février 2011
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : développeur Vala
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 478
    Points : 3 700
    Points
    3 700
    Par défaut lecture et écriture des tags id3 d'un fichier mp3
    Bonjour
    voilà, j'ai décidé de poster ce premier code, en espérant que ce ne soit pas le dernier .
    ça permettra à ceux qui ont développer un lecteur mp3 d'ajouter ce code afin de pouvoir par exemple afficher les informations sur me mp3 en cours de lecture.
    les remarques et critiques seront les bienvenues .
    si quelqu'un a une idée d'amélioration, elle sera implémentée et son pseudo cité dans le commentaire du code
    Fichiers attachés Fichiers attachés
    (marquer un post résolu si vous êtes satisfait de la réponse )
    ma page launchpad https://launchpad.net/~inizan-yannick
    ma page github : https://github.com/inizan-yannick

  2. #2
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut Quelques suggestions d'architecture
    Bonjour,

    Cela fait quelques années que je projette d'ajouter proprement un Tag Id3 à mes fichiers mp3 d'après l'arborescence où il se trouve. (Car je leur enlève toujours leur tag et les range soigneusement). J'ai donc regardé plutôt attentivement votre code hier soir.

    La version 1 des Tag Id3 est bien lue. Je n'ai pas testé la deuxième: je vous fais confiance sur cette partie que vous semblez parfaitement maitriser.

    Je vous propose de vous suggérer quelques petites choses sur l'architecture :

    1) Vous construisez une classe Id3, dans laquelle vous placez une propriété pour le chemin du fichier (je ne me souviens plus du nom exacte des variables, veuillez m'en excuser). Cette construction suggère que le fichier est contenu dans le tag. Je pense qu'il vaudrait mieux faire l'inverse : Un fichier qui contient un tag Id3. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Mp3File
        {
        string filePath; // Chemin du fichier.
        bool isMp3File; // Vrai si le fichier est un mp3.
        Id3 id3; // tag Id3 du fichier "null" le fichier n'a pas de Tag Id3
        }
    Ainsi, vous pourrez retirer le chemin de fichier de la classe Id3 (Et peut être aussi le booleen indiquant si le Tag Id3 est présent ou non) et ne conserver que les variables dont le nom commence par "_id3". Je pense d'ailleurs que ce n'est pas un hasard si leur nom commence justement par "_id3" et que vous avez bien sentit quelque chose là. Ce début "_id3" est cependant affreusement redondant avec le nom de la classe. Il deviendra complètement inutile. N’hésitez pas à l'enlever.

    2) Vous construisez deux classes qui hérite de cette fameuse classe Id3: la version 1 "Id3v1" et la version 2 "Id3v2". Informatiquement, c'est très bien. Mais fonctionnellement, comment fait on pour manipuler à la fois la version 1 et la version 2 du tag dans un même fichier ? Si je reprends le bout de code ci-dessus, j'ai tout de suite envie de le transformer comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Mp3File
        {
        string filePath; // Chemin du fichier.
        bool isMp3File; // Vrai si le fichier est un mp3.
        Id3v1 id3v1; // tag Id3v1 du fichier "null" le fichier n'a pas de Tag Id3v1
        Id3v2 id3v2; // tag Id3v2 du fichier "null" le fichier n'a pas de Tag Id3v2
        }
    3) Lorsque j'ai utilisé la classe Id3v1, ma première intention a été d'instancier une classe sans lui préciser de fichier. Et là pas possible. Il est vrai que le vide est difficile à gérer en informatique. Pourquoi ne pas laisser la propriété "Set" du chemin de fichier en écriture et lancer l'initialisation des variables dans celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    class Mp3File
        {
        string filePath; // Chemin du fichier.
        bool isMp3File; // Vrai si le fichier est un mp3.
        Id3v1 id3v1; // tag Id3v1 du fichier "null" le fichier n'a pas de Tag Id3v1
        Id3v2 id3v2; // tag Id3v2 du fichier "null" le fichier n'a pas de Tag Id3v2
     
        Mp3File ( ) : this("");
            {
            }
     
        Mp3File (string filePath)
            {
            this.FilePath = filePath;
            }
     
        public string FilePath
            {
            get ...
            set { this.SetFilePath(value); }
            }
     
        protected void SetFilePath ( string filePath )
            {
            if (filePath non valide)
                {
                this.SetNotMp3File();
                }
            else
                {
                this.filePath = filePath;
                this.FaireLeGrosDuTravail...
                }
            }
     
         protected void SetNotMp3File()
            {
            this.isMp3File= false;
            this.id3v1 = null;
            this.id3v2 = null;
            }
     
        // Un peu de bonus pendant que je suis chaud ;-)
        public bool Id3v1TagExists
            {
            get { return (this.id3v1 != null); }
            set { if (value != this.Id3v1TagExists) {this.FaireEncoreDuTravail...} }
            }
     
        public bool Id3v2TagExists
            {
            get { return (this.id3v2 != null); }
            set { if (value != this.Id3v2TagExists) {this.FaireEncoreDuTravail...} }
            }
     
       }
    Voila pour ces quelques suggestions, en espérant avoir été le plus constructif possible. En tout cas je mets de coté votre code qui devrait m'être utile.

  3. #3
    Inactif  

    Homme Profil pro
    développeur Vala
    Inscrit en
    Février 2011
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : développeur Vala
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 478
    Points : 3 700
    Points
    3 700
    Par défaut
    Je déterre ce topic juste pour informer que la librairie taglib-sharp est bien plus aboutie que la mienne http://download.banshee.fm/taglib-sharp disponible aussi bien pour linux que windows
    (marquer un post résolu si vous êtes satisfait de la réponse )
    ma page launchpad https://launchpad.net/~inizan-yannick
    ma page github : https://github.com/inizan-yannick

Discussions similaires

  1. Lecture et écriture des données dans une carte à puce
    Par junior222 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 30/11/2015, 15h57
  2. lecture et écriture des tags d'un fichier audio
    Par Rachel dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 08/01/2012, 06h30
  3. [Rxtx] Lecture et écriture des données envoyées par Rs232
    Par Marou77 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 21/04/2011, 10h50
  4. Récupération des tags id3 de fichiers ogg
    Par N_BaH dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2009, 03h06
  5. Lire des tags ID3 sur un fichier distant
    Par thms92 dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 15/03/2009, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo