From 599c1b27663b60f82869132e2468af4110254d93 Mon Sep 17 00:00:00 2001 From: chudov Date: Sat, 28 Mar 2009 03:57:49 +0000 Subject: [PATCH] preparations for 2.0.1 --- CUETools.AccurateRip/AccurateRip.cs | 47 ++++ CUETools.Processor/Processor.cs | 339 +++++++++++++++++++------ CUETools/Program.cs | 3 +- CUETools/frmCUETools.Designer.cs | 14 +- CUETools/frmCUETools.cs | 359 +++++++++----------------- CUETools/frmCUETools.de-DE.resx | 4 +- CUETools/frmCUETools.resx | 336 +++++++------------------ CUETools/frmCUETools.ru-RU.resx | 6 - CUETools/frmSettings.Designer.cs | 46 ++-- CUETools/frmSettings.cs | 6 +- CUETools/frmSettings.de-DE.resx | 182 +------------- CUETools/frmSettings.resx | 373 ++++++++++++---------------- CUETools/frmSettings.ru-RU.resx | 202 +-------------- 13 files changed, 696 insertions(+), 1221 deletions(-) diff --git a/CUETools.AccurateRip/AccurateRip.cs b/CUETools.AccurateRip/AccurateRip.cs index a78c584..b0acdd1 100644 --- a/CUETools.AccurateRip/AccurateRip.cs +++ b/CUETools.AccurateRip/AccurateRip.cs @@ -155,6 +155,53 @@ namespace CUETools.AccurateRip return conf; } + public uint WorstTotal() + { + uint worstTotal = 0; + for (int iTrack = 0; iTrack < _toc.AudioTracks; iTrack++) + { + uint sumTotal = Total(iTrack); + if (iTrack == 0 || worstTotal > sumTotal) + worstTotal = sumTotal; + } + return worstTotal; + } + + public uint WorstConfidence() + { + uint worstConfidence = 0; + for (int iTrack = 0; iTrack < _toc.AudioTracks; iTrack++) + { + uint sumConfidence = SumConfidence(iTrack); + if (iTrack == 0 || worstConfidence > sumConfidence) + worstConfidence = sumConfidence; + } + return worstConfidence; + } + + public uint SumConfidence(int iTrack) + { + if (ARStatus != null) + return 0U; + uint conf = 0; + for (int iDisk = 0; iDisk < AccDisks.Count; iDisk++) + for (int oi = -_arOffsetRange; oi <= _arOffsetRange; oi++) + if (CRC(iTrack, oi) == AccDisks[iDisk].tracks[iTrack].CRC) + conf += AccDisks[iDisk].tracks[iTrack].count; + return conf; + } + + public uint Confidence(int iTrack, int oi) + { + if (ARStatus != null) + return 0U; + uint conf = 0; + for (int di = 0; di < (int)AccDisks.Count; di++) + if (CRC(iTrack, oi) == AccDisks[di].tracks[iTrack].CRC) + conf += AccDisks[di].tracks[iTrack].count; + return conf; + } + public uint Total(int iTrack) { if (ARStatus != null) diff --git a/CUETools.Processor/Processor.cs b/CUETools.Processor/Processor.cs index 076f022..a746bc9 100644 --- a/CUETools.Processor/Processor.cs +++ b/CUETools.Processor/Processor.cs @@ -288,6 +288,7 @@ namespace CUETools.Processor public bool udc1APEv2, udc1ID3v2; public bool disableAsm; public bool oneInstance; + public string language; public CUEConfig() { @@ -341,6 +342,8 @@ namespace CUETools.Processor disableAsm = false; oneInstance = true; + + language = Thread.CurrentThread.CurrentUICulture.Name; } public void Save (SettingsWriter sw) @@ -401,6 +404,7 @@ namespace CUETools.Processor sw.Save("UDC1APEv2", udc1APEv2); sw.Save("UDC1ID3v2", udc1ID3v2); } + sw.Save("Language", language); } public void Load(SettingsReader sr) @@ -460,6 +464,8 @@ namespace CUETools.Processor udc1EncParams = sr.Load("UDC1EncParams") ?? ""; udc1APEv2 = sr.LoadBoolean("UDC1APEv2") ?? false; udc1ID3v2 = sr.LoadBoolean("UDC1ID3v2") ?? false; + + language = sr.Load("Language") ?? Thread.CurrentThread.CurrentUICulture.Name; } public string CleanseString (string s) @@ -882,25 +888,26 @@ namespace CUETools.Processor TextReader sr; if (Directory.Exists(pathIn)) - { - if (cueDir + Path.DirectorySeparatorChar != pathIn && cueDir != pathIn) - throw new Exception("Input directory must end on path separator character."); - string cueSheet = null; - string[] audioExts = new string[] { "*.wav", "*.flac", "*.wv", "*.ape", "*.m4a", "*.tta" }; - for (i = 0; i < audioExts.Length && cueSheet == null; i++) - cueSheet = CUESheet.CreateDummyCUESheet(pathIn, audioExts[i]); - if (_config.udc1Extension != null && cueSheet == null) - cueSheet = CUESheet.CreateDummyCUESheet(pathIn, "*." + _config.udc1Extension); - if (cueSheet == null) - throw new Exception("Input directory doesn't contain supported audio files."); - sr = new StringReader(cueSheet); + throw new Exception("is a directory"); + //{ + // if (cueDir + Path.DirectorySeparatorChar != pathIn && cueDir != pathIn) + // throw new Exception("Input directory must end on path separator character."); + // string cueSheet = null; + // string[] audioExts = new string[] { "*.wav", "*.flac", "*.wv", "*.ape", "*.m4a", "*.tta" }; + // for (i = 0; i < audioExts.Length && cueSheet == null; i++) + // cueSheet = CUESheet.CreateDummyCUESheet(pathIn, audioExts[i]); + // if (_config.udc1Extension != null && cueSheet == null) + // cueSheet = CUESheet.CreateDummyCUESheet(pathIn, "*." + _config.udc1Extension); + // if (cueSheet == null) + // throw new Exception("Input directory doesn't contain supported audio files."); + // sr = new StringReader(cueSheet); - List logFiles = new List(); - foreach (string logPath in Directory.GetFiles(pathIn, "*.log")) - logFiles.Add(new CUEToolsSourceFile(logPath, new StreamReader(logPath, CUESheet.Encoding))); - CUEToolsSourceFile selectedLogFile = ChooseFile(logFiles, null, false); - _eacLog = selectedLogFile != null ? selectedLogFile.contents : null; - } + // List logFiles = new List(); + // foreach (string logPath in Directory.GetFiles(pathIn, "*.log")) + // logFiles.Add(new CUEToolsSourceFile(logPath, new StreamReader(logPath, CUESheet.Encoding))); + // CUEToolsSourceFile selectedLogFile = ChooseFile(logFiles, null, false); + // _eacLog = selectedLogFile != null ? selectedLogFile.contents : null; + //} else if (Path.GetExtension(pathIn).ToLower() == ".zip" || Path.GetExtension(pathIn).ToLower() == ".rar") { _archiveContents = new List(); @@ -980,20 +987,38 @@ namespace CUETools.Processor } else { - string cuesheetTag = null; - TagLib.File fileInfo; - GetSampleLength(pathIn, out fileInfo); - NameValueCollection tags = Tagging.Analyze(fileInfo); - cuesheetTag = tags.Get("CUESHEET"); - _accurateRipId = tags.Get("ACCURATERIPID"); - _eacLog = tags.Get("LOG"); - if (_eacLog == null) _eacLog = tags.Get("LOGFILE"); - if (_eacLog == null) _eacLog = tags.Get("EACLOG"); - if (cuesheetTag == null) - throw new Exception("Input file does not contain a .cue sheet."); - sr = new StringReader (cuesheetTag); - pathAudio = pathIn; - _hasEmbeddedCUESheet = true; + string extension = Path.GetExtension(pathIn).ToLower(); + sr = null; + if (extension == ".flac" || extension == ".wv" || extension == ".ape") + { + string cuesheetTag = null; + TagLib.File fileInfo; + GetSampleLength(pathIn, out fileInfo); + NameValueCollection tags = Tagging.Analyze(fileInfo); + cuesheetTag = tags.Get("CUESHEET"); + _accurateRipId = tags.Get("ACCURATERIPID"); + _eacLog = tags.Get("LOG"); + if (_eacLog == null) _eacLog = tags.Get("LOGFILE"); + if (_eacLog == null) _eacLog = tags.Get("EACLOG"); + if (cuesheetTag != null) + { + sr = new StringReader(cuesheetTag); + pathAudio = pathIn; + _hasEmbeddedCUESheet = true; + } + } + if (!_hasEmbeddedCUESheet) + { + string cueSheet = CUESheet.CreateDummyCUESheet(_config, pathIn); + if (cueSheet == null) + throw new Exception("Input file doesn't seem to contain a cue sheet or be part of an album."); + sr = new StringReader(cueSheet); + List logFiles = new List(); + foreach (string logPath in Directory.GetFiles(cueDir == "" ? "." : cueDir, "*.log")) + logFiles.Add(new CUEToolsSourceFile(logPath, new StreamReader(logPath, CUESheet.Encoding))); + CUEToolsSourceFile selectedLogFile = ChooseFile(logFiles, null, false); + _eacLog = selectedLogFile != null ? selectedLogFile.contents : null; + } } using (sr) { @@ -1114,13 +1139,13 @@ namespace CUETools.Processor else if (command == "POSTGAP") { throw new Exception("POSTGAP command isn't supported."); } - else if ((command == "REM") && - (line.Params.Count >= 3) && - (line.Params[1].Length >= 10) && - (line.Params[1].Substring(0, 10).ToUpper() == "REPLAYGAIN")) - { - // Remove ReplayGain lines - } + //else if ((command == "REM") && + // (line.Params.Count >= 3) && + // (line.Params[1].Length >= 10) && + // (line.Params[1].Substring(0, 10).ToUpper() == "REPLAYGAIN")) + //{ + // // Remove ReplayGain lines + //} else if ((command == "REM") && (line.Params.Count == 3) && (line.Params[1].ToUpper() == "ACCURATERIPID")) @@ -2138,33 +2163,43 @@ namespace CUETools.Processor _arVerify.GenerateFullLog(sw, 0); } + public string GenerateAccurateRipStatus() + { + string prefix = ""; + if (hdcdDecoder != null && hdcdDecoder.Detected) + prefix += "hdcd detected, "; + if (_action == CUEAction.Verify || + _action == CUEAction.VerifyPlusCRCs || + (_action != CUEAction.Convert && _outputFormat != OutputAudioFormat.NoAudio)) + { + if (_arVerify.ARStatus != null) + prefix += _arVerify.ARStatus; + else + { + uint tracksMatch = 0; + int bestOffset = 0; + FindBestOffset(1, false, out tracksMatch, out bestOffset); + if (bestOffset != 0) + prefix += string.Format("offset {0}, ", bestOffset); + if (tracksMatch == TrackCount) + prefix += string.Format("rip accurate ({0}/{1})", _arVerify.WorstConfidence(), _arVerify.WorstTotal()); + else + prefix += "rip not accurate"; + } + } else + prefix += "done"; + return prefix; + } + public void GenerateAccurateRipTagsForTrack(NameValueCollection tags, int offset, int bestOffset, int iTrack, string prefix) { - uint total = 0; - uint matching = 0; - uint matching2 = 0; - uint matching3 = 0; - for (int iDisk = 0; iDisk < _arVerify.AccDisks.Count; iDisk++) - { - total += _arVerify.AccDisks[iDisk].tracks[iTrack].count; - if (_arVerify.CRC(iTrack, offset) == - _arVerify.AccDisks[iDisk].tracks[iTrack].CRC) - matching += _arVerify.AccDisks[iDisk].tracks[iTrack].count; - if (_arVerify.CRC(iTrack, bestOffset) == - _arVerify.AccDisks[iDisk].tracks[iTrack].CRC) - matching2 += _arVerify.AccDisks[iDisk].tracks[iTrack].count; - for (int oi = -_arOffsetRange; oi <= _arOffsetRange; oi++) - if (_arVerify.CRC(iTrack, oi) == - _arVerify.AccDisks[iDisk].tracks[iTrack].CRC) - matching3 += _arVerify.AccDisks[iDisk].tracks[iTrack].count; - } tags.Add(String.Format("{0}ACCURATERIPCRC", prefix), String.Format("{0:x8}", _arVerify.CRC(iTrack, offset))); tags.Add(String.Format("{0}AccurateRipDiscId", prefix), String.Format("{0:000}-{1}-{2:00}", TrackCount, _accurateRipId ?? AccurateRipVerify.CalculateAccurateRipId(_toc), iTrack + 1)); - tags.Add(String.Format("{0}ACCURATERIPCOUNT", prefix), String.Format("{0}", matching)); - tags.Add(String.Format("{0}ACCURATERIPCOUNTALLOFFSETS", prefix), String.Format("{0}", matching3)); - tags.Add(String.Format("{0}ACCURATERIPTOTAL", prefix), String.Format("{0}", total)); + tags.Add(String.Format("{0}ACCURATERIPCOUNT", prefix), String.Format("{0}", _arVerify.Confidence(iTrack, offset))); + tags.Add(String.Format("{0}ACCURATERIPCOUNTALLOFFSETS", prefix), String.Format("{0}", _arVerify.SumConfidence(iTrack))); + tags.Add(String.Format("{0}ACCURATERIPTOTAL", prefix), String.Format("{0}", _arVerify.Total(iTrack))); if (bestOffset != offset) - tags.Add(String.Format("{0}ACCURATERIPCOUNTWITHOFFSET", prefix), String.Format("{0}", matching2)); + tags.Add(String.Format("{0}ACCURATERIPCOUNTWITHOFFSET", prefix), String.Format("{0}", _arVerify.Confidence(iTrack, bestOffset))); } public void GenerateAccurateRipTags(NameValueCollection tags, int offset, int bestOffset, int iTrack) @@ -2503,7 +2538,7 @@ namespace CUETools.Processor WriteText(Path.ChangeExtension(_cuePath, ".toc"), TOCContents()); } } - return "done"; + return GenerateAccurateRipStatus(); } private NameValueCollection GenerateTrackTags(int iTrack, int bestOffset) @@ -2555,7 +2590,7 @@ namespace CUETools.Processor // these are not valid destTags.Remove("CUESHEET"); CleanupTags(destTags, "ACCURATERIP"); - CleanupTags(destTags, "REPLAYGAIN"); + //CleanupTags(destTags, "REPLAYGAIN"); if (_config.writeArTagsOnConvert) { @@ -2616,7 +2651,7 @@ namespace CUETools.Processor // these are not valid CleanupTags(destTags, "ACCURATERIP"); - CleanupTags(destTags, "REPLAYGAIN"); + //CleanupTags(destTags, "REPLAYGAIN"); destTags.Remove("CUESHEET"); if (fWithCUE) @@ -2884,18 +2919,23 @@ namespace CUETools.Processor audioDest.Close(); } - public static string CreateDummyCUESheet(string path, string extension) + public static string CreateDummyCUESheet(CUEConfig _config, string pathIn) + { + pathIn = Path.GetFullPath(pathIn); + List fileGroups = CUESheet.ScanFolder(_config, Path.GetDirectoryName(pathIn)); + FileGroupInfo fileGroup = FileGroupInfo.WhichContains(fileGroups, pathIn); + return fileGroup == null ? null : CreateDummyCUESheet(fileGroup); + } + + public static string CreateDummyCUESheet(FileGroupInfo fileGroup) { - string[] audioFiles = Directory.GetFiles(path, extension); - if (audioFiles.Length < 2) - return null; - Array.Sort(audioFiles); StringWriter sw = new StringWriter(); sw.WriteLine(String.Format("REM COMMENT \"CUETools generated dummy CUE sheet\"")); - for (int iFile = 0; iFile < audioFiles.Length; iFile++) + int trackNo = 0; + foreach (FileSystemInfo file in fileGroup.files) { - sw.WriteLine(String.Format("FILE \"{0}\" WAVE", Path.GetFileName(audioFiles[iFile]))); - sw.WriteLine(String.Format(" TRACK {0:00} AUDIO", iFile + 1)); + sw.WriteLine(String.Format("FILE \"{0}\" WAVE", file.Name)); + sw.WriteLine(String.Format(" TRACK {0:00} AUDIO", ++trackNo)); sw.WriteLine(String.Format(" INDEX 01 00:00:00")); } sw.Close(); @@ -3399,6 +3439,161 @@ namespace CUETools.Processor return _isCD; } } + + public static List ScanFolder(CUEConfig _config, string path) + { + DirectoryInfo dir = new DirectoryInfo(path); + return ScanFolder(_config, dir.GetFileSystemInfos()); + } + + public static List ScanFolder(CUEConfig _config, IEnumerable files) + { + List audioExtensions = new List(new string[] { ".flac", ".wv", ".ape", ".wav", ".m4a", ".tta", ".tak" }); + List embeddedExtensions = new List(new string[] { ".flac", ".wv", ".ape", ".tak" }); + List fileGroups = new List(); + foreach (FileSystemInfo file in files) + { + if ((file.Attributes & FileAttributes.Hidden) != 0) + continue; + if ((file.Attributes & FileAttributes.Directory) != 0) + { + // foreach (FileSystemInfo subfile in ((DirectoryInfo)e.file).GetFileSystemInfos()) + // if (IsVisible(subfile)) + // { + // e.isExpandable = true; + // break; + // } + fileGroups.Add(new FileGroupInfo(file, FileGroupInfoType.Folder)); + continue; + } + string ext = file.Extension.ToLower(); + if (ext == ".cue") + { + fileGroups.Add(new FileGroupInfo(file, FileGroupInfoType.CUESheetFile)); + continue; + } + if (ext == ".zip") + { + fileGroups.Add(new FileGroupInfo(file, FileGroupInfoType.Archive)); + //try + //{ + // using (ICSharpCode.SharpZipLib.Zip.ZipFile unzip = new ICSharpCode.SharpZipLib.Zip.ZipFile(file.FullName)) + // { + // foreach (ICSharpCode.SharpZipLib.Zip.ZipEntry entry in unzip) + // { + // if (entry.IsFile && Path.GetExtension(entry.Name).ToLower() == ".cue") + // { + // e.node.Nodes.Add(fileSystemTreeView1.NewNode(file, false)); + // break; + // } + + // } + // unzip.Close(); + // } + //} + //catch + //{ + //} + continue; + } + if (ext == ".rar") + { + fileGroups.Add(new FileGroupInfo(file, FileGroupInfoType.Archive)); + continue; + } + if (audioExtensions.Contains(ext)) + { + uint disc = 0; + bool cueFound = false; + TagLib.UserDefined.AdditionalFileTypes.Config = _config; + TagLib.File.IFileAbstraction fileAbsraction = new TagLib.File.LocalFileAbstraction(file.FullName); + try + { + TagLib.File fileInfo = TagLib.File.Create(fileAbsraction); + disc = fileInfo.Tag.Disc; + cueFound = embeddedExtensions.Contains(ext) && Tagging.Analyze(fileInfo).Get("CUESHEET") != null; + } + catch { } + if (cueFound) + { + fileGroups.Add(new FileGroupInfo(file, FileGroupInfoType.FileWithCUE)); + continue; + } + disc = Math.Min(5, Math.Max(1, disc)); + FileGroupInfo groupFound = null; + foreach (FileGroupInfo fileGroup in fileGroups) + { + if (fileGroup.type == FileGroupInfoType.TrackFiles && fileGroup.discNo == disc && fileGroup.main.Extension.ToLower() == ext) + { + groupFound = fileGroup; + break; + } + } + if (groupFound != null) + { + groupFound.files.Add(file); + } + else + { + groupFound = new FileGroupInfo(file, FileGroupInfoType.TrackFiles); + groupFound.discNo = disc; + groupFound.files.Add(file); + fileGroups.Add(groupFound); + // TODO: tracks must be sorted according to tracknumer (or filename if missing) + } + } + } + fileGroups.RemoveAll(new Predicate(FileGroupInfo.IsExcessive)); + return fileGroups; + } + } + + public enum FileGroupInfoType + { + Folder, + Archive, + CUESheetFile, + FileWithCUE, + TrackFiles + } + public class FileGroupInfo + { + public List files; + public FileSystemInfo main; + public FileGroupInfoType type; + public uint discNo; + + public FileGroupInfo(FileSystemInfo _main, FileGroupInfoType _type) + { + main = _main; + type = _type; + files = new List(); + } + + public static bool IsExcessive(FileGroupInfo group) + { + return group.type == FileGroupInfoType.TrackFiles && group.files.Count < 2; + } + + public bool Contains(string pathIn) + { + if (type != FileGroupInfoType.TrackFiles) + return false; + bool found = false; + foreach (FileSystemInfo file in files) + if (file.FullName.ToLower() == pathIn.ToLower()) + found = true; + return found; + } + public static FileGroupInfo WhichContains(IEnumerable fileGroups, string pathIn) + { + foreach (FileGroupInfo fileGroup in fileGroups) + { + if (fileGroup.type == FileGroupInfoType.TrackFiles && fileGroup.Contains(pathIn)) + return fileGroup; + } + return null; + } } public class ArchiveFileAbstraction : TagLib.File.IFileAbstraction diff --git a/CUETools/Program.cs b/CUETools/Program.cs index 7205b3f..476452f 100644 --- a/CUETools/Program.cs +++ b/CUETools/Program.cs @@ -55,7 +55,8 @@ namespace JDP { Application.SetCompatibleTextRenderingDefault(false); CUEConfig config = new CUEConfig(); config.Load(new SettingsReader("CUE Tools", "settings.txt")); - Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(config.language); + try { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(config.language); } + catch { } frmCUETools form = new frmCUETools(); if (!config.oneInstance || SingletonController.IamFirst(myId, new SingletonController.ReceiveDelegate(form.OnSecondCall))) { diff --git a/CUETools/frmCUETools.Designer.cs b/CUETools/frmCUETools.Designer.cs index ba11395..ab0431d 100644 --- a/CUETools/frmCUETools.Designer.cs +++ b/CUETools/frmCUETools.Designer.cs @@ -56,7 +56,6 @@ namespace JDP { this.btnSettings = new System.Windows.Forms.Button(); this.grpAction = new System.Windows.Forms.GroupBox(); this.rbActionCorrectFilenames = new System.Windows.Forms.RadioButton(); - this.chkRecursive = new System.Windows.Forms.CheckBox(); this.rbActionCreateCUESheet = new System.Windows.Forms.RadioButton(); this.chkMulti = new System.Windows.Forms.CheckBox(); this.rbActionVerifyAndCRCs = new System.Windows.Forms.RadioButton(); @@ -357,9 +356,7 @@ namespace JDP { // grpAction // this.grpAction.Controls.Add(this.rbActionCorrectFilenames); - this.grpAction.Controls.Add(this.chkRecursive); this.grpAction.Controls.Add(this.rbActionCreateCUESheet); - this.grpAction.Controls.Add(this.chkMulti); this.grpAction.Controls.Add(this.rbActionVerifyAndCRCs); this.grpAction.Controls.Add(this.rbActionVerifyAndEncode); this.grpAction.Controls.Add(this.rbActionVerifyThenEncode); @@ -377,13 +374,6 @@ namespace JDP { this.rbActionCorrectFilenames.UseVisualStyleBackColor = true; this.rbActionCorrectFilenames.CheckedChanged += new System.EventHandler(this.rbAction_CheckedChanged); // - // chkRecursive - // - resources.ApplyResources(this.chkRecursive, "chkRecursive"); - this.chkRecursive.Name = "chkRecursive"; - this.chkRecursive.UseVisualStyleBackColor = true; - this.chkRecursive.CheckedChanged += new System.EventHandler(this.chkRecursive_CheckedChanged); - // // rbActionCreateCUESheet // resources.ApplyResources(this.rbActionCreateCUESheet, "rbActionCreateCUESheet"); @@ -661,6 +651,7 @@ namespace JDP { this.grpInput.Controls.Add(this.textBatchReport); this.grpInput.Controls.Add(this.fileSystemTreeView1); this.grpInput.Controls.Add(this.txtInputPath); + this.grpInput.Controls.Add(this.chkMulti); this.grpInput.Name = "grpInput"; this.grpInput.TabStop = false; // @@ -690,7 +681,7 @@ namespace JDP { CUEControls.ExtraSpecialFolder.MyMusic, CUEControls.ExtraSpecialFolder.CommonMusic}; this.fileSystemTreeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterCheck); - this.fileSystemTreeView1.NodeAttributes += new CUEControls.FileSystemTreeViewNodeAttributesHandler(this.fileSystemTreeView1_NodeAttributes); + this.fileSystemTreeView1.NodeExpand += new CUEControls.FileSystemTreeViewNodeExpandHandler(this.fileSystemTreeView1_NodeExpand); this.fileSystemTreeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.fileSystemTreeView1_DragDrop); this.fileSystemTreeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.fileSystemTreeView1_AfterSelect); this.fileSystemTreeView1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.fileSystemTreeView1_MouseDown); @@ -878,7 +869,6 @@ namespace JDP { private CUEControls.FileSystemTreeView fileSystemTreeView1; private System.Windows.Forms.TextBox txtInputPath; private System.Windows.Forms.CheckBox chkMulti; - private System.Windows.Forms.CheckBox chkRecursive; private System.Windows.Forms.GroupBox grpInput; private System.Windows.Forms.GroupBox grpExtra; private System.Windows.Forms.RadioButton rbActionCorrectFilenames; diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index 7352806..b602570 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -65,15 +65,10 @@ namespace JDP { { foreach (TreeNode node in nodes) { - if (node.Checked && node.Tag is FileSystemInfo) - { - _batchPaths.Add(((FileSystemInfo)node.Tag).FullName); - if (!chkRecursive.Checked) - AddNodesToBatch(node.Nodes); - } - else + if (node.IsExpanded) AddNodesToBatch(node.Nodes); - node.Checked = false; + else if (node.Checked && node.Tag is FileSystemInfo) + _batchPaths.Add(((FileSystemInfo)node.Tag).FullName); } } @@ -84,7 +79,7 @@ namespace JDP { _batchReport = new StringBuilder(); _batchRoot = null; _batchProcessed = 0; - if (!chkMulti.Checked && !chkRecursive.Checked) + if (!chkMulti.Checked && !Directory.Exists(txtInputPath.Text)) { StartConvert(); return; @@ -99,8 +94,10 @@ namespace JDP { AddNodesToBatch(fileSystemTreeView1.Nodes); else { - _batchPaths.Add(txtInputPath.Text); _batchRoot = txtInputPath.Text; + if (Directory.Exists(_batchRoot) && !_batchRoot.EndsWith(new string(Path.DirectorySeparatorChar, 1))) + _batchRoot = _batchRoot + Path.DirectorySeparatorChar; + _batchPaths.Add(_batchRoot); } if (_batchPaths.Count == 0) { @@ -265,16 +262,13 @@ namespace JDP { } string pathIn = txtInputPath.Text; - if (!File.Exists(pathIn)) - { - if (!Directory.Exists(pathIn) && !IsCDROM(pathIn)) - throw new Exception("Input CUE Sheet not found."); - if (!pathIn.EndsWith(new string(Path.DirectorySeparatorChar, 1))) - { - pathIn = pathIn + Path.DirectorySeparatorChar; - txtInputPath.Text = pathIn; - } - } + if (!File.Exists(pathIn) && !Directory.Exists(pathIn) && !IsCDROM(pathIn)) + throw new Exception("Invalid input path."); + //if (Directory.Exists(pathIn) && !pathIn.EndsWith(new string(Path.DirectorySeparatorChar, 1))) + //{ + // pathIn = pathIn + Path.DirectorySeparatorChar; + // txtInputPath.Text = pathIn; + //} CUESheet cueSheet = new CUESheet(_config); cueSheet.PasswordRequired += new ArchivePasswordRequiredHandler(PasswordRequired); @@ -293,7 +287,6 @@ namespace JDP { p[3] = SelectedAction; p[4] = SelectedOutputAudioFormat; p[5] = chkLossyWAV.Checked; - p[6] = chkRecursive.Checked; SetupControls(true); _workThread.Priority = ThreadPriority.BelowNormal; @@ -347,30 +340,13 @@ namespace JDP { }); } - private bool TryDummyCUE(string pathIn, out string cueSheetContents, out string ext) - { - string[] audioExts = new string[] { "*.wav", "*.flac", "*.wv", "*.ape", "*.m4a", "*.tta", "*.tak" }; - for (int i = 0; i < audioExts.Length; i++) - { - cueSheetContents = CUESheet.CreateDummyCUESheet(pathIn, audioExts[i]); - if (cueSheetContents != null) - { - ext = audioExts[i].Substring(1); - return true; - } - } - cueSheetContents = null; - ext = null; - return false; - } - private void BatchLog(string format, string pathIn, params object[] args) { - if (_batchRoot == null || !pathIn.StartsWith(_batchRoot)) + if (_batchRoot == null || !pathIn.StartsWith(_batchRoot) || pathIn == _batchRoot) _batchReport.Append(pathIn); else { - _batchReport.Append("."); + _batchReport.Append(".\\"); _batchReport.Append(pathIn, _batchRoot.Length, pathIn.Length - _batchRoot.Length); } _batchReport.Append(": "); @@ -387,132 +363,106 @@ namespace JDP { CUEAction action = (CUEAction)p[3]; OutputAudioFormat outputFormat = (OutputAudioFormat)p[4]; bool lossyWAV = (bool)p[5]; - bool recursive = (bool)p[6]; DialogResult dlgRes = DialogResult.OK; try { if (action == CUEAction.CreateDummyCUE) { - if (_batchPaths.Count > 0 && Directory.Exists(pathIn)) + if (Directory.Exists(pathIn)) { - if (recursive) - _batchPaths.InsertRange(1, Directory.GetDirectories(pathIn)); + if (_batchPaths.Count == 0) + throw new Exception("is a directory"); + List fileGroups = CUESheet.ScanFolder(_config, pathIn); + int directoriesFound = 0, cueSheetsFound = 0; + foreach (FileGroupInfo fileGroup in fileGroups) + if (fileGroup.type == FileGroupInfoType.Folder) + _batchPaths.Insert(++directoriesFound, fileGroup.main.FullName); + foreach (FileGroupInfo fileGroup in fileGroups) + if (fileGroup.type == FileGroupInfoType.CUESheetFile) + throw new Exception("already contains a cue sheet"); + foreach (FileGroupInfo fileGroup in fileGroups) + if (fileGroup.type == FileGroupInfoType.TrackFiles) + _batchPaths.Insert(directoriesFound + (++cueSheetsFound), fileGroup.main.FullName); } - if (!Directory.Exists(pathIn)) - BatchLog("no such directory.", pathIn); else { - if (Directory.GetFiles(pathIn, "*.cue").Length != 0) - BatchLog("already contains a cue sheet.", pathIn); - else - { - string cueSheetContents, ext; - if (TryDummyCUE(pathIn, out cueSheetContents, out ext)) - { - string cueName = Path.GetFileName(Path.GetDirectoryName(pathIn)) + ".cuetools" + ext + ".cue"; - string fullCueName = Path.Combine(pathIn, cueName); - bool utf8Required = CUESheet.Encoding.GetString(CUESheet.Encoding.GetBytes(cueSheetContents)) != cueSheetContents; - StreamWriter sw1 = new StreamWriter(fullCueName, false, utf8Required ? Encoding.UTF8 : CUESheet.Encoding); - sw1.Write(cueSheetContents); - sw1.Close(); - BatchLog("created ok.", fullCueName); - } else - BatchLog("no audio files.", pathIn); - } + pathIn = Path.GetFullPath(pathIn); + List fileGroups = CUESheet.ScanFolder(_config, Path.GetDirectoryName(pathIn)); + FileGroupInfo fileGroup = FileGroupInfo.WhichContains(fileGroups, pathIn); + if (fileGroup == null) + throw new Exception("doesn't seem to be part of an album"); + string cueSheetContents = CUESheet.CreateDummyCUESheet(fileGroup); + string cueName = Path.GetFileName(Path.GetDirectoryName(pathIn)) + (fileGroup.discNo != 1 ? ".cd" + fileGroup.discNo.ToString() : "") + ".cuetools" + Path.GetExtension(pathIn) + ".cue"; + string fullCueName = Path.Combine(Path.GetDirectoryName(pathIn), cueName); + bool utf8Required = CUESheet.Encoding.GetString(CUESheet.Encoding.GetBytes(cueSheetContents)) != cueSheetContents; + StreamWriter sw1 = new StreamWriter(fullCueName, false, utf8Required ? Encoding.UTF8 : CUESheet.Encoding); + sw1.Write(cueSheetContents); + sw1.Close(); + BatchLog("created ok.", fullCueName); } } else if (action == CUEAction.CorrectFilenames) { - if (_batchPaths.Count > 0 && Directory.Exists(pathIn)) + if (Directory.Exists(pathIn)) { - string [] cues = Directory.GetFiles(pathIn, "*.cue", recursive ? - SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); + if (_batchPaths.Count == 0) + throw new Exception("is a directory"); + string[] cues = Directory.GetFiles(pathIn, "*.cue", SearchOption.AllDirectories); if (cues.Length == 0) BatchLog("no cue files.", pathIn); else _batchPaths.InsertRange(1, cues); } - try + else { - if (Directory.Exists(pathIn)) + if (Path.GetExtension(pathIn).ToLower() != ".cue") + throw new Exception("is not a .cue file"); + string cue = null; + using (StreamReader sr = new StreamReader(pathIn, CUESheet.Encoding)) + cue = sr.ReadToEnd(); + string fixedCue = CUESheet.CorrectAudioFilenames(Path.GetDirectoryName(pathIn), cue, true, null); + if (fixedCue != cue) { - if (_batchPaths.Count == 0) - throw new Exception ("is a directory"); + using (StreamWriter sw = new StreamWriter(pathIn, false, CUESheet.Encoding)) + sw.Write(fixedCue); + BatchLog("corrected.", pathIn); } else - { - if (Path.GetExtension(pathIn).ToLower() != ".cue") - throw new Exception("is not a .cue file"); - string cue = null; - using (StreamReader sr = new StreamReader(pathIn, CUESheet.Encoding)) - cue = sr.ReadToEnd(); - string fixedCue = CUESheet.CorrectAudioFilenames(Path.GetDirectoryName(pathIn), cue, true, null); - if (fixedCue != cue) - { - using (StreamWriter sw = new StreamWriter(pathIn, false, CUESheet.Encoding)) - sw.Write(fixedCue); - BatchLog("corrected.", pathIn); - } - else - BatchLog("no changes.", pathIn); - } - } - catch (Exception ex) - { - BatchLog("{0}.", pathIn, ex.Message); + BatchLog("no changes.", pathIn); } } else { - bool foundImages = false; - bool foundAudio = false; - bool processThis = true; - - if (_batchPaths.Count > 0 && Directory.Exists(pathIn)) + if (Directory.Exists(pathIn)) { - if (recursive) - _batchPaths.InsertRange(1, Directory.GetDirectories(pathIn)); - string[] cueFiles = Directory.GetFiles(pathIn, "*.cue"); - if (cueFiles.Length > 0) - { - _batchPaths.InsertRange(1, cueFiles); - foundImages = true; - } - else - { - string cueSheetContents, ext1; - foundAudio = TryDummyCUE(pathIn, out cueSheetContents, out ext1); - string[] audioExts = new string[] { "*.flac", "*.wv", "*.ape" }; - foreach (string ext in audioExts) - foreach (string audioFile in Directory.GetFiles(pathIn, ext)) - { - TagLib.UserDefined.AdditionalFileTypes.Config = _config; - TagLib.File.IFileAbstraction file = new TagLib.File.LocalFileAbstraction(audioFile); - try - { - TagLib.File fileInfo = TagLib.File.Create(file); - NameValueCollection tags = Tagging.Analyze(fileInfo); - if (tags.Get("CUESHEET") != null) - { - _batchPaths.Insert(1, audioFile); - foundImages = true; - } - } - catch - { - } - } - } - processThis = !foundImages && foundAudio; - } - - if (processThis) + if (_batchPaths.Count == 0) + throw new Exception("is a directory"); + List fileGroups = CUESheet.ScanFolder(_config, pathIn); + int directoriesFound = 0, cueSheetsFound = 0; + foreach(FileGroupInfo fileGroup in fileGroups) + if (fileGroup.type == FileGroupInfoType.Folder) + _batchPaths.Insert(++directoriesFound, fileGroup.main.FullName); + foreach (FileGroupInfo fileGroup in fileGroups) + if (fileGroup.type == FileGroupInfoType.CUESheetFile) + _batchPaths.Insert(directoriesFound + (++cueSheetsFound), fileGroup.main.FullName); + if (cueSheetsFound == 0) + foreach (FileGroupInfo fileGroup in fileGroups) + if (fileGroup.type == FileGroupInfoType.FileWithCUE) + _batchPaths.Insert(directoriesFound + (++cueSheetsFound), fileGroup.main.FullName); + if (cueSheetsFound == 0) + foreach (FileGroupInfo fileGroup in fileGroups) + if (fileGroup.type == FileGroupInfoType.TrackFiles) + _batchPaths.Insert(directoriesFound + (++cueSheetsFound), fileGroup.main.FullName); + } else { bool convertAction = action == CUEAction.Convert || action == CUEAction.VerifyAndConvert || action == CUEAction.VerifyThenConvert; string pathOut = null; List releases = null; + if (Directory.Exists(pathIn) && !pathIn.EndsWith(new string(Path.DirectorySeparatorChar, 1))) + pathIn = pathIn + Path.DirectorySeparatorChar; + cueSheet.Action = action; cueSheet.Open(pathIn); if (action != CUEAction.Convert) @@ -530,7 +480,7 @@ namespace JDP { this.Invoke((MethodInvoker)delegate() { toolStripStatusLabelAR.Visible = action != CUEAction.Convert;// && cueSheet.ArVerify.ARStatus == null; - toolStripStatusLabelAR.Text = cueSheet.ArVerify.ARStatus == null ? cueSheet.ArVerify.Total(0).ToString() : "?"; + toolStripStatusLabelAR.Text = cueSheet.ArVerify.ARStatus == null ? cueSheet.ArVerify.WorstTotal().ToString() : "?"; toolStripStatusLabelAR.ToolTipText = "AccurateRip: " + (cueSheet.ArVerify.ARStatus ?? "found") + "."; if (releases != null) { @@ -545,6 +495,7 @@ namespace JDP { } } UpdateOutputPath( + pathIn, cueSheet.Year != "" ? cueSheet.Year : "YYYY", cueSheet.Artist != "" ? cueSheet.Artist : "Unknown Artist", cueSheet.Title != "" ? cueSheet.Title : "Unknown Title"); @@ -711,13 +662,14 @@ namespace JDP { bool converting = (SelectedAction == CUEAction.Convert || SelectedAction == CUEAction.VerifyAndConvert || SelectedAction == CUEAction.VerifyThenConvert); bool verifying = (SelectedAction == CUEAction.Verify || SelectedAction == CUEAction.VerifyPlusCRCs || SelectedAction == CUEAction.VerifyAndConvert || SelectedAction == CUEAction.VerifyThenConvert); //grpInput.Enabled = !running; + fileSystemTreeView1.Enabled = !running; txtInputPath.Enabled = !running; grpExtra.Enabled = !running; grpOutputPathGeneration.Enabled = !running; grpAudioOutput.Enabled = !running && converting; grpAction.Enabled = !running; grpOutputStyle.Enabled = !running && converting; - grpFreedb.Enabled = !running && converting; + grpFreedb.Enabled = !running && !chkMulti.Checked && converting; txtDataTrackLength.Enabled = !running && verifying; txtPreGapLength.Enabled = !running; btnAbout.Enabled = !running; @@ -810,7 +762,6 @@ namespace JDP { _usePregapForFirstTrackInSingleFile = sr.LoadBoolean("UsePregapForFirstTrackInSingleFile") ?? false; _reducePriority = sr.LoadBoolean("ReducePriority") ?? true; chkMulti.Checked = sr.LoadBoolean("BatchProcessing") ?? false; - chkRecursive.Checked = sr.LoadBoolean("RecursiveProcessing") ?? true; chkLossyWAV.Checked = sr.LoadBoolean("LossyWav") ?? false; switch (sr.LoadInt32("FreedbLookup", null, null) ?? 2) { @@ -834,7 +785,6 @@ namespace JDP { sw.Save("UsePregapForFirstTrackInSingleFile", _usePregapForFirstTrackInSingleFile); sw.Save("ReducePriority", _reducePriority); sw.Save("BatchProcessing", chkMulti.Checked); - sw.Save("RecursiveProcessing", chkRecursive.Checked); sw.Save("LossyWav", chkLossyWAV.Checked); sw.Save("FreedbLookup", rbFreedbNever.Checked ? 0 : rbFreedbIf.Checked ? 1 : 2); _config.Save(sw); @@ -1050,10 +1000,10 @@ namespace JDP { } private void UpdateOutputPath() { - UpdateOutputPath("YYYY", "Artist", "Album"); + UpdateOutputPath(txtInputPath.Text, "YYYY", "Artist", "Album"); } - private void UpdateOutputPath(string year, string artist, string album) { + private void UpdateOutputPath(string pathIn, string year, string artist, string album) { /* if (rbArVerify.Checked) { txtOutputPath.Text = txtInputPath.Text; @@ -1069,14 +1019,14 @@ namespace JDP { { txtOutputPath.ReadOnly = true; btnBrowseOutput.Enabled = false; - txtOutputPath.Text = GenerateOutputPath(year, artist, album); + txtOutputPath.Text = GenerateOutputPath(pathIn, year, artist, album); } } - private string GenerateOutputPath(string year, string artist, string album) { - string pathIn, pathOut, dir, file, ext; + private string GenerateOutputPath(string pathIn, string year, string artist, string album) + { + string pathOut, dir, file, ext; - pathIn = txtInputPath.Text; pathOut = String.Empty; if ((pathIn.Length != 0) && (File.Exists(pathIn) || Directory.Exists(pathIn))) @@ -1298,82 +1248,17 @@ namespace JDP { UpdateOutputPath(); } - private void fileSystemTreeView1_NodeAttributes(object sender, CUEControls.FileSystemTreeViewNodeAttributesEventArgs e) + private void fileSystemTreeView1_NodeExpand(object sender, CUEControls.FileSystemTreeViewNodeExpandEventArgs e) { - if ((e.file.Attributes & FileAttributes.Hidden) != 0) + List fileGroups = CUESheet.ScanFolder(_config, e.files); + foreach (FileGroupInfo fileGroup in fileGroups) { - e.isVisible = false; - return; + TreeNode node = fileSystemTreeView1.NewNode(fileGroup.main, fileGroup.type == FileGroupInfoType.Folder); + if (fileGroup.type == FileGroupInfoType.TrackFiles) + node.Text = node.Text + ": " + fileGroup.files.Count.ToString() + " files"; + e.node.Nodes.Add(node); } - if ((e.file.Attributes & FileAttributes.Directory) != 0) - { - e.isVisible = true; - e.isExpandable = true; - // e.isExpandable = false; - // foreach (FileSystemInfo subfile in ((DirectoryInfo)e.file).GetFileSystemInfos()) - // if (IsVisible(subfile)) - // { - // e.isExpandable = true; - // break; - // } - return; - } - string ext = e.file.Extension.ToLower(); - if (ext == ".cue") - { - e.isVisible = true; - e.isExpandable = false; - return; - } - if (ext == ".zip") - { - e.isVisible = false; - e.isExpandable = false; - try - { - using (ICSharpCode.SharpZipLib.Zip.ZipFile unzip = new ICSharpCode.SharpZipLib.Zip.ZipFile(e.file.FullName)) - { - foreach (ICSharpCode.SharpZipLib.Zip.ZipEntry entry in unzip) - { - if (entry.IsFile && Path.GetExtension(entry.Name).ToLower() == ".cue") - { - e.isVisible = true; - break; - } - - } - unzip.Close(); - } - } - catch - { - } - return; - } - if (ext == ".rar") - { - e.isVisible = true; - e.isExpandable = false; - return; - } - if (ext != "" && ".flac;.ape;.wv;".Contains(ext)) - { - TagLib.UserDefined.AdditionalFileTypes.Config = _config; - TagLib.File.IFileAbstraction file = new TagLib.File.LocalFileAbstraction(e.file.FullName); - try - { - TagLib.File fileInfo = TagLib.File.Create(file); - NameValueCollection tags = Tagging.Analyze(fileInfo); - e.isVisible = tags.Get("CUESHEET") != null; - } - catch - { - e.isVisible = false; - } - e.isExpandable = false; - return; - } - return; + //toolTip1.Show } private void UpdateActions() @@ -1388,34 +1273,21 @@ namespace JDP { rbActionVerifyThenEncode.Enabled = true; rbActionVerifyAndEncode.Enabled = true; } - else if (chkRecursive.Checked) - { - string pathIn = txtInputPath.Text; - rbActionCorrectFilenames.Enabled = - rbActionCreateCUESheet.Enabled = - rbActionVerifyAndEncode.Enabled = - rbActionVerifyThenEncode.Enabled = - rbActionVerify.Enabled = - rbActionVerifyAndCRCs.Enabled = - rbActionEncode.Enabled = pathIn.Length != 0 && Directory.Exists(pathIn); - } else { string pathIn = txtInputPath.Text; - string cueSheetContents, ext; rbActionCorrectFilenames.Enabled = pathIn.Length != 0 - && File.Exists(pathIn) - && Path.GetExtension(pathIn).ToLower() == ".cue"; + && ((File.Exists(pathIn) && Path.GetExtension(pathIn).ToLower() == ".cue") + || Directory.Exists(pathIn)); rbActionCreateCUESheet.Enabled = pathIn.Length != 0 - && Directory.Exists(pathIn) - && Directory.GetFiles(pathIn, "*.cue").Length == 0 - && TryDummyCUE(pathIn, out cueSheetContents, out ext); + && ((File.Exists(pathIn) && CUESheet.CreateDummyCUESheet(_config, pathIn) != null) + || Directory.Exists(pathIn)); rbActionVerifyAndEncode.Enabled = rbActionVerifyThenEncode.Enabled = rbActionVerify.Enabled = rbActionVerifyAndCRCs.Enabled = - rbActionEncode.Enabled = pathIn.Length != 0 - && (File.Exists(pathIn) || IsCDROM(pathIn) || rbActionCreateCUESheet.Enabled); + rbActionEncode.Enabled = pathIn.Length != 0 + && (File.Exists(pathIn) || Directory.Exists(pathIn) || IsCDROM(pathIn)); } btnConvert.Enabled = btnConvert.Visible && ((rbActionCorrectFilenames.Enabled && rbActionCorrectFilenames.Checked) @@ -1439,18 +1311,22 @@ namespace JDP { private void chkMulti_CheckedChanged(object sender, EventArgs e) { fileSystemTreeView1.CheckBoxes = chkMulti.Checked; - if (fileSystemTreeView1.SelectedNode != null) + if (fileSystemTreeView1.SelectedNode == null) { - if (chkMulti.Checked) - fileSystemTreeView1.SelectedNode.Checked = true; - fileSystemTreeView1.SelectedNode.Expand(); + if (fileSystemTreeView1.Nodes.Count > 0) + fileSystemTreeView1.SelectedNode = fileSystemTreeView1.Nodes[0]; + else + return; } - UpdateActions(); + if (chkMulti.Checked && fileSystemTreeView1.SelectedNode.Tag is FileSystemInfo) + fileSystemTreeView1.SelectedNode.Checked = true; + fileSystemTreeView1.SelectedNode.Expand(); + SetupControls(false); } private void chkRecursive_CheckedChanged(object sender, EventArgs e) { - UpdateActions(); + SetupControls(false); } private void fileSystemTreeView1_AfterExpand(object sender, TreeViewEventArgs e) @@ -1460,7 +1336,7 @@ namespace JDP { private void fileSystemTreeView1_AfterCheck(object sender, TreeViewEventArgs e) { - if (chkMulti.Checked && chkRecursive.Checked) + if (chkMulti.Checked) foreach (TreeNode node in e.Node.Nodes) node.Checked = e.Node.Checked; } @@ -1595,7 +1471,6 @@ namespace JDP { } } } - } enum OutputPathGeneration { diff --git a/CUETools/frmCUETools.de-DE.resx b/CUETools/frmCUETools.de-DE.resx index f54c9a7..28c082d 100644 --- a/CUETools/frmCUETools.de-DE.resx +++ b/CUETools/frmCUETools.de-DE.resx @@ -122,6 +122,7 @@ ... + CUE-Stil @@ -279,9 +280,6 @@ - - Multiple - diff --git a/CUETools/frmCUETools.resx b/CUETools/frmCUETools.resx index bf824b1..488c821 100644 --- a/CUETools/frmCUETools.resx +++ b/CUETools/frmCUETools.resx @@ -1209,138 +1209,6 @@ 3 - - rbActionCorrectFilenames - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 0 - - - chkRecursive - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 1 - - - rbActionCreateCUESheet - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 2 - - - chkMulti - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 3 - - - rbActionVerifyAndCRCs - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 4 - - - rbActionVerifyAndEncode - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 5 - - - rbActionVerifyThenEncode - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 6 - - - rbActionVerify - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 7 - - - rbActionEncode - - - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 8 - - - 255, 159 - - - 165, 171 - - - 4 - - - Action - - - grpAction - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel1 - - - 9 - True @@ -1371,36 +1239,6 @@ 0 - - True - - - NoControl - - - 10, 148 - - - 73, 17 - - - 8 - - - Recursive - - - chkRecursive - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 1 - True @@ -1429,37 +1267,7 @@ grpAction - 2 - - - True - - - NoControl - - - 89, 148 - - - 62, 17 - - - 7 - - - Multiple - - - chkMulti - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpAction - - - 3 + 1 True @@ -1492,7 +1300,7 @@ grpAction - 4 + 2 True @@ -1522,7 +1330,7 @@ grpAction - 5 + 3 True @@ -1555,7 +1363,7 @@ grpAction - 6 + 4 True @@ -1588,7 +1396,7 @@ grpAction - 7 + 5 True @@ -1621,7 +1429,61 @@ grpAction - 8 + 6 + + + 255, 159 + + + 165, 171 + + + 4 + + + Action + + + grpAction + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panel1 + + + 9 + + + True + + + NoControl + + + 7, 20 + + + 15, 14 + + + 7 + + + MiddleRight + + + chkMulti + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpInput + + + 3 76, 14 @@ -2157,10 +2019,10 @@ Top, Left, Right - 6, 16 + 28, 16 - 226, 21 + 204, 21 0 @@ -2180,54 +2042,6 @@ Top, Bottom, Left, Right - - textBatchReport - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpInput - - - 0 - - - fileSystemTreeView1 - - - CUEControls.FileSystemTreeView, CUEControls, Version=1.0.3368.28004, Culture=neutral, PublicKeyToken=null - - - grpInput - - - 1 - - - 8, 5 - - - 238, 414 - - - 0 - - - Input - - - grpInput - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - Top, Bottom, Left, Right @@ -2280,7 +2094,7 @@ fileSystemTreeView1 - CUEControls.FileSystemTreeView, CUEControls, Version=1.0.3368.28004, Culture=neutral, PublicKeyToken=null + CUEControls.FileSystemTreeView, CUEControls, Version=1.0.3371.39361, Culture=neutral, PublicKeyToken=null grpInput @@ -2288,6 +2102,30 @@ 1 + + 8, 5 + + + 238, 414 + + + 0 + + + Input + + + grpInput + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + numericWriteOffset diff --git a/CUETools/frmCUETools.ru-RU.resx b/CUETools/frmCUETools.ru-RU.resx index 872a13f..533d13a 100644 --- a/CUETools/frmCUETools.ru-RU.resx +++ b/CUETools/frmCUETools.ru-RU.resx @@ -193,12 +193,6 @@ Создать .cue - - 81, 148 - - - Несколько - Проверка + CRC diff --git a/CUETools/frmSettings.Designer.cs b/CUETools/frmSettings.Designer.cs index 5eca1bf..0c0a6ac 100644 --- a/CUETools/frmSettings.Designer.cs +++ b/CUETools/frmSettings.Designer.cs @@ -27,6 +27,8 @@ namespace JDP { System.Windows.Forms.Button btnCancel; System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmSettings)); this.grpGeneral = new System.Windows.Forms.GroupBox(); + this.labelLanguage = new System.Windows.Forms.Label(); + this.comboLanguage = new System.Windows.Forms.ComboBox(); this.chkSingleInstance = new System.Windows.Forms.CheckBox(); this.chkOverwriteTags = new System.Windows.Forms.CheckBox(); this.chkExtractLog = new System.Windows.Forms.CheckBox(); @@ -54,14 +56,12 @@ namespace JDP { this.chkArFixOffset = new System.Windows.Forms.CheckBox(); this.chkWriteArLogOnConvert = new System.Windows.Forms.CheckBox(); this.chkWriteArTagsOnConvert = new System.Windows.Forms.CheckBox(); - this.labelEncodeWhenPercent = new System.Windows.Forms.Label(); this.numEncodeWhenPercent = new System.Windows.Forms.NumericUpDown(); this.labelEncodeWhenConfidence = new System.Windows.Forms.Label(); this.numEncodeWhenConfidence = new System.Windows.Forms.NumericUpDown(); this.chkArNoUnverifiedAudio = new System.Windows.Forms.CheckBox(); this.labelFixWhenConfidence = new System.Windows.Forms.Label(); this.numFixWhenConfidence = new System.Windows.Forms.NumericUpDown(); - this.labelFixWhenPercent = new System.Windows.Forms.Label(); this.numFixWhenPercent = new System.Windows.Forms.NumericUpDown(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); this.chkFilenamesANSISafe = new System.Windows.Forms.CheckBox(); @@ -114,8 +114,6 @@ namespace JDP { this.tabPage4 = new System.Windows.Forms.TabPage(); this.grpHDCD = new System.Windows.Forms.GroupBox(); this.chkHDCDDetect = new System.Windows.Forms.CheckBox(); - this.comboLanguage = new System.Windows.Forms.ComboBox(); - this.labelLanguage = new System.Windows.Forms.Label(); btnCancel = new System.Windows.Forms.Button(); this.grpGeneral.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numericFLACCompressionLevel)).BeginInit(); @@ -168,6 +166,19 @@ namespace JDP { this.grpGeneral.Name = "grpGeneral"; this.grpGeneral.TabStop = false; // + // labelLanguage + // + resources.ApplyResources(this.labelLanguage, "labelLanguage"); + this.labelLanguage.Name = "labelLanguage"; + // + // comboLanguage + // + this.comboLanguage.DisplayMember = "EnglishName"; + this.comboLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboLanguage.FormattingEnabled = true; + resources.ApplyResources(this.comboLanguage, "comboLanguage"); + this.comboLanguage.Name = "comboLanguage"; + // // chkSingleInstance // resources.ApplyResources(this.chkSingleInstance, "chkSingleInstance"); @@ -337,14 +348,12 @@ namespace JDP { this.groupBox1.Controls.Add(this.chkArFixOffset); this.groupBox1.Controls.Add(this.chkWriteArLogOnConvert); this.groupBox1.Controls.Add(this.chkWriteArTagsOnConvert); - this.groupBox1.Controls.Add(this.labelEncodeWhenPercent); this.groupBox1.Controls.Add(this.numEncodeWhenPercent); this.groupBox1.Controls.Add(this.labelEncodeWhenConfidence); this.groupBox1.Controls.Add(this.numEncodeWhenConfidence); this.groupBox1.Controls.Add(this.chkArNoUnverifiedAudio); this.groupBox1.Controls.Add(this.labelFixWhenConfidence); this.groupBox1.Controls.Add(this.numFixWhenConfidence); - this.groupBox1.Controls.Add(this.labelFixWhenPercent); this.groupBox1.Controls.Add(this.numFixWhenPercent); resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; @@ -382,11 +391,6 @@ namespace JDP { this.toolTip1.SetToolTip(this.chkWriteArTagsOnConvert, resources.GetString("chkWriteArTagsOnConvert.ToolTip")); this.chkWriteArTagsOnConvert.UseVisualStyleBackColor = true; // - // labelEncodeWhenPercent - // - resources.ApplyResources(this.labelEncodeWhenPercent, "labelEncodeWhenPercent"); - this.labelEncodeWhenPercent.Name = "labelEncodeWhenPercent"; - // // numEncodeWhenPercent // this.numEncodeWhenPercent.Increment = new decimal(new int[] { @@ -455,11 +459,6 @@ namespace JDP { 0, 0, 0}); - // - // labelFixWhenPercent - // - resources.ApplyResources(this.labelFixWhenPercent, "labelFixWhenPercent"); - this.labelFixWhenPercent.Name = "labelFixWhenPercent"; // // numFixWhenPercent // @@ -871,19 +870,6 @@ namespace JDP { this.chkHDCDDetect.UseVisualStyleBackColor = true; this.chkHDCDDetect.CheckedChanged += new System.EventHandler(this.chkHDCDDetect_CheckedChanged); // - // comboLanguage - // - this.comboLanguage.DisplayMember = "EnglishName"; - this.comboLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.comboLanguage.FormattingEnabled = true; - resources.ApplyResources(this.comboLanguage, "comboLanguage"); - this.comboLanguage.Name = "comboLanguage"; - // - // labelLanguage - // - resources.ApplyResources(this.labelLanguage, "labelLanguage"); - this.labelLanguage.Name = "labelLanguage"; - // // frmSettings // this.AcceptButton = this.btnOK; @@ -957,7 +943,6 @@ namespace JDP { private System.Windows.Forms.NumericUpDown numericFLACCompressionLevel; private System.Windows.Forms.ToolTip toolTip1; private System.Windows.Forms.NumericUpDown numFixWhenPercent; - private System.Windows.Forms.Label labelFixWhenPercent; private System.Windows.Forms.Label labelFixWhenConfidence; private System.Windows.Forms.NumericUpDown numFixWhenConfidence; private System.Windows.Forms.GroupBox grpAudioFilenames; @@ -976,7 +961,6 @@ namespace JDP { private System.Windows.Forms.NumericUpDown numEncodeWhenConfidence; private System.Windows.Forms.NumericUpDown numEncodeWhenPercent; private System.Windows.Forms.CheckBox chkArFixOffset; - private System.Windows.Forms.Label labelEncodeWhenPercent; private System.Windows.Forms.CheckBox chkEmbedLog; private System.Windows.Forms.CheckBox chkFillUpCUE; private System.Windows.Forms.CheckBox chkFilenamesANSISafe; diff --git a/CUETools/frmSettings.cs b/CUETools/frmSettings.cs index f6f6a26..346083f 100644 --- a/CUETools/frmSettings.cs +++ b/CUETools/frmSettings.cs @@ -79,7 +79,7 @@ namespace JDP { chkUDC1APEv2.Checked = _config.udc1APEv2; chkUDC1ID3v2.Checked = _config.udc1ID3v2; - string[] cultures = { "en-US", "de-DE", "ru-RU", "en-EN" }; + string[] cultures = { "en-US", "de-DE", "ru-RU" }; foreach (string culture in cultures) { try @@ -184,13 +184,11 @@ namespace JDP { { numFixWhenConfidence.Enabled = labelFixWhenConfidence.Enabled = - numFixWhenPercent.Enabled = - labelFixWhenPercent.Enabled = chkArFixOffset.Checked; + numFixWhenPercent.Enabled = chkArFixOffset.Checked; numEncodeWhenConfidence.Enabled = labelEncodeWhenConfidence.Enabled = numEncodeWhenPercent.Enabled = - labelEncodeWhenPercent.Enabled = chkEncodeWhenZeroOffset.Enabled = chkArNoUnverifiedAudio.Checked; grpHDCD.Enabled = chkHDCDDetect.Checked; diff --git a/CUETools/frmSettings.de-DE.resx b/CUETools/frmSettings.de-DE.resx index 55082cc..f3655d4 100644 --- a/CUETools/frmSettings.de-DE.resx +++ b/CUETools/frmSettings.de-DE.resx @@ -126,23 +126,16 @@ Auf eine Instanz beschränken - - - 150, 17 - CUE-Daten überschreiben - - 114, 17 - Extrahiere Logdatei @@ -152,54 +145,36 @@ - - 209, 17 - Reduziere Prozesspriorität auf Untätig - - 225, 17 - Nullsamples abschneiden, falls vorhanden Einige fehlerhafte FLAC-Kodierer fügen am Ende jeder Datei zusätzliche 4608 Nullsamples ein. Sie können automatisch erkannt und entfernt werden - - 232, 17 - Erstelle .cue-Datei auch, wenn eingebettet - - 151, 17 - Erstelle .m3u-Abspiellisten - - 255, 17 - Fehlende CUE-Daten anhand der Tags auffüllen - - 150, 17 - Bette Logdatei als Tag ein @@ -209,36 +184,24 @@ - - 183, 17 - Audiodaten suchen, falls fehlend Zuvor Dateinamen korrigieren, wenn Audiodaten nicht gefunden werden können - - 251, 17 - HTOA für Ausg. mit angeh. Lücken beibehalten - - 86, 13 - Schreibe Offset: - - 271, 249 - Allgemein @@ -248,18 +211,12 @@ - - 101, 13 - Kompressionsstufe: - - 79, 17 - Verifizieren @@ -278,27 +235,18 @@ - - 87, 17 - Extramodus: - - 73, 17 - Sehr hoch - - 49, 17 - Hoch @@ -308,69 +256,39 @@ - - 58, 17 - Schnell - - 174, 62 - - - 99, 17 - und Null-Offset - - 132, 17 - - Korrigiere Offset, falls + Korrigiere Offset, falls % der verif. Tracks >= - - 149, 17 - Schreibe AccurateRip-Log - - 155, 17 - Schreibe AccurateRip-Tags Füge den Ausgabedateien ACCURATERIPCOUNT/ACCURATERIPCOUNTALLOFFSETS/ACCURATERIPTOTAL-Tags hinzu. Sie können foobar2000 dazu bringen, die Werte anzuzeigen, und sehen, ob Ihre Musik korrekt kopiert wurde oder wie beliebt sie ist. - - 119, 13 - - - % der verif. Tracks >= - - - - - - 91, 13 - mit Vertrauen >= @@ -380,11 +298,8 @@ - - 113, 17 - - Nur kodieren, falls + Nur kodieren, falls % der verif. Tracks >= @@ -398,12 +313,6 @@ - - % der verif. Tracks >= - - - - @@ -413,156 +322,99 @@ - - 163, 17 - ANSI-Dateinamen erzwingen Zur Kompatibilität mit Nicht-Unicode-Anwendungen nur Zeichen erlauben, die in der ANSI-Codepage vorhanden sind. - - 155, 17 - Schreibe AccurateRip-Tags Füge den Eingabedateien ACCURATERIPCOUNT/ACCURATERIPCOUNTALLOFFSETS/ACCURATERIPTOTAL-Tags hinzu. Sie können foobar2000 dazu bringen, die Werte anzuzeigen, und sehen, ob Ihre Musik korrekt kopiert wurde oder wie beliebt sie ist. - - 154, 17 - Dekodiere HDCD auf 20 Bit HDCD-Dekodierung ist nicht umkehrbar. Die resultierenden Dateien können nicht auf CD gebrannt werden. 24-Bit-Audiodateien werden erstellt, aber die eigentliche Bitrate beträgt 20 Bit - - 163, 17 - Nach 750 Frames abbrechen Nicht mehr nach HDCD-Informationen suchen, wenn sie in den ersten 10 Sekunden der CD nicht zu finden sind - - 179, 17 - Speichere als 24-Bit-"verlustfrei" Wenn lossyWAV nicht verwendet wird, für Kompatibilität auf 24 Bit erweitern - - 174, 17 - Speichere als 16-Bit-LossyWAV Beim Konvertieren in lossyWAV auf 16 Bit beschneiden - - 187, 17 - Originale Dateinamen beibehalten - - 137, 21 - - - 176, 17 - Entferne Sonderzeichen außer: - - 207, 17 - Ersetze Leerzeichen mit Unterstrichen - - 137, 21 - - - 69, 13 - Trackformat: - - 70, 13 - Einzelformat: - - 137, 21 - - - 283, 6 - - - 246, 204 - Audio-Dateinamen - - 65, 17 - Verrückt - - 73, 17 - Sehr hoch - - 49, 17 - Hoch @@ -572,9 +424,6 @@ - - 58, 17 - Schnell @@ -584,9 +433,6 @@ - - 149, 17 - Schreibe AccurateRip-Log @@ -611,9 +457,6 @@ - - 49, 13 - Qualität: @@ -626,27 +469,18 @@ - - 82, 17 - ID3v2-Tags - - 84, 17 - APEv2-Tags - - 57, 13 - Parameter @@ -671,9 +505,6 @@ - - 57, 13 - Parameter @@ -683,9 +514,6 @@ - - 65, 13 - Erweiterung @@ -704,18 +532,12 @@ - - 205, 165 - HDCD-Optionen - - 148, 17 - Erkenne HDCD-Kodierung diff --git a/CUETools/frmSettings.resx b/CUETools/frmSettings.resx index da3afed..98ea353 100644 --- a/CUETools/frmSettings.resx +++ b/CUETools/frmSettings.resx @@ -129,7 +129,7 @@ - 6 + 2 Cancel @@ -156,7 +156,7 @@ 54, 13 - 14 + 11 Language @@ -180,7 +180,7 @@ 166, 21 - 13 + 12 comboLanguage @@ -201,13 +201,13 @@ 12, 21 - 156, 17 + 151, 17 - 12 + 0 - One instance of application + Disallow multiple instances chkSingleInstance @@ -231,7 +231,7 @@ 122, 17 - 11 + 10 Overwrite CUE data @@ -262,7 +262,7 @@ 95, 17 - 10 + 4 Extract log file @@ -292,7 +292,7 @@ 173, 17 - 9 + 1 Reduce process priority to Idle @@ -322,7 +322,7 @@ 215, 17 - 8 + 7 Truncate extra 4608 samples if present @@ -352,7 +352,7 @@ 189, 17 - 7 + 6 Create .cue file even if embedded @@ -379,7 +379,7 @@ 127, 17 - 6 + 5 Create .m3u playlists @@ -406,7 +406,7 @@ 187, 17 - 5 + 9 Fill up missing CUE data from tags @@ -433,7 +433,7 @@ 134, 17 - 4 + 3 Embed log file as a tag @@ -463,7 +463,7 @@ 155, 17 - 3 + 2 Locate audio files if missing @@ -493,7 +493,7 @@ 229, 17 - 2 + 8 Preserve HTOA for gaps appended output @@ -541,7 +541,7 @@ 36, 21 - 2 + 1 Right @@ -568,7 +568,7 @@ 97, 13 - 1 + 0 Compression level: @@ -595,7 +595,7 @@ 54, 17 - 0 + 2 Verify @@ -619,7 +619,7 @@ 73, 23 - 5 + 1 OK @@ -870,18 +870,6 @@ 3 - - labelEncodeWhenPercent - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - numEncodeWhenPercent @@ -892,7 +880,7 @@ groupBox1 - 5 + 4 labelEncodeWhenConfidence @@ -904,7 +892,7 @@ groupBox1 - 6 + 5 numEncodeWhenConfidence @@ -916,7 +904,7 @@ groupBox1 - 7 + 6 chkArNoUnverifiedAudio @@ -928,7 +916,7 @@ groupBox1 - 8 + 7 labelFixWhenConfidence @@ -940,7 +928,7 @@ groupBox1 - 9 + 8 numFixWhenConfidence @@ -952,19 +940,7 @@ groupBox1 - 10 - - - labelFixWhenPercent - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 + 9 numFixWhenPercent @@ -976,16 +952,16 @@ groupBox1 - 12 + 10 - 226, 6 + 211, 6 - 295, 215 + 310, 215 - 2 + 1 Verify, then convert @@ -1009,7 +985,7 @@ True - 173, 62 + 204, 61 Yes @@ -1018,7 +994,7 @@ 100, 17 - 12 + 4 and zero offset @@ -1039,16 +1015,16 @@ True - 6, 81 + 6, 85 - 81, 17 + 198, 17 - 7 + 5 - Fix offset if + Fix offset if % of verified tracks >= chkArFixOffset @@ -1072,7 +1048,7 @@ 130, 17 - 1 + 10 Write AccurateRip log @@ -1089,6 +1065,9 @@ 2 + + 17, 17 + True @@ -1099,7 +1078,7 @@ 137, 17 - 0 + 9 Write AccurateRip tags @@ -1119,44 +1098,14 @@ 3 - - Top, Right - - - True - - - 108, 21 - - - 121, 13 - - - 3 - - - % of verified tracks >= - - - labelEncodeWhenPercent - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - 235, 19 + 266, 19 38, 21 - 4 + 1 numEncodeWhenPercent @@ -1168,7 +1117,7 @@ groupBox1 - 5 + 4 Top, Right @@ -1177,13 +1126,13 @@ True - 128, 42 + 21, 42 101, 13 - 5 + 2 with confidence >= @@ -1198,16 +1147,16 @@ groupBox1 - 6 + 5 - 235, 40 + 266, 40 38, 21 - 6 + 3 numEncodeWhenConfidence @@ -1219,7 +1168,7 @@ groupBox1 - 7 + 6 True @@ -1228,13 +1177,13 @@ 6, 20 - 93, 17 + 210, 17 - 2 + 0 - Encode only if + Encode only if % of verified tracks >= chkArNoUnverifiedAudio @@ -1246,16 +1195,22 @@ groupBox1 - 8 + 7 + + + Top, Right + + + True - 128, 101 + 21, 107 - 101, 23 + 101, 13 - 10 + 7 with confidence >= @@ -1270,16 +1225,16 @@ groupBox1 - 9 + 8 - 235, 101 + 267, 105 37, 21 - 11 + 8 numFixWhenConfidence @@ -1291,40 +1246,16 @@ groupBox1 - 10 - - - 108, 82 - - - 121, 23 - - - 8 - - - % of verified tracks >= - - - labelFixWhenPercent - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 + 9 - 235, 80 + 266, 84 38, 21 - 9 + 6 numFixWhenPercent @@ -1336,7 +1267,7 @@ groupBox1 - 12 + 10 17, 17 @@ -1351,7 +1282,7 @@ 128, 17 - 7 + 5 Force ANSI filenames @@ -1384,7 +1315,7 @@ 137, 17 - 2 + 0 Write AccurateRip tags @@ -1444,7 +1375,7 @@ 168, 17 - 2 + 0 Stop looking after 750 frames @@ -1477,7 +1408,7 @@ 143, 17 - 4 + 3 Store as 24 bit "lossless" @@ -1507,7 +1438,7 @@ 149, 17 - 3 + 2 Store as 16 bit LossyWAV @@ -1684,7 +1615,7 @@ 149, 21 - 6 + 7 -() @@ -1714,7 +1645,7 @@ 194, 17 - 5 + 6 Remove special characters except: @@ -1744,7 +1675,7 @@ 185, 17 - 7 + 8 Replace spaces with underscores @@ -2173,7 +2104,7 @@ 543, 287 - 8 + 0 tabControl1 @@ -2203,10 +2134,10 @@ 8, 6 - 212, 215 + 197, 215 - 3 + 0 Verify @@ -2236,7 +2167,7 @@ 130, 17 - 3 + 1 Write AccurateRip log @@ -2569,65 +2500,65 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABm + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABg DQAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABEAMAAQEBAAEgBgABEBUAAf8DAAH/ARwBaAETAf8BHAFoARMB/wMAAf8BHAFoARMB/wEcAWgBEwH/ - AwAB/wMAAf8BHAEbARwB/wEkASMBJAH/ARMBFwETAf8DAAH/AwAB/wMAAf8DAAX/AQgBBAECAf8BCQEF - AQIB/wEJAQUBAgH/AQkBBQECAf8BCgEFAQIB/wELAQYBAwH/AQkBBQECAf8BCQEFAQIB/wEJAQUBAgH/ - AQkBBQECAf8BCQEFAQIB/wEJAQUBAgH/AQkBBQECAf8BCAEEAQIF/4AAAVUBWAFVAf8BLAErASwB/wE0 - Ad8BPQH/ATQB3wE9Af8DAAH/ATQB3wE9Af8BNAHfAT0B/wMAAf8DAAH/AYwBjgGMAf8B1gHTAdYB/wHW - AdMB1gH/AVUBVAFVAf8DAAH/AwAB/wMAAf8BCQEFAQIB/wHOAY4BXAH/Ac4BjgFcAf8B1AGTAV8B/wHO - AY4BXAH/AaYBbgFKAf8BHQESAQsB/wHOAY4BXAH/Ac4BjgFcAf8BzgGOAVwB/wHOAY4BXAH/Ac4BjgFc - Af8BzgGOAVwB/wHOAY4BXAH/Ac4BjgFcAf8BCQEFAQIB/4AAAW4BcAFuAf8BLAErASwB/wE0Ad8BPQH/ - ATQB3wE9Af8DAAH/ATQB3wE9Af8BNAHfAT0B/wMAAf8DAAH/AbUBtgG1Cf8BbgFwAW4B/wMAAf8DAAH/ - AwAB/wELAQYBAwH/Ac4BjgFcAf8BzgGOAVwB/wHOAY4BXAH/Ac4BjgFcAf8B0AGQAVwB/wMAAf8BlQFi - AUAB/wHOAY4BXAH/AdIBkAFeAf8B0wGRAV4B/wHTAZEBXgH/AdMBkQFeAf8BzgGOAVwB/wHOAY4BXAH/ - AQoBBQECAf+AAAFuAXABbgH/ASwBKwEsAf8BAAEfAQAB/wEDASsBAwH/AwAB/wEDASsBCwH/AQMBIwED - Af8DAAH/AwAB/wG1AbIBtQn/AW4BbAFuAf8DAAH/AwAB/wMAAf8BCwEGAQMB/wHOAY4BXAH/Ac4BjgFc - Af8BzgGOAVwB/wHQAY8BXAH/Ac4BjgFcAf8BGgEQAQgB/wEmARkBDwH/Ac4BjgFcAf8BzgGOAVwB/wHO - AY4BXAH/Ac4BjgFcAf8B0AGPAV0B/wHOAY4BXAH/Ac4BjgFcAf8BCgEFAQIB/4AAAW4BcAFuAf8BLAEr - ASwB/wEkAa4BLAH/ASQBrgEsAf8DAAH/ASQBrgEsAf8BJAGuASwB/wMAAf8DAAH/AbUBsgG1Cf8BbgFs - AW4B/wMAAf8DAAH/AwAB/wELAQYBAwH/Ac4BjgFcAf8BzgGOAVwB/wHOAY4BXAH/Ac4BjgFcAf8BzgGO - AVwB/wGYAWQBQgH/AwAB/wMAAf8DAAH/ATIBIAEUAf8BzgGOAVwB/wHOAY4BXAH/Ac4BjgFcAf8BzgGO - AVwB/wEKAQUBAgH/gAABbgFwAW4B/wEsASsBLAH/ATQB3wE9Af8BNAHfAT0B/wMAAf8BNAHfAT0B/wE0 - Ad8BPQH/AwAB/wMAAf8BtQGyAbUJ/wFuAWwBbgH/AwAB/wMAAf8DAAH/AQsBBgEDAf8BzgGOAVwB/wHS - AZEBXQH/Ac4BjgFcAf8B0QGQAV0B/wHOAY4BXAH/Ac4BjgFcAf8DAAH/AUwBMwEhAf8BrQFyAU0B/wEr - ARwBEgH/AwAB/wHOAY4BXAH/Ac4BjgFcAf8BzgGOAVwB/wEKAQUBAgH/gAABbgFwAW4B/wEsASsBLAH/ - ATQB3wE9Af8BNAHfAT0B/wMAAf8BNAHfAT0B/wE0Ad8BPQH/AwAB/wMAAf8BrQGuAa0J/wFmAWgBZgH/ - AwAB/wMAAf8DAAH/AQsBBgEDAf8BzgGOAVwB/wHRAZABXQH/Ac4BjgFcAf8BkQFfAT8B/wHOAY4BXAH/ - Ac4BjgFcAf8BPAEnARkB/wEDAQEBAAH/Ac4BjgFcAf8BzgGOAVwB/wMAAf8BQAErARsB/wHOAY4BXAH/ - Ac4BjgFcAf8BCgEFAQIB/4AAAW4BcAFuAf8BLAErASwB/wEAASMBJAH/AQABKwEsAf8DAAH/AQABKwEs - Af8BAAEjASQB/wMAAf8DAAH/Aa0BqgGtCf8BZgFkAWYB/wMAAf8DAAH/AwAB/wELAQYBAwH/Ac4BjgFc - Af8BzgGOAVwB/wHOAY4BXAH/AwAB/wGrAXEBSwH/Ac4BjgFcAf8BuQF6AVEB/wMAAf8BzgGOAVwB/wHO - AY4BXAH/AQMBAQEAAf8BDwEHAQUB/wHOAY4BXAH/Ac4BjgFcAf8BCgEFAQIB/4AAAW4BcAFuAf8BLAEr - ASwB/wEAAZ4BnAH/AQABngGcAf8DAAH/AQABngGcAf8BAAGeAZwB/wETAR8BHBn/ASQBIwEkAf8DAAH/ - AQsBBgEDAf8BzgGOAVwB/wHOAY4BXAH/Ac4BjgFcAf8DAAH/ARgBDwEJAf8BzgGOAVwB/wHEAYcBWQH/ - AwAB/wMAAf8DAAH/AwAB/wGHAVcBOQH/Ac4BjgFcAf8BzgGOAVwB/wEKAQUBAgH/gAABbgFwAW4B/wEs - ASsBLAH/AQAD/wEAA/8DAAH/AQAD/wEAA/8DABn/ASQBIwEkAf8DAAH/AQsBBgEDAf8BzgGOAVwB/wHO - AY4BXAH/Ac4BjgFcAf8DAAH/AwAB/wGqAW8BSgH/AZkBZQFDAf8DAAH/AwAB/wGiAWkBRgH/Ac4BjgFc - Af8BzgGOAVwB/wHOAY4BXAH/Ac4BjgFcAf8BCgEFAQIB/4AAAW4BcAFuAf8BLAErASwB/wEAA/8BAAP/ - AwAB/wEAA/8BAAP/AwAB/wFVAVABTQH/Ad4B2wHeCf8BtQGyAbUB/wF2AXgBdgH/AQMBBwEDAf8DAAH/ - AQsBBgEDAf8BzgGOAVwB/wHOAY4BXAH/AZ4BZwFFAf8DAAH/AVwBPQEpAf8BEgELAQYB/wFgAUABKwH/ - ARoBEQEJAf8BJgEZARAB/wFAASoBGwH/Ac4BjgFcAf8B0QGQAV0B/wHOAY4BXAH/Ac4BjgFcAf8BCgEF - AQIB/4AAAW4BcAFuAf8BLAErASwB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8BlAGWAZQJ/wG1 - AbYBtQH/AwAB/wMAAf8DAAH/AQsBBgEDAf8BzgGOAVwB/wHOAY4BXAH/AXIBTQE0Af8DAAH/Ac4BjgFc - Af8DAAH/AwAB/wFSATcBJQH/Aa4BdAFNAf8DAAH/Ac4BjgFcAf8BzgGOAVwB/wHTAZEBXgH/AdQBkwFf - Af8BCgEFAQIB/4AAAZwBmgGcAf8BLAErASwB/wIAAaUB/wIAAaUB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - ASwBKwEsEf8BvQG6Ab0B/wMAAf8BCwEGAQMB/wHOAY4BXAH/Ac4BjgFcAf8BQAEqARwB/wMAAf8BzgGO - AVwB/wFrAUgBLwH/AwAB/wGDAVUBOQH/Ac4BjgFcAf8DAAH/ATEBHwEVAf8BzgGOAVwB/wHOAY4BXAH/ - AdQBkwFfAf8BCgEFAQIB/4AAAZQBkgGUAf8BLAErASwB/wIAAv8CAAL/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AZwBmgGcDf8BlAGWAZQB/wMAAf8BCwEGAQMB/wHOAY4BXAH/Ac4BjgFcAf8BAQIAAf8BIwEX - AQ4B/wHOAY4BXAH/Ac4BjgFcAf8DAAH/AZ8BaAFGAf8BzgGOAVwB/wGLAVoBPAH/AwAB/wHOAY4BXAH/ - Ac4BjgFcAf8BzgGOAVwB/wEKAQUBAgH/gAABpQGmAaUB/wGUAZIBlAH/AgABpQH/AgABtQH/ASwBKwEs - Af8BLAErASwB/wEsASsBLAH/ASwBKwEsAf8BLAErASwB/wEsASsBLAH/ASwBLwEsAf8BTQFQAU0B/wGt - AaoBrQH/Aa0BqgGtAf8BRQFIAUUB/wMAAf8BCQEFAQIB/wHOAY4BXAH/Ac4BjgFcAf8BcgFMATMB/wGl - AW0BSAH/Ac4BjgFcAf8BzgGOAVwB/wGYAWQBQgH/Ac4BjgFcAf8BzgGOAVwB/wHOAY4BXAH/AW0BSgEx - Af8BrgFyAU0B/wHOAY4BXAH/Ac4BjgFcAf8BCQEFAQIB/4AAAd4B2wHeAf8BpQGmAaUB/wGlAaYBpQH/ - AXYBdAF2Af8BbgFwAW4B/wFuAXABbgH/AW4BcAFuAf8BbgFwAW4B/wFuAXABbgH/AW4BcAFuAf8BbgFw - AW4B/wFuAXABbgH/AW4BcAFuAf8BLAErASwB/wEsASsBLAH/AwAF/wEJAQUBAgH/AQoBBgECAf8BCwEG - AQMB/wELAQYBAgH/AQoBBgECAf8BCgEGAQIB/wELAQYBAgH/AQsBBgECAf8BCgEGAQIB/wEKAQYBAgH/ - AQsBBgEDAf8BCwEGAQIB/wEKAQYBAgH/AQkBBQECBf+AAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB - AQABAQUAAYAXAAP/gQAL + AwABEAMAAQEBAAEgBgABEBUAAf8DAAH/ARsBZwESAf8BGwFnARIB/wMAAf8BGwFnARIB/wEbAWcBEgH/ + AwAB/wMAAf8BGwEaARsB/wEjASIBIwH/ARIBFgESAf8DAAH/AwAB/wMAAf8DAAX/AQcBAwEBAf8BCAEE + AQEB/wEIAQQBAQH/AQgBBAEBAf8BCQEEAQEB/wEKAQUBAgH/AQgBBAEBAf8BCAEEAQEB/wEIAQQBAQH/ + AQgBBAEBAf8BCAEEAQEB/wEIAQQBAQH/AQgBBAEBAf8BBwEDAQEF/4AAAVQBVwFUAf8BKwEqASsB/wEz + Ad8BPAH/ATMB3wE8Af8DAAH/ATMB3wE8Af8BMwHfATwB/wMAAf8DAAH/AYwBjgGMAf8B1gHTAdYB/wHW + AdMB1gH/AVQBUwFUAf8DAAH/AwAB/wMAAf8BCAEEAQEB/wHOAY4BWwH/Ac4BjgFbAf8B1AGTAV4B/wHO + AY4BWwH/AaYBbQFJAf8BHAERAQoB/wHOAY4BWwH/Ac4BjgFbAf8BzgGOAVsB/wHOAY4BWwH/Ac4BjgFb + Af8BzgGOAVsB/wHOAY4BWwH/Ac4BjgFbAf8BCAEEAQEB/4AAAW0BbwFtAf8BKwEqASsB/wEzAd8BPAH/ + ATMB3wE8Af8DAAH/ATMB3wE8Af8BMwHfATwB/wMAAf8DAAH/AbUBtgG1Cf8BbQFvAW0B/wMAAf8DAAH/ + AwAB/wEKAQUBAgH/Ac4BjgFbAf8BzgGOAVsB/wHOAY4BWwH/Ac4BjgFbAf8B0AGQAVsB/wMAAf8BlQFh + AT8B/wHOAY4BWwH/AdIBkAFdAf8B0wGRAV0B/wHTAZEBXQH/AdMBkQFdAf8BzgGOAVsB/wHOAY4BWwH/ + AQkBBAEBAf+AAAFtAW8BbQH/ASsBKgErAf8BAAEeAQAB/wECASoBAgH/AwAB/wECASoBCgH/AQIBIgEC + Af8DAAH/AwAB/wG1AbIBtQn/AW0BawFtAf8DAAH/AwAB/wMAAf8BCgEFAQIB/wHOAY4BWwH/Ac4BjgFb + Af8BzgGOAVsB/wHQAY8BWwH/Ac4BjgFbAf8BGQEPAQcB/wElARgBDgH/Ac4BjgFbAf8BzgGOAVsB/wHO + AY4BWwH/Ac4BjgFbAf8B0AGPAVwB/wHOAY4BWwH/Ac4BjgFbAf8BCQEEAQEB/4AAAW0BbwFtAf8BKwEq + ASsB/wEjAa4BKwH/ASMBrgErAf8DAAH/ASMBrgErAf8BIwGuASsB/wMAAf8DAAH/AbUBsgG1Cf8BbQFr + AW0B/wMAAf8DAAH/AwAB/wEKAQUBAgH/Ac4BjgFbAf8BzgGOAVsB/wHOAY4BWwH/Ac4BjgFbAf8BzgGO + AVsB/wGYAWMBQQH/AwAB/wMAAf8DAAH/ATEBHwETAf8BzgGOAVsB/wHOAY4BWwH/Ac4BjgFbAf8BzgGO + AVsB/wEJAQQBAQH/gAABbQFvAW0B/wErASoBKwH/ATMB3wE8Af8BMwHfATwB/wMAAf8BMwHfATwB/wEz + Ad8BPAH/AwAB/wMAAf8BtQGyAbUJ/wFtAWsBbQH/AwAB/wMAAf8DAAH/AQoBBQECAf8BzgGOAVsB/wHS + AZEBXAH/Ac4BjgFbAf8B0QGQAVwB/wHOAY4BWwH/Ac4BjgFbAf8DAAH/AUsBMgEgAf8BrQFxAUwB/wEq + ARsBEQH/AwAB/wHOAY4BWwH/Ac4BjgFbAf8BzgGOAVsB/wEJAQQBAQH/gAABbQFvAW0B/wErASoBKwH/ + ATMB3wE8Af8BMwHfATwB/wMAAf8BMwHfATwB/wEzAd8BPAH/AwAB/wMAAf8BrQGuAa0J/wFlAWcBZQH/ + AwAB/wMAAf8DAAH/AQoBBQECAf8BzgGOAVsB/wHRAZABXAH/Ac4BjgFbAf8BkQFeAT4B/wHOAY4BWwH/ + Ac4BjgFbAf8BOwEmARgB/wECAgAB/wHOAY4BWwH/Ac4BjgFbAf8DAAH/AT8BKgEaAf8BzgGOAVsB/wHO + AY4BWwH/AQkBBAEBAf+AAAFtAW8BbQH/ASsBKgErAf8BAAEiASMB/wEAASoBKwH/AwAB/wEAASoBKwH/ + AQABIgEjAf8DAAH/AwAB/wGtAaoBrQn/AWUBYwFlAf8DAAH/AwAB/wMAAf8BCgEFAQIB/wHOAY4BWwH/ + Ac4BjgFbAf8BzgGOAVsB/wMAAf8BqwFwAUoB/wHOAY4BWwH/AbkBeQFQAf8DAAH/Ac4BjgFbAf8BzgGO + AVsB/wECAgAB/wEOAQYBBAH/Ac4BjgFbAf8BzgGOAVsB/wEJAQQBAQH/gAABbQFvAW0B/wErASoBKwH/ + AQABngGcAf8BAAGeAZwB/wMAAf8BAAGeAZwB/wEAAZ4BnAH/ARIBHgEbGf8BIwEiASMB/wMAAf8BCgEF + AQIB/wHOAY4BWwH/Ac4BjgFbAf8BzgGOAVsB/wMAAf8BFwEOAQgB/wHOAY4BWwH/AcQBhwFYAf8DAAH/ + AwAB/wMAAf8DAAH/AYcBVgE4Af8BzgGOAVsB/wHOAY4BWwH/AQkBBAEBAf+AAAFtAW8BbQH/ASsBKgEr + Af8BAAP/AQAD/wMAAf8BAAP/AQAD/wMAGf8BIwEiASMB/wMAAf8BCgEFAQIB/wHOAY4BWwH/Ac4BjgFb + Af8BzgGOAVsB/wMAAf8DAAH/AaoBbgFJAf8BmQFkAUIB/wMAAf8DAAH/AaIBaAFFAf8BzgGOAVsB/wHO + AY4BWwH/Ac4BjgFbAf8BzgGOAVsB/wEJAQQBAQH/gAABbQFvAW0B/wErASoBKwH/AQAD/wEAA/8DAAH/ + AQAD/wEAA/8DAAH/AVQBTwFMAf8B3gHbAd4J/wG1AbIBtQH/AXUBdwF1Af8BAgEGAQIB/wMAAf8BCgEF + AQIB/wHOAY4BWwH/Ac4BjgFbAf8BngFmAUQB/wMAAf8BWwE8ASgB/wERAQoBBQH/AV8BPwEqAf8BGQEQ + AQgB/wElARgBDwH/AT8BKQEaAf8BzgGOAVsB/wHRAZABXAH/Ac4BjgFbAf8BzgGOAVsB/wEJAQQBAQH/ + gAABbQFvAW0B/wErASoBKwH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wGUAZYBlAn/AbUBtgG1 + Af8DAAH/AwAB/wMAAf8BCgEFAQIB/wHOAY4BWwH/Ac4BjgFbAf8BcQFMATMB/wMAAf8BzgGOAVsB/wMA + Af8DAAH/AVEBNgEkAf8BrgFzAUwB/wMAAf8BzgGOAVsB/wHOAY4BWwH/AdMBkQFdAf8B1AGTAV4B/wEJ + AQQBAQH/gAABnAGaAZwB/wErASoBKwH/AgABpQH/AgABpQH/AwAB/wMAAf8DAAH/AwAB/wMAAf8BKwEq + ASsR/wG9AboBvQH/AwAB/wEKAQUBAgH/Ac4BjgFbAf8BzgGOAVsB/wE/ASkBGwH/AwAB/wHOAY4BWwH/ + AWoBRwEuAf8DAAH/AYMBVAE4Af8BzgGOAVsB/wMAAf8BMAEeARQB/wHOAY4BWwH/Ac4BjgFbAf8B1AGT + AV4B/wEJAQQBAQH/gAABlAGSAZQB/wErASoBKwH/AgAC/wIAAv8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA + Af8BnAGaAZwN/wGUAZYBlAH/AwAB/wEKAQUBAgH/Ac4BjgFbAf8BzgGOAVsB/wMAAf8BIgEWAQ0B/wHO + AY4BWwH/Ac4BjgFbAf8DAAH/AZ8BZwFFAf8BzgGOAVsB/wGLAVkBOwH/AwAB/wHOAY4BWwH/Ac4BjgFb + Af8BzgGOAVsB/wEJAQQBAQH/gAABpQGmAaUB/wGUAZIBlAH/AgABpQH/AgABtQH/ASsBKgErAf8BKwEq + ASsB/wErASoBKwH/ASsBKgErAf8BKwEqASsB/wErASoBKwH/ASsBLgErAf8BTAFPAUwB/wGtAaoBrQH/ + Aa0BqgGtAf8BRAFHAUQB/wMAAf8BCAEEAQEB/wHOAY4BWwH/Ac4BjgFbAf8BcQFLATIB/wGlAWwBRwH/ + Ac4BjgFbAf8BzgGOAVsB/wGYAWMBQQH/Ac4BjgFbAf8BzgGOAVsB/wHOAY4BWwH/AWwBSQEwAf8BrgFx + AUwB/wHOAY4BWwH/Ac4BjgFbAf8BCAEEAQEB/4AAAd4B2wHeAf8BpQGmAaUB/wGlAaYBpQH/AXUBcwF1 + Af8BbQFvAW0B/wFtAW8BbQH/AW0BbwFtAf8BbQFvAW0B/wFtAW8BbQH/AW0BbwFtAf8BbQFvAW0B/wFt + AW8BbQH/AW0BbwFtAf8BKwEqASsB/wErASoBKwH/AwAF/wEIAQQBAQH/AQkBBQEBAf8BCgEFAQIB/wEK + AQUBAQH/AQkBBQEBAf8BCQEFAQEB/wEKAQUBAQH/AQoBBQEBAf8BCQEFAQEB/wEJAQUBAQH/AQoBBQEC + Af8BCgEFAQEB/wEJAQUBAQH/AQgBBAEBBf+AAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUA + AYAXAAP/gQAL @@ -2637,7 +2568,7 @@ 520, 249 - 9 + 0 tabControl2 @@ -2715,7 +2646,7 @@ 79, 17 - 11 + 3 ID3v2 tags @@ -2742,7 +2673,7 @@ 81, 17 - 10 + 2 APEv2 tags @@ -2769,7 +2700,7 @@ 62, 13 - 9 + 10 Parameters @@ -2820,7 +2751,7 @@ 417, 21 - 7 + 11 textUDC1EncParams @@ -2841,7 +2772,7 @@ 417, 21 - 6 + 9 textUDC1Encoder @@ -2862,7 +2793,7 @@ 417, 21 - 5 + 7 textUDC1Params @@ -2883,7 +2814,7 @@ 417, 21 - 4 + 5 textUDC1Decoder @@ -2904,7 +2835,7 @@ 67, 21 - 3 + 1 textUDC1Extension @@ -2928,7 +2859,7 @@ 62, 13 - 2 + 6 Parameters @@ -2955,7 +2886,7 @@ 47, 13 - 1 + 4 Decoder @@ -3006,7 +2937,7 @@ 203, 165 - 2 + 1 HDCD options diff --git a/CUETools/frmSettings.ru-RU.resx b/CUETools/frmSettings.ru-RU.resx index d7c4d1a..937b87b 100644 --- a/CUETools/frmSettings.ru-RU.resx +++ b/CUETools/frmSettings.ru-RU.resx @@ -123,100 +123,66 @@ - - - 182, 17 - Только одно окно приложения - - 186, 17 - Игнорируя информацию из .cue - - 127, 17 - Извлечь .log в файл - - 180, 17 - Понизить приоритет процесса - - 202, 17 - Выкидывать лишние 4608 сэмплов Некоторые FLAC-кодировщики добавляют лишние 4608 пустых сэмплов в конце файла. Эту ситуацию можно легко обнаружить и исправить. - - 224, 17 - Создавать .cue даже при встраивании - - 166, 17 - Создавать плейлисты .m3u - - 221, 17 - Пополнить .cue информацией из тэгов - - 156, 17 - Встроить .log в виде тэга Работает, если .log лежит в той же папке и имеет то же имя, что и исходный файл - - 213, 17 - Автоматически искать аудио файлы Автоматически исправить имена, если .cue ссылается на несуществующие файлы - - 231, 17 - Сохранять HTOA при разбивке на треки @@ -232,18 +198,12 @@ - - 94, 13 - Уровень сжатия: - - 94, 17 - Верификация @@ -253,9 +213,6 @@ - - 119, 17 - MD5-хеширование @@ -265,191 +222,87 @@ - - 89, 17 - Доп. режим: - - 103, 17 - Очень высокий - - 68, 17 - Высокий - - 69, 17 - Средний - - 70, 17 - Быстрый - - 150, 77 - - - 138, 17 - и нулевым смещением - - 6, 100 - - - 165, 17 - - Исправлять смещение если + Исправлять смещение при % треков >= - - 6, 181 - - - 181, 17 - Записывать отчет AccurateRip - - 6, 164 - - - 173, 17 - Записывать тэги AccurateRip Добавлять тэги ACCURATERIPCOUNT/ACCURATERIPCOUNTALLOFFSETS/ACCURATERIPTOTAL в выходные файлы. Можно настроить foobar2000 на их отображение, чтобы видеть качество рипа и популярность дисков в вашей библиотеке. - - 98, 37 - - - 147, 13 - - - % проверенных треков >= - - - - - - 250, 35 - - - 125, 58 - - - 120, 13 - с достоверностью >= - - 250, 56 - - - 176, 17 - - Конвертировать только если + Конвертация при % верных треков >= - - - Top, Right - - - - True - - - 125, 139 - - - 120, 13 - с достоверностью >= - - 251, 137 - - - Top, Right - - - True - - - 98, 118 - - - 147, 13 - - - % проверенных треков >= - - - - - - 250, 116 - @@ -459,66 +312,42 @@ - - 207, 17 - Только символы из ANSI кодировки Использовать только символы, присутствующие в ANSI (1251) кодировке, для совместимости с приложениями, не поддерживающими Unicode (такими, как Far manager) - - 6, 164 - - - 173, 17 - Записывать тэги AccurateRip Добавлять тэги ACCURATERIPCOUNT/ACCURATERIPCOUNTALLOFFSETS/ACCURATERIPTOTAL в исходные файлы. Можно настроить foobar2000 на их отображение, чтобы видеть качество рипа и популярность дисков в вашей библиотеке. - - 146, 17 - Декодировать в 20 бит Декодирование HDCD - необратимый процесс. Результирующие файлы не могут быть записаны на CD. Создаются файлы с разрешением 24 бита, но подлинное разрешение составляет 20 бит. - - 172, 17 - Определять по 750 фреймам Прекращать поиск HDCD-кодировки, если её не обнаружено в первых 10 секундах аудио данных. - - 170, 17 - Записывать 24 бит "lossless" Когда не используется lossyWAV, расширить до 24 бит для совместимости - - 176, 17 - Записывать 16 бит LossyWAV При конвертации в lossyWAV, обрезать до 16 бит - - 157, 17 - Сохранять оригинальные @@ -528,18 +357,12 @@ - - 223, 17 - Удалять специальные символы кроме: - - 209, 17 - Заменять пробелы подчеркиванями @@ -549,21 +372,12 @@ - - 10, 75 - - - 35, 13 - Трек: - - 75, 13 - Образ диска: @@ -597,12 +411,6 @@ - - 5, 181 - - - 181, 17 - Записывать отчет AccurateRip @@ -627,9 +435,6 @@ - - 59, 13 - Качество: @@ -761,9 +566,6 @@ - - 120, 17 - Определять HDCD