Пример #1
0
        public MusicFile MN_OpenMusicFile()
        {
            string         filePath        = "";
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.InitialDirectory = MainWindow.tree5_sel.mediaPath;
            openFileDialog1.Multiselect      = false;
            openFileDialog1.Filter           = "mp3文件|*.mp3";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                filePath = openFileDialog1.FileName;
                Mp3Info info     = Mp3FileInfo.GetMp3FileInfo(filePath);
                title   newmedia = new title()
                {
                    date       = DateTime.Now.ToString(),
                    title_name = info.Title,
                    context    = filePath
                };
                MainWindow.tree5_sel.media.Add(newmedia);
                if (File.Exists(MainWindow.tree5_sel.mediaPath + "\\" + openFileDialog1.SafeFileName) == false)
                {
                    ThreadPool.QueueUserWorkItem(status => copy_files.AddiDissertationMedia(openFileDialog1.FileName, MainWindow.tree5_sel.mediaPath + "\\" + openFileDialog1.SafeFileName));
                }
                if (true)//MainWindow.CurIsIdissertation)
                {
                    filePath = MainWindow.tree5_sel.href + "\\dialogs\\music\\" + openFileDialog1.SafeFileName;
                    File.Copy(openFileDialog1.FileName, filePath, true);
                }
                else
                {
                    filePath = openFileDialog1.FileName;
                }
                MusicFile mf = new MusicFile()
                {
                    FileName   = info.Title,
                    FilePath   = filePath,
                    AlbumTitle = info.Album,
                    Author     = info.Artist
                };
                return(mf);
            }
            return(null);
        }
Пример #2
0
        /// <summary>
        /// 获取MP3歌曲的相关信息
        /// </summary>
        /// <param name = "Info">从MP3文件中截取的二进制信息</param>
        /// <returns>返回一个Mp3Info结构</returns>
        public static Mp3Info getMp3Info(byte[] Info)
        {
            Mp3Info mp3Info = new Mp3Info();
            string  str     = null;
            int     i;
            int     position     = 0; //循环的起始值
            int     currentIndex = 0; //Info的当前索引值

            //获取TAG标识
            for (i = currentIndex; i < currentIndex + 3; i++)
            {
                str = str + (char)Info[i];
                position++;
            }
            currentIndex     = position;
            mp3Info.identify = str;

            //获取歌名
            str = null;
            byte[] bytTitle = new byte[30];//将歌名部分读到一个单独的数组中
            int    j        = 0;

            for (i = currentIndex; i < currentIndex + 30; i++)
            {
                bytTitle[j] = Info[i];
                position++;
                j++;
            }
            currentIndex  = position;
            mp3Info.Title = Mp3FileInfo.byteToString(bytTitle);

            //获取歌手名
            str = null;
            j   = 0;
            byte[] bytArtist = new byte[30];//将歌手名部分读到一个单独的数组中
            for (i = currentIndex; i < currentIndex + 30; i++)
            {
                bytArtist[j] = Info[i];
                position++;
                j++;
            }
            currentIndex   = position;
            mp3Info.Artist = Mp3FileInfo.byteToString(bytArtist);

            //获取唱片名
            str = null;
            j   = 0;
            byte[] bytAlbum = new byte[30];//将唱片名部分读到一个单独的数组中
            for (i = currentIndex; i < currentIndex + 30; i++)
            {
                bytAlbum[j] = Info[i];
                position++;
                j++;
            }
            currentIndex  = position;
            mp3Info.Album = Mp3FileInfo.byteToString(bytAlbum);

            //获取年
            str = null;
            j   = 0;
            byte[] bytYear = new byte[4];//将年部分读到一个单独的数组中
            for (i = currentIndex; i < currentIndex + 4; i++)
            {
                bytYear[j] = Info[i];
                position++;
                j++;
            }
            currentIndex = position;
            mp3Info.Year = Mp3FileInfo.byteToString(bytYear);
            //获取注释
            str = null;
            j   = 0;
            byte[] bytComment = new byte[28];//将注释部分读到一个单独的数组中
            for (i = currentIndex; i < currentIndex + 25; i++)
            {
                bytComment[j] = Info[i];
                position++;
                j++;
            }
            currentIndex    = position;
            mp3Info.Comment = Mp3FileInfo.byteToString(bytComment);

            //以下获取保留位
            mp3Info.reserved1 = (char)Info[++position];
            mp3Info.reserved2 = (char)Info[++position];
            mp3Info.reserved3 = (char)Info[++position];
            return(mp3Info);
        }