Récupération de tags mp3

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 450 fois - Téléchargée 27 fois

Contenu du snippet

Récupération des différents tags du fichier MP3 en paramêtre (chemin complet)

- public string getAlbum(string MP3)
- public string getGenre(string MP3)
- public string getArtiste(string MP3)
- public string getTitre(string MP3)

Source / Exemple :


class MesOutils
    {
        public MesOutils()
        {
        }

        public string getAlbum(string MP3)
        {
            FileStream FS = new FileStream(MP3, FileMode.Open);
            byte[] Buffer = new byte[4];
            int[] nb = new int[4];
            FS.Seek(0, SeekOrigin.Begin);
            FS.Read(Buffer, 0, 3);
            Encoding instEncoding = System.Text.Encoding.GetEncoding(1252);
            string filetype = instEncoding.GetString(Buffer);
            string valTag;
            int fs = 1;
            if (filetype.StartsWith("ID3"))
            {
                FS.Seek(6, SeekOrigin.Begin);
                FS.Read(Buffer, 0, 4);

                nb[3] = Buffer[3] | ((Buffer[2] & 1) << 7);
                nb[2] = ((Buffer[2] >> 1) & 63) | ((Buffer[1] & 3) << 6);
                nb[1] = ((Buffer[1] >> 2) & 31) | ((Buffer[0] & 7) << 5);
                nb[0] = ((Buffer[0] >> 3) & 15);

                ulong FrameSize = 10 + (ulong)nb[3] | ((ulong)nb[2] << 8) | ((ulong)nb[1] << 16) | ((ulong)nb[0] << 24);

                int TagSize = Convert.ToInt32(FrameSize);
                string flag;
                int i = 0;

                while (i < TagSize && fs > 0)
                {
                    i += 10;
                    FS.Seek(i, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    flag = instEncoding.GetString(Buffer);
                    FS.Seek(i + 4, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    fs = Convert.ToInt32(((uint)Buffer[0] << 24) + ((uint)Buffer[1] << 16) + ((uint)Buffer[2] << 8) + ((uint)Buffer[3]));

                    byte[] s = new byte[fs];
                    FS.Seek(i + 10, SeekOrigin.Begin);
                    FS.Read(s, 0, fs);
                    Decoder d = Encoding.GetEncoding("iso-8859-1").GetDecoder();

                    char[] chars = new Char[d.GetCharCount(s, 0, fs)];
                    int charLen = d.GetChars(s, 0, s.Length, chars, 0);

                    valTag = "";
                    for (int j = 0; j < chars.Length; j++)
                    {
                        if (chars[j].ToString() != "\0")
                        {
                            valTag += chars[j].ToString();
                        }
                    }

                    if (flag.CompareTo("TALB") == 0)
                    {
                        FS.Close();
                        return valTag.TrimEnd('\0');
                    }
                    i += fs;
                }
                FS.Close();
                return "";
            }
            else { FS.Close(); return ""; }
        }
        public string getGenre(string MP3)
        {
            FileStream FS = new FileStream(MP3, FileMode.Open);
            byte[] Buffer = new byte[4];
            int[] nb = new int[4];
            FS.Seek(0, SeekOrigin.Begin);
            FS.Read(Buffer, 0, 3);
            Encoding instEncoding = System.Text.Encoding.GetEncoding(1252);
            string filetype = instEncoding.GetString(Buffer);
            string valTag;
            int fs = 1;
            if (filetype.StartsWith("ID3"))
            {
                FS.Seek(6, SeekOrigin.Begin);
                FS.Read(Buffer, 0, 4);

                nb[3] = Buffer[3] | ((Buffer[2] & 1) << 7);
                nb[2] = ((Buffer[2] >> 1) & 63) | ((Buffer[1] & 3) << 6);
                nb[1] = ((Buffer[1] >> 2) & 31) | ((Buffer[0] & 7) << 5);
                nb[0] = ((Buffer[0] >> 3) & 15);

                ulong FrameSize = 10 + (ulong)nb[3] | ((ulong)nb[2] << 8) | ((ulong)nb[1] << 16) | ((ulong)nb[0] << 24);

                int TagSize = Convert.ToInt32(FrameSize);
                string flag;
                int i = 0;

                while (i < TagSize && fs > 0)
                {
                    i += 10;
                    FS.Seek(i, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    flag = instEncoding.GetString(Buffer);
                    FS.Seek(i + 4, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    fs = Convert.ToInt32(((uint)Buffer[0] << 24) + ((uint)Buffer[1] << 16) + ((uint)Buffer[2] << 8) + ((uint)Buffer[3]));

                    byte[] s = new byte[fs];
                    FS.Seek(i + 10, SeekOrigin.Begin);
                    FS.Read(s, 0, fs);
                    Decoder d = Encoding.GetEncoding("iso-8859-1").GetDecoder();

                    char[] chars = new Char[d.GetCharCount(s, 0, fs)];
                    int charLen = d.GetChars(s, 0, s.Length, chars, 0);

                    valTag = "";
                    for (int j = 0; j < chars.Length; j++)
                    {
                        if (chars[j].ToString() != "\0")
                        {
                            valTag += chars[j].ToString();
                        }
                    }

                    if (flag.CompareTo("TCON") == 0)
                    {
                        FS.Close();
                        return valTag.TrimEnd('\0');
                    }
                    i += fs;
                }
                FS.Close();
                return "";
            }
            else { FS.Close(); return ""; }
        }
        public string getArtiste(string MP3)
        {
            FileStream FS = new FileStream(MP3, FileMode.Open);
            byte[] Buffer = new byte[4];
            int[] nb = new int[4];
            FS.Seek(0, SeekOrigin.Begin);
            FS.Read(Buffer, 0, 3);
            Encoding instEncoding = System.Text.Encoding.GetEncoding(1252);
            string filetype = instEncoding.GetString(Buffer);
            string valTag;
            int fs = 1;
            if (filetype.StartsWith("ID3"))
            {
                FS.Seek(6, SeekOrigin.Begin);
                FS.Read(Buffer, 0, 4);

                nb[3] = Buffer[3] | ((Buffer[2] & 1) << 7);
                nb[2] = ((Buffer[2] >> 1) & 63) | ((Buffer[1] & 3) << 6);
                nb[1] = ((Buffer[1] >> 2) & 31) | ((Buffer[0] & 7) << 5);
                nb[0] = ((Buffer[0] >> 3) & 15);

                ulong FrameSize = 10 + (ulong)nb[3] | ((ulong)nb[2] << 8) | ((ulong)nb[1] << 16) | ((ulong)nb[0] << 24);

                int TagSize = Convert.ToInt32(FrameSize);
                string flag;
                int i = 0;

                while (i < TagSize && fs > 0)
                {
                    i += 10;
                    FS.Seek(i, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    flag = instEncoding.GetString(Buffer);
                    FS.Seek(i + 4, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    fs = Convert.ToInt32(((uint)Buffer[0] << 24) + ((uint)Buffer[1] << 16) + ((uint)Buffer[2] << 8) + ((uint)Buffer[3]));

                    byte[] s = new byte[fs];
                    FS.Seek(i + 10, SeekOrigin.Begin);
                    FS.Read(s, 0, fs);
                    Decoder d = Encoding.GetEncoding("iso-8859-1").GetDecoder();

                    char[] chars = new Char[d.GetCharCount(s, 0, fs)];
                    int charLen = d.GetChars(s, 0, s.Length, chars, 0);

                    valTag = "";
                    for (int j = 0; j < chars.Length; j++)
                    {
                        if (chars[j].ToString() != "\0")
                        {
                            valTag += chars[j].ToString();
                        }
                    }

                    if (flag.CompareTo("TPE1") == 0)
                    {
                        FS.Close();
                        return valTag.TrimEnd('\0');
                    }
                    i += fs;
                }
                FS.Close();
                return "";
            }
            else { FS.Close(); return ""; }
        }
        public string getTitre(string MP3)
        {
            FileStream FS = new FileStream(MP3, FileMode.Open);
            byte[] Buffer = new byte[4];
            int[] nb = new int[4];
            FS.Seek(0, SeekOrigin.Begin);
            FS.Read(Buffer, 0, 3);
            Encoding instEncoding = System.Text.Encoding.GetEncoding(1252);
            string filetype = instEncoding.GetString(Buffer);
            string valTag;
            int fs = 1;
            if (filetype.StartsWith("ID3"))
            {
                FS.Seek(6, SeekOrigin.Begin);
                FS.Read(Buffer, 0, 4);

                nb[3] = Buffer[3] | ((Buffer[2] & 1) << 7);
                nb[2] = ((Buffer[2] >> 1) & 63) | ((Buffer[1] & 3) << 6);
                nb[1] = ((Buffer[1] >> 2) & 31) | ((Buffer[0] & 7) << 5);
                nb[0] = ((Buffer[0] >> 3) & 15);

                ulong FrameSize = 10 + (ulong)nb[3] | ((ulong)nb[2] << 8) | ((ulong)nb[1] << 16) | ((ulong)nb[0] << 24);

                int TagSize = Convert.ToInt32(FrameSize);
                string flag;
                int i = 0;

                while (i < TagSize && fs > 0)
                {
                    i += 10;
                    FS.Seek(i, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    flag = instEncoding.GetString(Buffer);
                    FS.Seek(i + 4, SeekOrigin.Begin);
                    FS.Read(Buffer, 0, 4);
                    fs = Convert.ToInt32(((uint)Buffer[0] << 24) + ((uint)Buffer[1] << 16) + ((uint)Buffer[2] << 8) + ((uint)Buffer[3]));

                    byte[] s = new byte[fs];
                    FS.Seek(i + 10, SeekOrigin.Begin);
                    FS.Read(s, 0, fs);
                    Decoder d = Encoding.GetEncoding("iso-8859-1").GetDecoder();

                    char[] chars = new Char[d.GetCharCount(s, 0, fs)];
                    int charLen = d.GetChars(s, 0, s.Length, chars, 0);

                    valTag = "";
                    for (int j = 0; j < chars.Length; j++)
                    {
                        if (chars[j].ToString() != "\0")
                        {
                            valTag += chars[j].ToString();
                        }
                    }

                    if (flag.CompareTo("TIT2") == 0)
                    {
                        FS.Close();
                        return valTag.TrimEnd('\0');
                    }
                    i += fs;
                }
                FS.Close();
                return "";
            }
            else { FS.Close(); return ""; }
        }
    }

A voir également

Ajouter un commentaire

Commentaires

Impossible d'utiliser les methodes quand le fichier est en cours d'utilisation. Il n'y a pas de methode relative à la durée du fichier mp3.
Kleidp
Messages postés
124
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
10 février 2008
-
Je bosse sur un logiciel d'édition de tag ID3, j'ai pensé à ta source, si tu veux proposer une classe complete: http://fr.wikipedia.org/wiki/ID3 + liens externes
cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
37 -
Bon j'ai fait une rapide mise à jour de ma source ;-) Puisque qu'apparement les gens s'en plaignait lol.

http://www.csharpfr.com/codes/ID3_26182.aspx
cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
37 -
A vrai dire il s'agissait de ma première source si mes souvenirs sont bons, donc c'est loin d'être la meilleure ^^. Mais je dois avouer qu'à l'époque (ça fait quand même un sacré bout de temps!) je n'avais pas rencontré autrement de bugs...

Si les bugs me sont communiqués, je veux éventuellement bien jeter un oeil (si j'ai du temps libre).
cs_Moomoon07
Messages postés
6
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
26 octobre 2006
-
C'est en gros la même source que celle de bidou (en ce qui concerne la LECTURE des tags), à part que j'ai fait une méthode par tag récupéré, et que j 'ai corrigé les erreurs.
Bidou reconnaitra sûrement sa "pâte" puisque je n'ai fait que modifier ses sources.
Les bugs de sa source venaient(si je me rappelle bien) du choix de l'encodage seulement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.