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); } } }
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); } } }
public void Save() { using (var mp3 = new Mp3File(_file, Mp3Permissions.Write)) { mp3.WriteTag(_tag, WriteConflictAction.NoAction); } }
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"); } }
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; }
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 = "完成"; }); } }
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 = "完成"; }); } }
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); } }