示例#1
0
 public void DevTests()
 {
     using (var mp3 = new Mp3File(@"E:\Temp\Audio\BasicTagsWithImage.mp3", Mp3Permissions.ReadWrite))
     {
         mp3.DeleteAllTags();
         var tag        = new Id3Tag();
         var frontCover = new PictureFrame {
             Description = "The Front Cover",
             MimeType    = "image/jpg",
             PictureType = PictureType.FrontCover
         };
         frontCover.LoadImage(@"E:\Temp\Audio\FrontCover.jpg");
         tag.Pictures.Add(frontCover);
         var fileIcon = new PictureFrame {
             Description = "The File Icon",
             MimeType    = "image/png",
             PictureType = PictureType.Other
         };
         fileIcon.LoadImage(@"E:\Temp\Audio\MSN.png");
         tag.Pictures.Add(fileIcon);
         mp3.WriteTag(tag);
         foreach (Id3Frame frame in tag)
         {
             Console.WriteLine(frame);
         }
     }
 }
示例#2
0
        private void WithID3_Net()
        {
            string[] musicFiles = Directory.GetFiles(txtFolderPath.Text, "*.mp3");
            foreach (string musicFile in musicFiles)
            {
                using (var mp3 = new Mp3File(musicFile, Mp3Permissions.ReadWrite))
                {
                    Console.WriteLine(musicFile);
                    Console.WriteLine(mp3.HasTagOfFamily(Id3TagFamily.FileStartTag).ToString());
                    var x   = this.GetValidVersion(mp3);
                    var tag = mp3.GetTag(x.Major, x.Minor);
                    Console.WriteLine("Title: {0}", tag.Title.Value);
                    Console.WriteLine("Artist: {0}", tag.Artists.Value);
                    Console.WriteLine("Album: {0}", tag.Album.Value);
                    Mp3Stream xs = new Mp3Stream(new MemoryStream());

                    mp3.WriteTag(tag, x.Major, x.Minor, WriteConflictAction.Replace);

                    foreach (var item in tag.Frames)
                    {
                        Console.WriteLine(item.ToString());
                    }
                    //Id3Tag tag = mp3.GetTag(Id3TagFamily.FileStartTag);
                    //Console.WriteLine("Title: {0}", tag.Title.Value);
                    //Console.WriteLine("Artist: {0}", tag.Artists.Value);
                    //Console.WriteLine("Album: {0}", tag.Album.Value);
                }
            }
        }
示例#3
0
 public void Save()
 {
     using (var mp3 = new Mp3File(_file, Mp3Permissions.Write))
     {
         mp3.WriteTag(_tag, WriteConflictAction.NoAction);
     }
 }
示例#4
0
        public void ReproduceTest()
        {
            using (var mp3 = new Mp3File(@"E:\Temp\Audio\BasicTagsWithImage.mp3", Mp3Permissions.ReadWrite))
            {
                mp3.DeleteAllTags();
                var tag = new Id3Tag();
                var pic = new PictureFrame {
                    Description  = "The Front Cover",
                    EncodingType = Id3TextEncoding.Iso8859_1
                };
                pic.LoadImage(@"E:\Temp\Audio\FrontCover.jpg");
                tag.Pictures.Add(pic);
                mp3.WriteTag(tag, 2, 3);
            }

            using (var mp3 = new Mp3File(@"E:\Temp\Audio\BasicTagsWithImage.mp3"))
            {
                Id3Tag       tag = mp3.GetTag(2, 3);
                PictureFrame pic = tag.OfType <PictureFrame>().First();
                pic.SaveImage(@"E:\Temp\FrontCoverSaved.jpg");
            }
        }
示例#5
0
        static void Write(string[] artists)
        {
            var defaultColor = System.Console.ForegroundColor;
            System.Console.ForegroundColor = ConsoleColor.Blue;
            
            foreach (var artist in artists)
            {
                var albums = Directory.GetDirectories(artist);
                foreach (var album in albums)
                {
                    var tracks = Directory.GetFiles(album, "*.mp3");
                    foreach (var track in tracks)
                    {
                        if (track.IsFormatValid())
                        {
                            try
                            {
                                using (var mp3file = new Mp3File(track, Mp3Permissions.ReadWrite))
                                {
                                    var artistName = track.ExtractArtistName();
                                    var tag = mp3file.GetTag(Id3TagFamily.Version2x);

                                    tag.Band.EncodingType = Id3TextEncoding.Unicode;
                                    tag.Band.Value = artistName;

                                    tag.Album.EncodingType = Id3TextEncoding.Unicode;
                                    tag.Album.Value = track.ExtractAlbumName();

                                    tag.Year.EncodingType = Id3TextEncoding.Unicode;
                                    tag.Year.Value = track.ExtractAlbumYear();

                                    tag.Title.EncodingType = Id3TextEncoding.Unicode;
                                    tag.Title.Value = track.ExtractTrackName();

                                    tag.Track.EncodingType = Id3TextEncoding.Unicode;
                                    tag.Track.Value = track.ExtractTrackNumber();

                                    tag.Artists.EncodingType = Id3TextEncoding.Unicode;
                                    tag.Artists.Value.Clear();
                                    tag.Artists.Value.Add(artistName);

                                    mp3file.WriteTag(tag);
                                }

                                System.Console.WriteLine("Tags wited to: " + track);
                            }
                            catch
                            {
                            }
                        }
                    }
                }
            }

            System.Console.ForegroundColor = defaultColor;
        }
示例#6
0
        private void StartOneThread()
        {
            int isHandling = -1;

            while (true)
            {
                lock (handledlock)
                {
                    hasHandle++;
                    isHandling = hasHandle;
                }
                if (isHandling >= listView1.Items.Count)
                {
                    return;
                }
                ListViewItem item = null;

                this.Invoke((Action) delegate()
                {
                    item = listView1.Items[isHandling];
                    listView1.Items[isHandling].SubItems["States"].Text = "转码中";
                });
                AudioInfo info = item.Tag as AudioInfo;

                string output = string.Empty;
                string copyto = string.Empty;
                if (cbKeepFileTree.Checked)
                {
                    string ralative = FileUtility.MakeRelativePath(info.DirPath + "/", Path.GetDirectoryName(info.FullName));
                    string outpath  = Path.Combine(textBox1.Text, ralative);
                    output = Path.Combine(outpath, Path.GetFileNameWithoutExtension(info.FullName) + ".m4a");
                    string copytopath = Path.Combine(textBox2.Text, ralative);
                    copyto = Path.Combine(copytopath, Path.GetFileNameWithoutExtension(info.FullName) + ".m4a");
                    if (!Directory.Exists(outpath))
                    {
                        Directory.CreateDirectory(outpath);
                    }
                    if (!Directory.Exists(copyto))
                    {
                        Directory.CreateDirectory(copyto);
                    }
                }
                else
                {
                    output = Path.Combine(textBox1.Text, Path.GetFileNameWithoutExtension(info.FullName) + ".m4a");
                    copyto = Path.Combine(textBox2.Text, Path.GetFileNameWithoutExtension(info.FullName) + ".m4a");
                }

                string           bat         = getbat(info.FullName, output);
                ProcessStartInfo processinfo = new ProcessStartInfo();
                processinfo.FileName               = Environment.GetEnvironmentVariable("ComSpec");
                processinfo.Arguments              = "/c " + bat;
                processinfo.UseShellExecute        = false; //输出信息重定向
                processinfo.CreateNoWindow         = true;
                processinfo.RedirectStandardInput  = true;
                processinfo.RedirectStandardOutput = true;
                processinfo.RedirectStandardError  = false;
                processinfo.WindowStyle            = ProcessWindowStyle.Hidden;
                Process ffmpeg = new Process();
                ffmpeg.StartInfo = processinfo;
                ffmpeg.Start();

                var result = ffmpeg.StandardOutput.ReadToEnd();
                ffmpeg.WaitForExit();
                //ffmpeg.Kill();//等待进程结束
                ffmpeg.Dispose();

                if (cbCopyID3.Checked == true)
                {
                    try
                    {
                        using (var mp3 = new Mp3File(info.FullName))
                        {
                            if (mp3.HasTagOfFamily(Id3TagFamily.FileStartTag))
                            {
                            }
                            else
                            {
                                using (var outputmp3 = new Mp3File(output, Mp3Permissions.ReadWrite))
                                {
                                    Id3v1Tag id3tag = Id3Tag.Create <Id3v1Tag>();
                                    TagConsole.ReadTagToID3(id3tag, info.FullName);
                                    outputmp3.WriteTag(id3tag, id3tag.MajorVersion, id3tag.MinorVersion, WriteConflictAction.Replace);
                                }
                            }
                        }
                    }
                    catch { }
                }
                if (cbCompleteDo.Checked)
                {
                    try
                    {
                        if (cblCompeteAction.SelectedIndex == 0)
                        {
                            this.Invoke((Action) delegate()
                            {
                                listView1.Items[isHandling].SubItems["States"].Text = "拷贝中";
                            });

                            File.Copy(output, copyto, true);
                        }
                        else if (cblCompeteAction.SelectedIndex == 1)
                        {
                            this.Invoke((Action) delegate()
                            {
                                listView1.Items[isHandling].SubItems["States"].Text = "剪切中";
                            });
                            if (File.Exists(copyto))
                            {
                                File.Delete(copyto);
                            }
                            File.Move(output, copyto);
                        }
                    }
                    catch { }
                }

                this.Invoke((Action) delegate()
                {
                    listView1.Items[isHandling].SubItems["States"].Text = "完成";
                });
            }
        }
示例#7
0
        private void StartOneThread()
        {
            int isHandling = -1;

            while (true)
            {
                lock (handledlock)
                {
                    hasHandle++;
                    isHandling = hasHandle;
                }
                if (isHandling >= listView1.Items.Count)
                {
                    return;
                }
                ListViewItem item = null;

                this.Invoke((Action) delegate()
                {
                    item = listView1.Items[isHandling];
                    listView1.Items[isHandling].SubItems["States"].Text = "转码中";
                });
                AudioInfo info = item.Tag as AudioInfo;

                string extension = ".m4a";

                if (cbAudioEncoder.Text == "Opus")
                {
                    extension = ".opus";
                }
                else if (cbAudioEncoder.Text == "FLAC")
                {
                    extension = ".flac";
                }

                string output = string.Empty;
                string copyto = string.Empty;
                if (cbKeepFileTree.Checked)
                {
                    string ralative = FileUtility.MakeRelativePath(info.DirPath + "/", Path.GetDirectoryName(info.FullName));
                    string outpath  = Path.Combine(textBox1.Text, ralative);
                    output = Path.Combine(outpath, Path.GetFileNameWithoutExtension(info.FullName) + extension);
                    string copytopath = Path.Combine(textBox2.Text, ralative);
                    copyto = Path.Combine(copytopath, Path.GetFileNameWithoutExtension(info.FullName) + extension);
                    if (!Directory.Exists(outpath))
                    {
                        Directory.CreateDirectory(outpath);
                    }
                    if (!Directory.Exists(copyto))
                    {
                        Directory.CreateDirectory(copyto);
                    }
                }
                else
                {
                    output = Path.Combine(textBox1.Text, Path.GetFileNameWithoutExtension(info.FullName) + extension);
                    copyto = Path.Combine(textBox2.Text, Path.GetFileNameWithoutExtension(info.FullName) + extension);
                }

                AudioConfig ac = new AudioConfig();
                ac.Encoder = info.Encoder;
                ac.Input   = info.FullName;
                ac.Quality = float.Parse(txtQuality.Text);
                int.TryParse(txtCh.Text, out ac.Channel);
                if (string.IsNullOrEmpty(output))
                {
                    output = Path.GetFileNameWithoutExtension(ac.Input) + extension;
                }
                ac.Output = output;

                if (info.Encoder == AudioEncoder.aac)
                {
                    CommandHelper.RunFFmpegToAAC(ac);
                }
                else if (info.Encoder == AudioEncoder.opus)
                {
                    CommandHelper.RunFFmpegToOpus(ac);
                }
                else if (info.Encoder == AudioEncoder.flac)
                {
                    CommandHelper.RunFFmpegToFlac(ac);
                }


                if (cbCopyID3.Checked == true && ac.Encoder == AudioEncoder.aac)
                {
                    try
                    {
                        using (var mp3 = new Mp3File(info.FullName))
                        {
                            if (mp3.HasTagOfFamily(Id3TagFamily.FileStartTag))
                            {
                            }
                            else
                            {
                                using (var outputmp3 = new Mp3File(output, Mp3Permissions.ReadWrite))
                                {
                                    Id3v1Tag id3tag = Id3Tag.Create <Id3v1Tag>();
                                    TagConsole.ReadTagToID3(id3tag, info.FullName);
                                    outputmp3.WriteTag(id3tag, id3tag.MajorVersion, id3tag.MinorVersion, WriteConflictAction.Replace);
                                }
                            }
                        }
                    }
                    catch { }
                }
                if (cbCompleteDo.Checked)
                {
                    try
                    {
                        if (cblCompeteAction.SelectedIndex == 0)
                        {
                            this.Invoke((Action) delegate()
                            {
                                listView1.Items[isHandling].SubItems["States"].Text = "拷贝中";
                            });

                            File.Copy(output, copyto, true);
                        }
                        else if (cblCompeteAction.SelectedIndex == 1)
                        {
                            this.Invoke((Action) delegate()
                            {
                                listView1.Items[isHandling].SubItems["States"].Text = "剪切中";
                            });
                            if (File.Exists(copyto))
                            {
                                File.Delete(copyto);
                            }
                            File.Move(output, copyto);
                        }
                    }
                    catch { }
                }

                this.Invoke((Action) delegate()
                {
                    listView1.Items[isHandling].SubItems["States"].Text = "完成";
                });
            }
        }
示例#8
0
        static void Main(string[] args)
        {
            var root = args[0];
            var newRoot = args[1];

            if (!Directory.Exists(root) || new DirectoryInfo(root) == new DirectoryInfo(newRoot))
            {
                Environment.Exit(1);
            }

            var warnings = 0;

            CheckCreateDirectory(newRoot);

            var logPath = Path.Combine(newRoot, "log.txt");
            using (var log = new StreamWriter(new FileInfo(logPath).Open(FileMode.Create)) { AutoFlush = true })
            {
                try
                {
                    var files = Directory.GetFiles(root, "*.mp3", SearchOption.AllDirectories);

                    foreach (var file in files)
                    {
                        using (var mp3 = new Mp3File(file))
                        {
                            var end = mp3.GetTag(Id3TagFamily.FileEndTag);
                            var tag = mp3.GetTag(Id3TagFamily.FileStartTag);

                            if (tag != null)
                            {
                                tag.MergeWith(end);
                            }
                            else
                            {
                                tag = end;
                            }

                            //log.WriteLine("{0,-3} | {1,-50} | {2,-50} | {3,-50}", start.Track.Value, start.Band.Value, start.Album.Value, start.Title.Value);

                            var bandPath = Path.Combine(newRoot, FixDirectoryPath(GetArtist(tag, log, file)));
                            CheckCreateDirectory(bandPath);

                            var albumPath = Path.Combine(bandPath, FixDirectoryPath(GetAlbum(tag, log, file)));
                            CheckCreateDirectory(albumPath);

                            var newFileName = FixFilePath(string.Format("{0} {1}.mp3", FixTrack(tag.Track), GetTitle(tag, log, file))).Trim();
                            var titlePath = Path.Combine(albumPath, newFileName);

                            if (!File.Exists(titlePath) || new FileInfo(file).Length == new FileInfo(titlePath).Length)
                            {
                                File.Copy(file, titlePath, true);

                                using (var newMp3 = new Mp3File(titlePath, Mp3Permissions.ReadWrite))
                                {
                                    Thread.Sleep(TimeSpan.FromMilliseconds(1));

                                    newMp3.DeleteAllTags();
                                    newMp3.WriteTag(tag, WriteConflictAction.Replace);
                                }

                                //log.WriteLine("File '{0}' copied to '{1}'", file, albumPath);
                            }
                            else
                            {
                                log.WriteLine("*** WARNING: File '{0}' already exists with different length", titlePath);
                                warnings++;
                            }
                        }

                        Console.Write('.');
                    }

                    log.WriteLine();
                    log.WriteLine("Ready with {0} warning(s)", warnings);

                    log.WriteLine();

                    var newFiles = Directory.GetFiles(newRoot, "*.mp3", SearchOption.AllDirectories);
                    log.WriteLine("Started with {0} MP3 files, ended up with {1}.", files.Length, newFiles.Length);
                }
                catch (Exception exception)
                {
                    log.WriteLine();
                    log.WriteLine("*** ERROR: {0}", exception.Message);
                    log.WriteLine(exception.StackTrace);
                }

                Process.Start(logPath);
            }
        }