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); }
/// <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); }
/// <summary> /// 获取整理后的Mp3文件名,这里以标题和艺术家名定文件名 /// </summary> /// <returns></returns> public static String GetOriginalName(Mp3Info info) { return(formatString(info.Title.Trim()) + "-" + formatString(info.Artist.Trim())); }