728x90

MP3 파일 헤더에 포함된 태그 정보를 가져오는 함수이다.

구글링을 통해서 얻은 자료를 가지고 쉽게 원하는 정보를 얻기 위해서 함수화를 했다.


사용법

using (OpenFileDialog dlgOpen = new OpenFileDialog())
{
    dlgOpen.Filter = "MP3 File|*.mp3";
    dlgOpen.Title = "Select Audio File";
    //dlgOpen.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);

    if (dlgOpen.ShowDialog() == DialogResult.OK)
    {
        // listView 등에 원하는 형태로 출력하여 사용
        MessageBox.Show("제목 : " + MP3TAG_Split(dlgOpen.FileName, 0));
    }
}



함수
/// <summary>
/// MP3 파일 헤더에 포함된 태그를 추출하여 타이틀, 가수, 앨범, 연도, 코멘ㅌ, 장르 정보를 가져옵니다
/// </summary>
/// <param name="filePath">파일경로를 포함한 MP3파일명</param>
/// <param name="index">추출할 인덱스</param>
/// <returns>추출된 문자열</returns>
public string MP3TAG_Split(string filePath, int index)
{
    string _parseString = ";";  // MP3_TAG 의 구분자
    string _body = MP3TAG_Read(filePath);
    if (_body != string.Empty)
    {
        return _body.Split(new string[] { _parseString }, StringSplitOptions.None)[index];
    }
    else
    {
        return string.Empty;
    }
}

public string MP3TAG_Read(string filePath)
{
    using (FileStream fs = File.OpenRead(filePath))
    {
        if (fs.Length >= 128)
        {
            MP3ID3Tag tag = new MP3ID3Tag(); // 클래스형인 tag 객체 초기화
            fs.Seek(-128, SeekOrigin.End);
            fs.Read(tag.TAGID, 0, tag.TAGID.Length);
            fs.Read(tag.Title, 0, tag.Title.Length);
            fs.Read(tag.Artist, 0, tag.Artist.Length);
            fs.Read(tag.Album, 0, tag.Album.Length);
            fs.Read(tag.Year, 0, tag.Year.Length);
            fs.Read(tag.Comment, 0, tag.Comment.Length);
            fs.Read(tag.Genre, 0, tag.Genre.Length);
            string theTAGID = Encoding.Default.GetString(tag.TAGID);

            if (theTAGID.Equals("TAG"))
            {
                string Title = Encoding.Default.GetString(tag.Title);
                string Artist = Encoding.Default.GetString(tag.Artist);
                string Album = Encoding.Default.GetString(tag.Album);
                string Year = Encoding.Default.GetString(tag.Year);
                string Comment = Encoding.Default.GetString(tag.Comment);
                string Genre = Encoding.Default.GetString(tag.Genre);

                return string.Format("{0};{1};{2};{3};{4};{5}",Title,Artist,Album,Year,Comment,Genre);
            }
            else
            {
                return string.Empty;
            }
        }
        else
        {
            return string.Empty;
        }
    }
}



// MP3ID3Tag 의 클래스

class MP3ID3Tag
{
    public byte[] TAGID = new byte[3];      //  3
    public byte[] Title = new byte[30];     //  30
    public byte[] Artist = new byte[30];    //  30
    public byte[] Album = new byte[30];     //  30
    public byte[] Year = new byte[4];       //  4
    public byte[] Comment = new byte[30];   //  30
    public byte[] Genre = new byte[1];      //  1
}



블로그 이미지

Link2Me

,