public void Load(SettingsReader sr) { _config.Load(sr); _useFreeDb = sr.LoadBoolean("FreedbLookup") ?? _useFreeDb; _useMusicBrainz = sr.LoadBoolean("MusicBrainzLookup") ?? _useMusicBrainz; _useAccurateRip = sr.LoadBoolean("AccurateRipLookup") ?? _useAccurateRip; _useCUEToolsDB = sr.LoadBoolean("CUEToolsDBLookup") ?? _useCUEToolsDB; _useLocalDB = sr.LoadBoolean("LocalDBLookup") ?? _useLocalDB; _skipRecent = sr.LoadBoolean("SkipRecent") ?? _skipRecent; _outputAudioType = (AudioEncoderType?)sr.LoadInt32("OutputAudioType", null, null) ?? _outputAudioType; _outputAudioFormat = sr.Load("OutputAudioFmt") ?? _outputAudioFormat; _action = (CUEAction?)sr.LoadInt32("AccurateRipMode", (int)CUEAction.Encode, (int)CUEAction.CorrectFilenames) ?? _action; _CUEStyle = (CUEStyle?)sr.LoadInt32("CUEStyle", null, null) ?? _CUEStyle; _writeOffset = sr.LoadInt32("WriteOffset", null, null) ?? 0; _outputTemplate = sr.Load("OutputPathTemplate") ?? _outputTemplate; _script = sr.Load("Script") ?? _script; }
public void Load(SettingsReader sr) { int version = sr.LoadInt32("Version", null, null) ?? 202; fixOffsetMinimumConfidence = sr.LoadUInt32("ArFixWhenConfidence", 1, 1000) ?? 2; fixOffsetMinimumTracksPercent = sr.LoadUInt32("ArFixWhenPercent", 1, 100) ?? 51; encodeWhenConfidence = sr.LoadUInt32("ArEncodeWhenConfidence", 1, 1000) ?? 2; encodeWhenPercent = sr.LoadUInt32("ArEncodeWhenPercent", 1, 100) ?? 100; encodeWhenZeroOffset = sr.LoadBoolean("ArEncodeWhenZeroOffset") ?? false; noUnverifiedOutput = sr.LoadBoolean("ArNoUnverifiedOutput") ?? false; fixOffset = sr.LoadBoolean("ArFixOffset") ?? false; writeArTagsOnEncode = sr.LoadBoolean("ArWriteCRC") ?? writeArTagsOnEncode; writeArLogOnConvert = sr.LoadBoolean("ArWriteLog") ?? true; writeArTagsOnVerify = sr.LoadBoolean("ArWriteTagsOnVerify") ?? false; writeArLogOnVerify = sr.LoadBoolean("ArWriteLogOnVerify") ?? false; preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? true; detectGaps = sr.LoadBoolean("DetectGaps") ?? true; autoCorrectFilenames = sr.LoadBoolean("AutoCorrectFilenames") ?? true; keepOriginalFilenames = sr.LoadBoolean("KeepOriginalFilenames") ?? false; singleFilenameFormat = sr.Load("SingleFilenameFormat") ?? singleFilenameFormat; trackFilenameFormat = sr.Load("TrackFilenameFormat") ?? trackFilenameFormat; removeSpecial = sr.LoadBoolean("RemoveSpecialCharacters") ?? false; specialExceptions = sr.Load("SpecialCharactersExceptions") ?? "-()"; replaceSpaces = sr.LoadBoolean("ReplaceSpaces") ?? false; embedLog = sr.LoadBoolean("EmbedLog") ?? true; extractLog = sr.LoadBoolean("ExtractLog") ?? true; fillUpCUE = sr.LoadBoolean("FillUpCUE") ?? true; overwriteCUEData = sr.LoadBoolean("OverwriteCUEData") ?? false; filenamesANSISafe = sr.LoadBoolean("FilenamesANSISafe") ?? true; bruteForceDTL = sr.LoadBoolean("BruteForceDTL") ?? false; createEACLOG = sr.LoadBoolean("CreateEACLOG") ?? createEACLOG; detectHDCD = sr.LoadBoolean("DetectHDCD") ?? true; wait750FramesForHDCD = sr.LoadBoolean("Wait750FramesForHDCD") ?? true; decodeHDCD = sr.LoadBoolean("DecodeHDCD") ?? false; createM3U = sr.LoadBoolean("CreateM3U") ?? false; createCUEFileWhenEmbedded = sr.LoadBoolean("CreateCUEFileWhenEmbedded") ?? true; truncate4608ExtraSamples = sr.LoadBoolean("Truncate4608ExtraSamples") ?? true; lossyWAVQuality = sr.LoadInt32("LossyWAVQuality", 0, 10) ?? 5; decodeHDCDtoLW16 = sr.LoadBoolean("DecodeHDCDToLossyWAV16") ?? false; decodeHDCDto24bit = sr.LoadBoolean("DecodeHDCDTo24bit") ?? true; oneInstance = sr.LoadBoolean("OneInstance") ?? true; checkForUpdates = sr.LoadBoolean("CheckForUpdates") ?? true; writeBasicTagsFromCUEData = sr.LoadBoolean("WriteBasicTagsFromCUEData") ?? true; copyBasicTags = sr.LoadBoolean("CopyBasicTags") ?? true; copyUnknownTags = sr.LoadBoolean("CopyUnknownTags") ?? true; CopyAlbumArt = sr.LoadBoolean("CopyAlbumArt") ?? true; embedAlbumArt = sr.LoadBoolean("EmbedAlbumArt") ?? true; extractAlbumArt = sr.LoadBoolean("ExtractAlbumArt") ?? true; maxAlbumArtSize = sr.LoadInt32("MaxAlbumArtSize", 100, 10000) ?? maxAlbumArtSize; arLogToSourceFolder = sr.LoadBoolean("ArLogToSourceFolder") ?? arLogToSourceFolder; arLogVerbose = sr.LoadBoolean("ArLogVerbose") ?? arLogVerbose; fixOffsetToNearest = sr.LoadBoolean("FixOffsetToNearest") ?? fixOffsetToNearest; ArLogFilenameFormat = sr.Load("ArLogFilenameFormat") ?? ArLogFilenameFormat; AlArtFilenameFormat = sr.Load("AlArtFilenameFormat") ?? AlArtFilenameFormat; separateDecodingThread = sr.LoadBoolean("SeparateDecodingThread") ?? separateDecodingThread; try { using (TextReader reader = new StringReader(sr.Load("Advanced"))) advanced = CUEConfigAdvanced.serializer.Deserialize(reader) as CUEConfigAdvanced; } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } int totalEncoders = sr.LoadInt32("ExternalEncoders", 0, null) ?? 0; for (int nEncoders = 0; nEncoders < totalEncoders; nEncoders++) { string name = sr.Load(string.Format("ExternalEncoder{0}Name", nEncoders)); string extension = sr.Load(string.Format("ExternalEncoder{0}Extension", nEncoders)); string path = sr.Load(string.Format("ExternalEncoder{0}Path", nEncoders)); string parameters = sr.Load(string.Format("ExternalEncoder{0}Parameters", nEncoders)); bool lossless = sr.LoadBoolean(string.Format("ExternalEncoder{0}Lossless", nEncoders)) ?? true; string supported_modes = sr.Load(string.Format("ExternalEncoder{0}Modes", nEncoders)) ?? ""; string default_mode = sr.Load(string.Format("ExternalEncoder{0}Mode", nEncoders)) ?? ""; CUEToolsUDC encoder; if (name == null) continue; if (!encoders.TryGetValue(name, out encoder)) { if (path == null || parameters == null || extension == null) continue; encoders.Add(new CUEToolsUDC(name, extension, lossless, supported_modes, default_mode, path, parameters)); } else if (version == 203) { if (encoder.path != null) { if (path == null || parameters == null || extension == null) continue; encoder.extension = extension; encoder.path = path; encoder.lossless = lossless; encoder.parameters = parameters; } else { if (encoder.settingsSerializer != null && parameters != "") try { using (TextReader reader = new StringReader(parameters)) encoder.settings = encoder.settingsSerializer.Deserialize(reader); } catch { } } encoder.supported_modes = supported_modes; encoder.default_mode = default_mode; } } int totalDecoders = sr.LoadInt32("ExternalDecoders", 0, null) ?? 0; for (int nDecoders = 0; nDecoders < totalDecoders; nDecoders++) { string name = sr.Load(string.Format("ExternalDecoder{0}Name", nDecoders)); string extension = sr.Load(string.Format("ExternalDecoder{0}Extension", nDecoders)); string path = sr.Load(string.Format("ExternalDecoder{0}Path", nDecoders)); string parameters = sr.Load(string.Format("ExternalDecoder{0}Parameters", nDecoders)); CUEToolsUDC decoder; if (!decoders.TryGetValue(name, out decoder)) decoders.Add(name, new CUEToolsUDC(name, extension, true, "", "", path, parameters)); else { decoder.extension = extension; decoder.path = path; decoder.parameters = parameters; } } int totalFormats = sr.LoadInt32("CustomFormats", 0, null) ?? 0; for (int nFormats = 0; nFormats < totalFormats; nFormats++) { string extension = sr.Load(string.Format("CustomFormat{0}Name", nFormats)); string encoderLossless = sr.Load(string.Format("CustomFormat{0}EncoderLossless", nFormats)) ?? ""; string encoderLossy = sr.Load(string.Format("CustomFormat{0}EncoderLossy", nFormats)) ?? ""; string decoder = sr.Load(string.Format("CustomFormat{0}Decoder", nFormats)); CUEToolsTagger tagger = (CUEToolsTagger)(sr.LoadInt32(string.Format("CustomFormat{0}Tagger", nFormats), 0, 2) ?? 0); bool allowLossless = sr.LoadBoolean(string.Format("CustomFormat{0}AllowLossless", nFormats)) ?? false; bool allowLossy = sr.LoadBoolean(string.Format("CustomFormat{0}AllowLossy", nFormats)) ?? false; bool allowLossyWav = sr.LoadBoolean(string.Format("CustomFormat{0}AllowLossyWAV", nFormats)) ?? false; bool allowEmbed = sr.LoadBoolean(string.Format("CustomFormat{0}AllowEmbed", nFormats)) ?? false; CUEToolsFormat format; CUEToolsUDC udcLossless, udcLossy; if (encoderLossless == "" || !encoders.TryGetValue(encoderLossless, out udcLossless)) udcLossless = encoders.GetDefault(extension, true); if (encoderLossy == "" || !encoders.TryGetValue(encoderLossy, out udcLossy)) udcLossy = encoders.GetDefault(extension, false); if (!formats.TryGetValue(extension, out format)) formats.Add(extension, new CUEToolsFormat(extension, tagger, allowLossless, allowLossy, allowLossyWav, allowEmbed, false, udcLossless, udcLossy, decoder)); else { format.encoderLossless = udcLossless; format.encoderLossy = udcLossy; format.decoder = decoder; if (!format.builtin) { format.tagger = tagger; format.allowLossless = allowLossless; format.allowLossy = allowLossy; format.allowLossyWAV = allowLossyWav; format.allowEmbed = allowEmbed; } } } int totalScripts = sr.LoadInt32("CustomScripts", 0, null) ?? 0; for (int nScripts = 0; nScripts < totalScripts; nScripts++) { string name = sr.Load(string.Format("CustomScript{0}Name", nScripts)); string code = sr.Load(string.Format("CustomScript{0}Code", nScripts)); List<CUEAction> conditions = new List<CUEAction>(); int totalConditions = sr.LoadInt32(string.Format("CustomScript{0}Conditions", nScripts), 0, null) ?? 0; for (int nCondition = 0; nCondition < totalConditions; nCondition++) conditions.Add((CUEAction)sr.LoadInt32(string.Format("CustomScript{0}Condition{1}", nScripts, nCondition), 0, null)); CUEToolsScript script; if (!scripts.TryGetValue(name, out script)) { if (name != "submit") scripts.Add(name, new CUEToolsScript(name, false, conditions, code)); } else { if (!script.builtin) { script.code = code; script.conditions = conditions; } } } defaultVerifyScript = sr.Load("DefaultVerifyScript") ?? "default"; defaultEncodeScript = sr.Load("DefaultVerifyAndConvertScript") ?? "default"; gapsHandling = (CUEStyle?)sr.LoadInt32("GapsHandling", null, null) ?? gapsHandling; language = sr.Load("Language") ?? Thread.CurrentThread.CurrentUICulture.Name; if (ArLogFilenameFormat.Contains("%F")) ArLogFilenameFormat = "%filename%.accurip"; if (singleFilenameFormat.Contains("%F")) singleFilenameFormat = "%filename%"; if (trackFilenameFormat.Contains("%N")) trackFilenameFormat = "%tracknumber%. %title%"; }
static void Main(string[] args) { TextWriter stdout = Console.Out; Console.SetOut(Console.Error); Console.WriteLine("CUETools.Converter, Copyright (C) 2009 Grigory Chudov."); Console.WriteLine("This is free software under the GNU GPLv3+ license; There is NO WARRANTY, to"); Console.WriteLine("the extent permitted by law. <http://www.gnu.org/licenses/> for details."); if (args.Length < 2) { Usage(); return; } string sourceFile = args[0]; string destFile = args[1]; DateTime start = DateTime.Now; TimeSpan lastPrint = TimeSpan.FromMilliseconds(0); CUEConfig config = new CUEConfig(); SettingsReader sr = new SettingsReader("CUE Tools", "settings.txt", null); config.Load(sr); #if !DEBUG try #endif { IAudioSource audioSource = AudioReadWrite.GetAudioSource(sourceFile, null, config); IAudioDest audioDest = AudioReadWrite.GetAudioDest(AudioEncoderType.Lossless, destFile, (long)audioSource.Length, audioSource.PCM.BitsPerSample, audioSource.PCM.SampleRate, 8192, config); AudioBuffer buff = new AudioBuffer(audioSource, 0x10000); Console.WriteLine("Filename : {0}", sourceFile); Console.WriteLine("File Info : {0}kHz; {1} channel; {2} bit; {3}", audioSource.PCM.SampleRate, audioSource.PCM.ChannelCount, audioSource.PCM.BitsPerSample, TimeSpan.FromSeconds(audioSource.Length * 1.0 / audioSource.PCM.SampleRate)); while (audioSource.Read(buff, -1) != 0) { audioDest.Write(buff); TimeSpan elapsed = DateTime.Now - start; if ((elapsed - lastPrint).TotalMilliseconds > 60) { Console.Error.Write("\rProgress : {0:00}%; {1:0.00}x; {2}/{3}", 100.0 * audioSource.Position / audioSource.Length, audioSource.Position / elapsed.TotalSeconds / audioSource.PCM.SampleRate, elapsed, TimeSpan.FromMilliseconds(elapsed.TotalMilliseconds / audioSource.Position * audioSource.Length) ); lastPrint = elapsed; } } TimeSpan totalElapsed = DateTime.Now - start; Console.Error.Write("\r \r"); Console.WriteLine("Results : {0:0.00}x; {1}", audioSource.Position / totalElapsed.TotalSeconds / audioSource.PCM.SampleRate, totalElapsed ); audioSource.Close(); audioDest.Close(); TagLib.UserDefined.AdditionalFileTypes.Config = config; TagLib.File sourceInfo = TagLib.File.Create(new TagLib.File.LocalFileAbstraction(sourceFile)); TagLib.File destInfo = TagLib.File.Create(new TagLib.File.LocalFileAbstraction(destFile)); if (Tagging.UpdateTags(destInfo, Tagging.Analyze(sourceInfo), config)) { sourceInfo.Tag.CopyTo(destInfo.Tag, true); destInfo.Tag.Pictures = sourceInfo.Tag.Pictures; destInfo.Save(); } } #if !DEBUG catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error: {0}", ex.Message); //Console.WriteLine("{0}", ex.StackTrace); } #endif }
//// Calculate the graphics path that representing the figure in the bitmap //// excluding the transparent color which is the top left pixel. //private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap, Color colorTransparent) //{ // // Create GraphicsPath for our bitmap calculation // GraphicsPath graphicsPath = new GraphicsPath(); // // Use the top left pixel as our transparent color // colorTransparent = bitmap.GetPixel(0, 0); // // This is to store the column value where an opaque pixel is first found. // // This value will determine where we start scanning for trailing // // opaque pixels. // int colOpaquePixel = 0; // // Go through all rows (Y axis) // for (int row = 0; row < bitmap.Height; row++) // { // // Reset value // colOpaquePixel = 0; // // Go through all columns (X axis) // for (int col = 0; col < bitmap.Width; col++) // { // // If this is an opaque pixel, mark it and search // // for anymore trailing behind // if (bitmap.GetPixel(col, row) != colorTransparent) // { // // Opaque pixel found, mark current position // colOpaquePixel = col; // // Create another variable to set the current pixel position // int colNext = col; // // Starting from current found opaque pixel, search for // // anymore opaque pixels trailing behind, until a transparent // // pixel is found or minimum width is reached // for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++) // if (bitmap.GetPixel(colNext, row) == colorTransparent) // break; // // Form a rectangle for line of opaque pixels found and // // add it to our graphics path // graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, // row, colNext - colOpaquePixel, 1)); // // No need to scan the line of opaque pixels just found // col = colNext; // } // } // } // // Return calculated graphics path // return graphicsPath; //} //private static void CreateControlRegion(Button button, Bitmap bitmap, Color colorTransparent) //{ // // Return if control and bitmap are null // if (button == null || bitmap == null) // return; // // Set our control's size to be the same as the bitmap // button.Width = bitmap.Width; // button.Height = bitmap.Height; // // Do not show button text // button.Text = ""; // // Change cursor to hand when over button // button.Cursor = Cursors.Hand; // // Set background image of button // button.BackgroundImage = bitmap; // // Calculate the graphics path based on the bitmap supplied // GraphicsPath graphicsPath = CalculateControlGraphicsPath(bitmap, colorTransparent); // // Apply new region // button.Region = new Region(graphicsPath); //} private void frmCUERipper_Load(object sender, EventArgs e) { //buttonTrackMetadata.Parent = listTracks; //buttonTrackMetadata.ImageList = null; //CreateControlRegion(buttonTrackMetadata, new Bitmap(imageListChecked.Images[0]), imageListChecked.TransparentColor); //CreateControlRegion(buttonTrackMetadata, Properties.Resources.cdrepair, Color.White); SettingsReader sr = new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath); _config.Load(sr); _defaultLosslessFormat = sr.Load("DefaultLosslessFormat") ?? "flac"; _defaultLossyFormat = sr.Load("DefaultLossyFormat") ?? "mp3"; _defaultHybridFormat = sr.Load("DefaultHybridFormat") ?? "lossy.flac"; //_config.createEACLOG = sr.LoadBoolean("CreateEACLOG") ?? true; //_config.preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? false; //_config.createM3U = sr.LoadBoolean("CreateM3U") ?? true; bindingSourceCR.DataSource = data; bnComboBoxDrives.ImageList = m_icon_mgr.ImageList; bnComboBoxFormat.ImageList = m_icon_mgr.ImageList; SetupControls(); int iFormat, nFormats = sr.LoadInt32("OutputPathUseTemplates", 0, 10) ?? 0; for (iFormat = 0; iFormat < OutputPathUseTemplates.Length; iFormat++) bnComboBoxOutputFormat.Items.Add(OutputPathUseTemplates[iFormat]); for (iFormat = nFormats - 1; iFormat >= 0; iFormat--) bnComboBoxOutputFormat.Items.Add(sr.Load(string.Format("OutputPathUseTemplate{0}", iFormat)) ?? ""); bnComboBoxOutputFormat.Text = sr.Load("PathFormat") ?? "%music%\\%artist%\\[%year% - ]%album%\\%artist% - %album%.cue"; SelectedOutputAudioType = (AudioEncoderType?)sr.LoadInt32("OutputAudioType", null, null) ?? AudioEncoderType.Lossless; bnComboBoxImage.SelectedIndex = sr.LoadInt32("ComboImage", 0, bnComboBoxImage.Items.Count - 1) ?? 0; trackBarSecureMode.Value = sr.LoadInt32("SecureMode", 0, trackBarSecureMode.Maximum - 1) ?? 1; trackBarSecureMode_Scroll(this, new EventArgs()); defaultDrive = sr.Load("DefaultDrive"); this.checkBoxTestAndCopy.Checked = this.testAndCopy = sr.LoadBoolean("TestAndCopy") ?? this.testAndCopy; Size SizeIncrement = new Size(sr.LoadInt32("WidthIncrement", 0, null) ?? 0, sr.LoadInt32("HeightIncrement", 0, null) ?? 0); Size = MinimumSize + SizeIncrement; Left -= SizeIncrement.Width / 2; Top -= SizeIncrement.Height / 2; UpdateDrives(); }