/// <summary> /// Update ID3v1 tag using properties /// Feature is supported in version 18.2 or greater of the API /// </summary> public static void UpdateID3v1TagUsingProperties() { try { // init Mp3Format class using (Mp3Format mp3Format = new Mp3Format(Common.MapSourceFilePath(filePath))) { // get id3v1 tag Id3v1Tag id3Tag = mp3Format.Id3v1Properties; // set artist id3Tag.Artist = "A-ha"; // set comment id3Tag.Comment = "By GroupDocs.Metadata"; // set title id3Tag.Title = "Take on me"; // set year id3Tag.Year = "1986"; // and commit changes mp3Format.Save(); } } catch (Exception exp) { Console.WriteLine(exp.Message); } }
/// <summary> /// Updates ID3v1 tag in MP3 format /// </summary> /// public static void UpdateID3v1Tag() { try { //ExStart:UpdateID3v1Tag // initialize Mp3Format class using (Mp3Format mp3Format = new Mp3Format((Common.MapSourceFilePath(filePath)))) { // create id3v1 tag Id3v1Tag id3Tag = new Id3v1Tag(); // set artist id3Tag.Artist = "A-ha"; // set title id3Tag.Title = "Take on me"; // update ID3v1 tag mp3Format.UpdateId3v1(id3Tag); // and commit changes mp3Format.Save(); } //ExEnd:UpdateID3v1Tag } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public Id3v1Tag Read( Stream mp3Stream ) { Id3v1Tag tag = new Id3v1Tag(); //Check wether the file contains an Id3v1 tag-------------------------------- mp3Stream.Seek( -128 , SeekOrigin.End); byte[] b = new byte[3]; mp3Stream.Read( b, 0, 3 ); mp3Stream.Seek(0, SeekOrigin.Begin); string tagS = new string(System.Text.Encoding.ASCII.GetChars( b )); if(tagS != "TAG"){ throw new CannotReadException("There is no Id3v1 Tag in this file"); } mp3Stream.Seek( - 128 + 3, SeekOrigin.End ); //Parse the tag -)------------------------------------------------ string songName = Read(mp3Stream, 30); //------------------------------------------------ string artist = Read(mp3Stream, 30); //------------------------------------------------ string album = Read(mp3Stream, 30); //------------------------------------------------ string year = Read(mp3Stream, 4); //------------------------------------------------ string comment = Read(mp3Stream, 30); //------------------------------------------------ string trackNumber = ""; mp3Stream.Seek(- 2, SeekOrigin.Current); b = new byte[2]; mp3Stream.Read(b, 0, 2); if ( b[0] == 0 ) { trackNumber = b[1].ToString (); } //------------------------------------------------ byte genreByte = (byte) mp3Stream.ReadByte(); mp3Stream.Seek(0, SeekOrigin.Begin); tag.SetTitle( songName ); tag.SetArtist( artist ); tag.SetAlbum( album ); tag.SetYear( year ); tag.SetComment( comment ); tag.SetTrack( trackNumber ); tag.SetGenre( tag.TranslateGenre(genreByte) ); return tag; }
/// <summary> /// Read ID3v1 tag in MP3 format /// </summary> /// public static void ReadID3v1Tag() { try { //ExStart:ReadID3v1Tag // initialize Mp3Format class Mp3Format mp3Format = new Mp3Format((Common.MapSourceFilePath(filePath))); // get ID3v1 tag Id3v1Tag id3V1 = mp3Format.Id3v1; //NOTE: please remember you may use different approaches to getting metadata // second approach //id3V1 = (Id3v1Tag)MetadataUtility.ExtractSpecificMetadata(file, MetadataType.Id3v1); // check if ID3v1 is presented. It could be absent in Mpeg file. if (id3V1 != null) { // Display version Console.WriteLine("ID3v1 version: {0}", id3V1.Version); // Display tag properties Console.WriteLine("Album: {0}", id3V1.Album); Console.WriteLine("Artist: {0}", id3V1.Artist); Console.WriteLine("Comment: {0}", id3V1.Comment); Console.WriteLine("Genre: {0}", id3V1.Genre); Console.WriteLine("Title: {0}", id3V1.Title); Console.WriteLine("Year: {0}", id3V1.Year); if (id3V1.Version == "ID3v1.1") { // Track number is presented only in ID3 v1.1 Console.WriteLine("Track number: {0}", id3V1.TrackNumber); } } //ExEnd:ReadID3v1Tag } catch (Exception ex) { Console.WriteLine(ex.Message); } }
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 = "完成"; }); } }
/// <summary> /// Updates ID3v1 tag in MP3 format /// </summary> /// public static void UpdateID3v1Tag() { try { //ExStart:UpdateID3v1Tag // initialize Mp3Format class Mp3Format mp3Format = new Mp3Format((Common.MapSourceFilePath(filePath))); // create id3v1 tag Id3v1Tag id3Tag = new Id3v1Tag(); // set artist id3Tag.Artist = "A-ha"; // set title id3Tag.Title = "Take on me"; // update ID3v1 tag mp3Format.UpdateId3v1(id3Tag); // and commit changes mp3Format.Save(); //ExEnd:UpdateID3v1Tag } catch (Exception ex) { Console.WriteLine(ex.Message); } }