public async Task <List <Id3Tag> > GetFilesFromFolder() { var tagList = new List <Id3Tag>(); var folderPicker = new FolderPicker { SuggestedStartLocation = PickerLocationId.Desktop, ViewMode = PickerViewMode.List }; folderPicker.FileTypeFilter.Add(".mp3"); var selectedFolder = await folderPicker.PickSingleFolderAsync(); if (selectedFolder != null) { StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickerFolderToken", selectedFolder); await Task.Run(async() => { var files = await selectedFolder.GetFilesAsync(); foreach (var mediaFile in files) { var file = new Mp3File(mediaFile.Path, Mp3Permissions.ReadWrite); tagList.Add(file.HasTagOfFamily(Id3TagFamily.Version2x) ? file.GetTag(Id3TagFamily.Version2x) : file.GetTag(Id3TagFamily.Version1x)); file.Dispose(); } }); } return(tagList); }
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); } } }
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 = "完成"; }); } }