Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, faq, sources pour .NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2012, 02h07   #1
Rachel
Expert Confirmé
 
Avatar de Rachel
 
Femme yannick inizan
Padawan
Inscription : février 2011
Messages : 443
Détails du profil
Informations personnelles :
Nom : Femme yannick inizan
Âge : 26
Localisation : France, Cher (Centre)

Informations professionnelles :
Activité : Padawan
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 443
Points : 3 629
Points : 3 629
Envoyer un message via MSN à Rachel Envoyer un message via Skype™ à Rachel
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
Type de fichier : zip id3Tag.zip (5,6 Ko, 22 affichages)
__________________
(marquer un post résolu si vous êtes satisfait de la réponse )
mon dépôt (mono, monodevelop, ...) : deb(-src) http://breizhodrome.free.fr raring main
ma page github : https://github.com/inizan-yannick
Rachel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 11h04   #2
LeCygne
Membre habitué
 
Avatar de LeCygne
 
Homme Raphael DAVID
Développeur .NET
Inscription : juin 2010
Messages : 67
Détails du profil
Informations personnelles :
Nom : Homme Raphael DAVID
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : juin 2010
Messages : 67
Points : 115
Points : 115
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 :
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 :
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 :
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.
LeCygne est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 12/04/2012, 09h48   #3
Rachel
Expert Confirmé
 
Avatar de Rachel
 
Femme yannick inizan
Padawan
Inscription : février 2011
Messages : 443
Détails du profil
Informations personnelles :
Nom : Femme yannick inizan
Âge : 26
Localisation : France, Cher (Centre)

Informations professionnelles :
Activité : Padawan
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 443
Points : 3 629
Points : 3 629
Envoyer un message via MSN à Rachel Envoyer un message via Skype™ à Rachel
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 )
mon dépôt (mono, monodevelop, ...) : deb(-src) http://breizhodrome.free.fr raring main
ma page github : https://github.com/inizan-yannick
Rachel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h33.


 
 
 
 
Partenaires

Hébergement Web