Récupération de tags mp3

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

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.