diff --git a/CUEControls/Properties/AssemblyInfo.cs b/CUEControls/Properties/AssemblyInfo.cs index 154dee1..f4273f5 100644 --- a/CUEControls/Properties/AssemblyInfo.cs +++ b/CUEControls/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("2.0.7.0")] -[assembly: AssemblyFileVersion("2.0.7.0")] +[assembly: AssemblyVersion("2.0.8.0")] +[assembly: AssemblyFileVersion("2.0.8.0")] diff --git a/CUEPlayer/Properties/AssemblyInfo.cs b/CUEPlayer/Properties/AssemblyInfo.cs index 8a33b29..33de2e5 100644 --- a/CUEPlayer/Properties/AssemblyInfo.cs +++ b/CUEPlayer/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.7.0")] -[assembly: AssemblyFileVersion("2.0.7.0")] +[assembly: AssemblyVersion("2.0.8.0")] +[assembly: AssemblyFileVersion("2.0.8.0")] diff --git a/CUEPlayer/frmCUEPlayer.Designer.cs b/CUEPlayer/frmCUEPlayer.Designer.cs index 3df6216..1ca0a2b 100644 --- a/CUEPlayer/frmCUEPlayer.Designer.cs +++ b/CUEPlayer/frmCUEPlayer.Designer.cs @@ -68,7 +68,7 @@ this.IsMdiContainer = true; this.MainMenuStrip = this.menuStrip1; this.Name = "frmCUEPlayer"; - this.Text = "CUEPlayer 2.0.7"; + this.Text = "CUEPlayer 2.0.8"; this.Load += new System.EventHandler(this.frmCUEPlayer_Load); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmCUEPlayer_FormClosing); this.menuStrip1.ResumeLayout(false); diff --git a/CUERipper/CUERipper.csproj b/CUERipper/CUERipper.csproj index 1fb40ee..cca603b 100644 --- a/CUERipper/CUERipper.csproj +++ b/CUERipper/CUERipper.csproj @@ -40,7 +40,7 @@ true index.html 2 - 2.0.7.2 + 2.0.8.0 false true true @@ -87,6 +87,9 @@ + + frmCUERipper.cs + Designer frmCUERipper.cs diff --git a/CUERipper/Program.cs b/CUERipper/Program.cs index ed9ef23..9591669 100644 --- a/CUERipper/Program.cs +++ b/CUERipper/Program.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; using System.Deployment.Application; +using System.Globalization; using System.Runtime.InteropServices; +using System.Threading; using System.Windows.Forms; +using CUETools.Processor; namespace CUERipper { @@ -20,6 +23,11 @@ namespace CUERipper string arch = Marshal.SizeOf(typeof(IntPtr)) == 8 ? "x64" : "Win32"; GetSatelliteAssemblies("Plugins (" + arch + ")"); + CUEConfig config = new CUEConfig(); + config.Load(new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath)); + try { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(config.language); } + catch { } + Application.Run(new frmCUERipper()); } diff --git a/CUERipper/frmCUERipper.Designer.cs b/CUERipper/frmCUERipper.Designer.cs index 5d50782..fad2f36 100644 --- a/CUERipper/frmCUERipper.Designer.cs +++ b/CUERipper/frmCUERipper.Designer.cs @@ -100,6 +100,11 @@ namespace CUERipper // // statusStrip1 // + this.statusStrip1.AccessibleDescription = null; + this.statusStrip1.AccessibleName = null; + resources.ApplyResources(this.statusStrip1, "statusStrip1"); + this.statusStrip1.BackgroundImage = null; + this.statusStrip1.Font = null; this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripStatusLabel1, this.toolStripStatusLabelMusicBrainz, @@ -107,69 +112,90 @@ namespace CUERipper this.toolStripStatusAr, this.toolStripProgressBar1, this.toolStripStatusLabel2}); - resources.ApplyResources(this.statusStrip1, "statusStrip1"); this.statusStrip1.Name = "statusStrip1"; this.statusStrip1.ShowItemToolTips = true; this.statusStrip1.SizingGrip = false; + this.toolTip1.SetToolTip(this.statusStrip1, resources.GetString("statusStrip1.ToolTip")); // // toolStripStatusLabel1 // - this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.AccessibleDescription = null; + this.toolStripStatusLabel1.AccessibleName = null; resources.ApplyResources(this.toolStripStatusLabel1, "toolStripStatusLabel1"); + this.toolStripStatusLabel1.BackgroundImage = null; + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; this.toolStripStatusLabel1.Spring = true; // // toolStripStatusLabelMusicBrainz // + this.toolStripStatusLabelMusicBrainz.AccessibleDescription = null; + this.toolStripStatusLabelMusicBrainz.AccessibleName = null; + resources.ApplyResources(this.toolStripStatusLabelMusicBrainz, "toolStripStatusLabelMusicBrainz"); + this.toolStripStatusLabelMusicBrainz.BackgroundImage = null; this.toolStripStatusLabelMusicBrainz.BorderSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top) | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); this.toolStripStatusLabelMusicBrainz.BorderStyle = System.Windows.Forms.Border3DStyle.SunkenInner; this.toolStripStatusLabelMusicBrainz.Image = global::CUERipper.Properties.Resources.musicbrainz; this.toolStripStatusLabelMusicBrainz.Name = "toolStripStatusLabelMusicBrainz"; - resources.ApplyResources(this.toolStripStatusLabelMusicBrainz, "toolStripStatusLabelMusicBrainz"); this.toolStripStatusLabelMusicBrainz.Click += new System.EventHandler(this.toolStripStatusLabelMusicBrainz_Click); // // toolStripStatusCTDB // + this.toolStripStatusCTDB.AccessibleDescription = null; + this.toolStripStatusCTDB.AccessibleName = null; + resources.ApplyResources(this.toolStripStatusCTDB, "toolStripStatusCTDB"); + this.toolStripStatusCTDB.BackgroundImage = null; this.toolStripStatusCTDB.BorderSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top) | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); this.toolStripStatusCTDB.BorderStyle = System.Windows.Forms.Border3DStyle.SunkenInner; this.toolStripStatusCTDB.Image = global::CUERipper.Properties.Resources.cdrepair; this.toolStripStatusCTDB.Name = "toolStripStatusCTDB"; - resources.ApplyResources(this.toolStripStatusCTDB, "toolStripStatusCTDB"); // // toolStripStatusAr // + this.toolStripStatusAr.AccessibleDescription = null; + this.toolStripStatusAr.AccessibleName = null; + resources.ApplyResources(this.toolStripStatusAr, "toolStripStatusAr"); + this.toolStripStatusAr.BackgroundImage = null; this.toolStripStatusAr.BorderSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top) | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); this.toolStripStatusAr.BorderStyle = System.Windows.Forms.Border3DStyle.SunkenInner; - resources.ApplyResources(this.toolStripStatusAr, "toolStripStatusAr"); this.toolStripStatusAr.Name = "toolStripStatusAr"; // // toolStripProgressBar1 // + this.toolStripProgressBar1.AccessibleDescription = null; + this.toolStripProgressBar1.AccessibleName = null; + resources.ApplyResources(this.toolStripProgressBar1, "toolStripProgressBar1"); this.toolStripProgressBar1.AutoToolTip = true; this.toolStripProgressBar1.MarqueeAnimationSpeed = 500; this.toolStripProgressBar1.Name = "toolStripProgressBar1"; - resources.ApplyResources(this.toolStripProgressBar1, "toolStripProgressBar1"); this.toolStripProgressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous; // // toolStripStatusLabel2 // + this.toolStripStatusLabel2.AccessibleDescription = null; + this.toolStripStatusLabel2.AccessibleName = null; + resources.ApplyResources(this.toolStripStatusLabel2, "toolStripStatusLabel2"); + this.toolStripStatusLabel2.BackgroundImage = null; this.toolStripStatusLabel2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this.toolStripStatusLabel2.Name = "toolStripStatusLabel2"; - resources.ApplyResources(this.toolStripStatusLabel2, "toolStripStatusLabel2"); // // listTracks // + this.listTracks.AccessibleDescription = null; + this.listTracks.AccessibleName = null; resources.ApplyResources(this.listTracks, "listTracks"); + this.listTracks.BackgroundImage = null; this.listTracks.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.Title, this.TrackNo, this.Start, this.Length}); + this.listTracks.Font = null; this.listTracks.FullRowSelect = true; this.listTracks.GridLines = true; this.listTracks.LabelEdit = true; @@ -201,42 +227,69 @@ namespace CUERipper // // buttonGo // + this.buttonGo.AccessibleDescription = null; + this.buttonGo.AccessibleName = null; resources.ApplyResources(this.buttonGo, "buttonGo"); this.buttonGo.BackColor = System.Drawing.Color.Transparent; + this.buttonGo.BackgroundImage = null; + this.buttonGo.Font = null; this.buttonGo.Name = "buttonGo"; + this.toolTip1.SetToolTip(this.buttonGo, resources.GetString("buttonGo.ToolTip")); this.buttonGo.UseVisualStyleBackColor = false; this.buttonGo.Click += new System.EventHandler(this.buttonGo_Click); // // buttonAbort // + this.buttonAbort.AccessibleDescription = null; + this.buttonAbort.AccessibleName = null; resources.ApplyResources(this.buttonAbort, "buttonAbort"); + this.buttonAbort.BackgroundImage = null; + this.buttonAbort.Font = null; this.buttonAbort.Name = "buttonAbort"; + this.toolTip1.SetToolTip(this.buttonAbort, resources.GetString("buttonAbort.ToolTip")); this.buttonAbort.UseVisualStyleBackColor = true; this.buttonAbort.Click += new System.EventHandler(this.buttonAbort_Click); // // buttonPause // + this.buttonPause.AccessibleDescription = null; + this.buttonPause.AccessibleName = null; resources.ApplyResources(this.buttonPause, "buttonPause"); + this.buttonPause.BackgroundImage = null; + this.buttonPause.Font = null; this.buttonPause.Name = "buttonPause"; + this.toolTip1.SetToolTip(this.buttonPause, resources.GetString("buttonPause.ToolTip")); this.buttonPause.UseVisualStyleBackColor = true; this.buttonPause.Click += new System.EventHandler(this.buttonPause_Click); // // contextMenuStripRelease // + this.contextMenuStripRelease.AccessibleDescription = null; + this.contextMenuStripRelease.AccessibleName = null; + resources.ApplyResources(this.contextMenuStripRelease, "contextMenuStripRelease"); + this.contextMenuStripRelease.BackgroundImage = null; + this.contextMenuStripRelease.Font = null; this.contextMenuStripRelease.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.editToolStripMenuItem}); this.contextMenuStripRelease.Name = "contextMenuStripRelease"; - resources.ApplyResources(this.contextMenuStripRelease, "contextMenuStripRelease"); + this.toolTip1.SetToolTip(this.contextMenuStripRelease, resources.GetString("contextMenuStripRelease.ToolTip")); // // editToolStripMenuItem // - this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.AccessibleDescription = null; + this.editToolStripMenuItem.AccessibleName = null; resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem"); + this.editToolStripMenuItem.BackgroundImage = null; + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.ShortcutKeyDisplayString = null; this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click); // // numericWriteOffset // + this.numericWriteOffset.AccessibleDescription = null; + this.numericWriteOffset.AccessibleName = null; resources.ApplyResources(this.numericWriteOffset, "numericWriteOffset"); + this.numericWriteOffset.Font = null; this.numericWriteOffset.Maximum = new decimal(new int[] { 99999, 0, @@ -248,21 +301,35 @@ namespace CUERipper 0, -2147483648}); this.numericWriteOffset.Name = "numericWriteOffset"; + this.toolTip1.SetToolTip(this.numericWriteOffset, resources.GetString("numericWriteOffset.ToolTip")); // // lblWriteOffset // + this.lblWriteOffset.AccessibleDescription = null; + this.lblWriteOffset.AccessibleName = null; resources.ApplyResources(this.lblWriteOffset, "lblWriteOffset"); + this.lblWriteOffset.Font = null; this.lblWriteOffset.Name = "lblWriteOffset"; + this.toolTip1.SetToolTip(this.lblWriteOffset, resources.GetString("lblWriteOffset.ToolTip")); // // checkBoxEACMode // + this.checkBoxEACMode.AccessibleDescription = null; + this.checkBoxEACMode.AccessibleName = null; resources.ApplyResources(this.checkBoxEACMode, "checkBoxEACMode"); + this.checkBoxEACMode.BackgroundImage = null; + this.checkBoxEACMode.Font = null; this.checkBoxEACMode.Name = "checkBoxEACMode"; + this.toolTip1.SetToolTip(this.checkBoxEACMode, resources.GetString("checkBoxEACMode.ToolTip")); this.checkBoxEACMode.UseVisualStyleBackColor = true; this.checkBoxEACMode.CheckedChanged += new System.EventHandler(this.checkBoxEACMode_CheckedChanged); // // groupBoxSettings // + this.groupBoxSettings.AccessibleDescription = null; + this.groupBoxSettings.AccessibleName = null; + resources.ApplyResources(this.groupBoxSettings, "groupBoxSettings"); + this.groupBoxSettings.BackgroundImage = null; this.groupBoxSettings.Controls.Add(this.bnComboBoxLosslessOrNot); this.groupBoxSettings.Controls.Add(this.bnComboBoxEncoder); this.groupBoxSettings.Controls.Add(this.labelSecureMode); @@ -276,22 +343,27 @@ namespace CUERipper this.groupBoxSettings.Controls.Add(this.lblWriteOffset); this.groupBoxSettings.Controls.Add(this.checkBoxEACMode); this.groupBoxSettings.Controls.Add(this.numericWriteOffset); - resources.ApplyResources(this.groupBoxSettings, "groupBoxSettings"); + this.groupBoxSettings.Font = null; this.groupBoxSettings.Name = "groupBoxSettings"; this.groupBoxSettings.TabStop = false; + this.toolTip1.SetToolTip(this.groupBoxSettings, resources.GetString("groupBoxSettings.ToolTip")); // // bnComboBoxLosslessOrNot // + this.bnComboBoxLosslessOrNot.AccessibleDescription = null; + this.bnComboBoxLosslessOrNot.AccessibleName = null; + resources.ApplyResources(this.bnComboBoxLosslessOrNot, "bnComboBoxLosslessOrNot"); this.bnComboBoxLosslessOrNot.BackColor = System.Drawing.Color.White; + this.bnComboBoxLosslessOrNot.BackgroundImage = null; this.bnComboBoxLosslessOrNot.DataSource = this.losslessOrNotBindingSource; this.bnComboBoxLosslessOrNot.DropDownHeight = 200; this.bnComboBoxLosslessOrNot.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxLosslessOrNot.DropDownWidth = 80; + this.bnComboBoxLosslessOrNot.Font = null; this.bnComboBoxLosslessOrNot.ForeColor = System.Drawing.SystemColors.ControlText; this.bnComboBoxLosslessOrNot.ImageKeyMember = "ImageKey"; this.bnComboBoxLosslessOrNot.ImageList = null; this.bnComboBoxLosslessOrNot.IsDroppedDown = false; - resources.ApplyResources(this.bnComboBoxLosslessOrNot, "bnComboBoxLosslessOrNot"); this.bnComboBoxLosslessOrNot.MaxDropDownItems = 8; this.bnComboBoxLosslessOrNot.MinimumSize = new System.Drawing.Size(40, 21); this.bnComboBoxLosslessOrNot.Name = "bnComboBoxLosslessOrNot"; @@ -299,6 +371,7 @@ namespace CUERipper this.bnComboBoxLosslessOrNot.SelectedIndex = -1; this.bnComboBoxLosslessOrNot.SelectedItem = null; this.bnComboBoxLosslessOrNot.Sorted = false; + this.toolTip1.SetToolTip(this.bnComboBoxLosslessOrNot, resources.GetString("bnComboBoxLosslessOrNot.ToolTip")); this.bnComboBoxLosslessOrNot.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxLosslessOrNot_SelectedIndexChanged); // // losslessOrNotBindingSource @@ -312,15 +385,19 @@ namespace CUERipper // // bnComboBoxEncoder // + this.bnComboBoxEncoder.AccessibleDescription = null; + this.bnComboBoxEncoder.AccessibleName = null; + resources.ApplyResources(this.bnComboBoxEncoder, "bnComboBoxEncoder"); this.bnComboBoxEncoder.BackColor = System.Drawing.Color.White; + this.bnComboBoxEncoder.BackgroundImage = null; this.bnComboBoxEncoder.DataSource = this.encodersBindingSource; this.bnComboBoxEncoder.DropDownHeight = 200; this.bnComboBoxEncoder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxEncoder.DropDownWidth = 80; + this.bnComboBoxEncoder.Font = null; this.bnComboBoxEncoder.ForeColor = System.Drawing.SystemColors.ControlText; this.bnComboBoxEncoder.ImageList = null; this.bnComboBoxEncoder.IsDroppedDown = false; - resources.ApplyResources(this.bnComboBoxEncoder, "bnComboBoxEncoder"); this.bnComboBoxEncoder.MaxDropDownItems = 8; this.bnComboBoxEncoder.MinimumSize = new System.Drawing.Size(40, 21); this.bnComboBoxEncoder.Name = "bnComboBoxEncoder"; @@ -328,6 +405,7 @@ namespace CUERipper this.bnComboBoxEncoder.SelectedIndex = -1; this.bnComboBoxEncoder.SelectedItem = null; this.bnComboBoxEncoder.Sorted = false; + this.toolTip1.SetToolTip(this.bnComboBoxEncoder, resources.GetString("bnComboBoxEncoder.ToolTip")); this.bnComboBoxEncoder.SelectedIndexChanged += new System.EventHandler(this.comboBoxEncoder_SelectedIndexChanged); // // encodersBindingSource @@ -337,21 +415,29 @@ namespace CUERipper // // labelSecureMode // + this.labelSecureMode.AccessibleDescription = null; + this.labelSecureMode.AccessibleName = null; resources.ApplyResources(this.labelSecureMode, "labelSecureMode"); + this.labelSecureMode.Font = null; this.labelSecureMode.Name = "labelSecureMode"; + this.toolTip1.SetToolTip(this.labelSecureMode, resources.GetString("labelSecureMode.ToolTip")); // // bnComboBoxFormat // + this.bnComboBoxFormat.AccessibleDescription = null; + this.bnComboBoxFormat.AccessibleName = null; + resources.ApplyResources(this.bnComboBoxFormat, "bnComboBoxFormat"); this.bnComboBoxFormat.BackColor = System.Drawing.Color.White; + this.bnComboBoxFormat.BackgroundImage = null; this.bnComboBoxFormat.DataSource = this.formatsBindingSource; this.bnComboBoxFormat.DropDownHeight = 200; this.bnComboBoxFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxFormat.DropDownWidth = 80; + this.bnComboBoxFormat.Font = null; this.bnComboBoxFormat.ForeColor = System.Drawing.SystemColors.ControlText; this.bnComboBoxFormat.ImageKeyMember = "DotExtension"; this.bnComboBoxFormat.ImageList = null; this.bnComboBoxFormat.IsDroppedDown = false; - resources.ApplyResources(this.bnComboBoxFormat, "bnComboBoxFormat"); this.bnComboBoxFormat.MaxDropDownItems = 8; this.bnComboBoxFormat.MinimumSize = new System.Drawing.Size(40, 21); this.bnComboBoxFormat.Name = "bnComboBoxFormat"; @@ -359,6 +445,7 @@ namespace CUERipper this.bnComboBoxFormat.SelectedIndex = -1; this.bnComboBoxFormat.SelectedItem = null; this.bnComboBoxFormat.Sorted = false; + this.toolTip1.SetToolTip(this.bnComboBoxFormat, resources.GetString("bnComboBoxFormat.ToolTip")); this.bnComboBoxFormat.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxFormat_SelectedIndexChanged); // // formatsBindingSource @@ -368,20 +455,27 @@ namespace CUERipper // // labelEncoderMinMode // + this.labelEncoderMinMode.AccessibleDescription = null; + this.labelEncoderMinMode.AccessibleName = null; resources.ApplyResources(this.labelEncoderMinMode, "labelEncoderMinMode"); this.labelEncoderMinMode.Name = "labelEncoderMinMode"; + this.toolTip1.SetToolTip(this.labelEncoderMinMode, resources.GetString("labelEncoderMinMode.ToolTip")); // // bnComboBoxImage // + this.bnComboBoxImage.AccessibleDescription = null; + this.bnComboBoxImage.AccessibleName = null; + resources.ApplyResources(this.bnComboBoxImage, "bnComboBoxImage"); this.bnComboBoxImage.BackColor = System.Drawing.Color.White; + this.bnComboBoxImage.BackgroundImage = null; this.bnComboBoxImage.DataSource = this.cUEStylesBindingSource; this.bnComboBoxImage.DropDownHeight = 200; this.bnComboBoxImage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxImage.DropDownWidth = 80; + this.bnComboBoxImage.Font = null; this.bnComboBoxImage.ForeColor = System.Drawing.SystemColors.ControlText; this.bnComboBoxImage.ImageList = null; this.bnComboBoxImage.IsDroppedDown = false; - resources.ApplyResources(this.bnComboBoxImage, "bnComboBoxImage"); this.bnComboBoxImage.MaxDropDownItems = 8; this.bnComboBoxImage.MinimumSize = new System.Drawing.Size(40, 21); this.bnComboBoxImage.Name = "bnComboBoxImage"; @@ -389,6 +483,7 @@ namespace CUERipper this.bnComboBoxImage.SelectedIndex = -1; this.bnComboBoxImage.SelectedItem = null; this.bnComboBoxImage.Sorted = false; + this.toolTip1.SetToolTip(this.bnComboBoxImage, resources.GetString("bnComboBoxImage.ToolTip")); // // cUEStylesBindingSource // @@ -397,27 +492,43 @@ namespace CUERipper // // labelEncoderMaxMode // + this.labelEncoderMaxMode.AccessibleDescription = null; + this.labelEncoderMaxMode.AccessibleName = null; resources.ApplyResources(this.labelEncoderMaxMode, "labelEncoderMaxMode"); this.labelEncoderMaxMode.Name = "labelEncoderMaxMode"; + this.toolTip1.SetToolTip(this.labelEncoderMaxMode, resources.GetString("labelEncoderMaxMode.ToolTip")); // // labelEncoderMode // + this.labelEncoderMode.AccessibleDescription = null; + this.labelEncoderMode.AccessibleName = null; resources.ApplyResources(this.labelEncoderMode, "labelEncoderMode"); this.labelEncoderMode.Name = "labelEncoderMode"; + this.toolTip1.SetToolTip(this.labelEncoderMode, resources.GetString("labelEncoderMode.ToolTip")); // // trackBarEncoderMode // + this.trackBarEncoderMode.AccessibleDescription = null; + this.trackBarEncoderMode.AccessibleName = null; resources.ApplyResources(this.trackBarEncoderMode, "trackBarEncoderMode"); + this.trackBarEncoderMode.BackgroundImage = null; + this.trackBarEncoderMode.Font = null; this.trackBarEncoderMode.LargeChange = 1; this.trackBarEncoderMode.Name = "trackBarEncoderMode"; + this.toolTip1.SetToolTip(this.trackBarEncoderMode, resources.GetString("trackBarEncoderMode.ToolTip")); this.trackBarEncoderMode.Scroll += new System.EventHandler(this.trackBarEncoderMode_Scroll); // // trackBarSecureMode // + this.trackBarSecureMode.AccessibleDescription = null; + this.trackBarSecureMode.AccessibleName = null; resources.ApplyResources(this.trackBarSecureMode, "trackBarSecureMode"); + this.trackBarSecureMode.BackgroundImage = null; + this.trackBarSecureMode.Font = null; this.trackBarSecureMode.LargeChange = 3; this.trackBarSecureMode.Maximum = 2; this.trackBarSecureMode.Name = "trackBarSecureMode"; + this.toolTip1.SetToolTip(this.trackBarSecureMode, resources.GetString("trackBarSecureMode.ToolTip")); this.trackBarSecureMode.Scroll += new System.EventHandler(this.trackBarSecureMode_Scroll); // // imageListChecked @@ -431,15 +542,23 @@ namespace CUERipper // // toolStripMenuItem1 // + this.toolStripMenuItem1.AccessibleDescription = null; + this.toolStripMenuItem1.AccessibleName = null; + resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + this.toolStripMenuItem1.BackgroundImage = null; this.toolStripMenuItem1.Image = global::CUERipper.Properties.Resources.cddb; this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1"); + this.toolStripMenuItem1.ShortcutKeyDisplayString = null; // // progressBarErrors // + this.progressBarErrors.AccessibleDescription = null; + this.progressBarErrors.AccessibleName = null; + resources.ApplyResources(this.progressBarErrors, "progressBarErrors"); + this.progressBarErrors.BackgroundImage = null; this.progressBarErrors.BackgroundPainter = this.plainBackgroundPainter1; this.progressBarErrors.BorderPainter = this.styledBorderPainter1; - resources.ApplyResources(this.progressBarErrors, "progressBarErrors"); + this.progressBarErrors.Font = null; this.progressBarErrors.MarqueePercentage = 25; this.progressBarErrors.MarqueeSpeed = 30; this.progressBarErrors.MarqueeStep = 1; @@ -450,6 +569,7 @@ namespace CUERipper this.progressBarErrors.ProgressPainter = this.plainProgressPainter1; this.progressBarErrors.ProgressType = ProgressODoom.ProgressType.Smooth; this.progressBarErrors.ShowPercentage = false; + this.toolTip1.SetToolTip(this.progressBarErrors, resources.GetString("progressBarErrors.ToolTip")); this.progressBarErrors.Value = 10; // // plainBackgroundPainter1 @@ -480,9 +600,13 @@ namespace CUERipper // // progressBarCD // + this.progressBarCD.AccessibleDescription = null; + this.progressBarCD.AccessibleName = null; + resources.ApplyResources(this.progressBarCD, "progressBarCD"); + this.progressBarCD.BackgroundImage = null; this.progressBarCD.BackgroundPainter = this.plainBackgroundPainter1; this.progressBarCD.BorderPainter = this.styledBorderPainter1; - resources.ApplyResources(this.progressBarCD, "progressBarCD"); + this.progressBarCD.Font = null; this.progressBarCD.MarqueePercentage = 25; this.progressBarCD.MarqueeSpeed = 30; this.progressBarCD.MarqueeStep = 1; @@ -493,6 +617,7 @@ namespace CUERipper this.progressBarCD.ProgressPainter = this.plainProgressPainter2; this.progressBarCD.ProgressType = ProgressODoom.ProgressType.Smooth; this.progressBarCD.ShowPercentage = true; + this.toolTip1.SetToolTip(this.progressBarCD, resources.GetString("progressBarCD.ToolTip")); this.progressBarCD.Value = 10; // // plainProgressPainter2 @@ -504,7 +629,11 @@ namespace CUERipper // // txtOutputPath // + this.txtOutputPath.AccessibleDescription = null; + this.txtOutputPath.AccessibleName = null; resources.ApplyResources(this.txtOutputPath, "txtOutputPath"); + this.txtOutputPath.BackgroundImage = null; + this.txtOutputPath.Font = null; this.txtOutputPath.Name = "txtOutputPath"; this.txtOutputPath.ReadOnly = true; this.toolTip1.SetToolTip(this.txtOutputPath, resources.GetString("txtOutputPath.ToolTip")); @@ -512,17 +641,21 @@ namespace CUERipper // // bnComboBoxRelease // + this.bnComboBoxRelease.AccessibleDescription = null; + this.bnComboBoxRelease.AccessibleName = null; + resources.ApplyResources(this.bnComboBoxRelease, "bnComboBoxRelease"); this.bnComboBoxRelease.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.bnComboBoxRelease.BackgroundImage = null; this.bnComboBoxRelease.ContextMenuStrip = this.contextMenuStripRelease; this.bnComboBoxRelease.DataSource = this.releasesBindingSource; this.bnComboBoxRelease.DropDownHeight = 200; this.bnComboBoxRelease.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxRelease.DropDownWidth = 552; + this.bnComboBoxRelease.Font = null; this.bnComboBoxRelease.ForeColor = System.Drawing.SystemColors.ControlText; this.bnComboBoxRelease.ImageKeyMember = "ImageKey"; this.bnComboBoxRelease.ImageList = this.imageListMetadataSource; this.bnComboBoxRelease.IsDroppedDown = false; - resources.ApplyResources(this.bnComboBoxRelease, "bnComboBoxRelease"); this.bnComboBoxRelease.MaxDropDownItems = 8; this.bnComboBoxRelease.MinimumSize = new System.Drawing.Size(61, 21); this.bnComboBoxRelease.Name = "bnComboBoxRelease"; @@ -547,16 +680,20 @@ namespace CUERipper // // bnComboBoxDrives // + this.bnComboBoxDrives.AccessibleDescription = null; + this.bnComboBoxDrives.AccessibleName = null; + resources.ApplyResources(this.bnComboBoxDrives, "bnComboBoxDrives"); this.bnComboBoxDrives.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.bnComboBoxDrives.BackgroundImage = null; this.bnComboBoxDrives.DataSource = this.drivesBindingSource; this.bnComboBoxDrives.DropDownHeight = 200; this.bnComboBoxDrives.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxDrives.DropDownWidth = 552; + this.bnComboBoxDrives.Font = null; this.bnComboBoxDrives.ForeColor = System.Drawing.SystemColors.ControlText; this.bnComboBoxDrives.ImageKeyMember = "ImageKey"; this.bnComboBoxDrives.ImageList = this.imageListMetadataSource; this.bnComboBoxDrives.IsDroppedDown = false; - resources.ApplyResources(this.bnComboBoxDrives, "bnComboBoxDrives"); this.bnComboBoxDrives.MaxDropDownItems = 8; this.bnComboBoxDrives.MinimumSize = new System.Drawing.Size(61, 21); this.bnComboBoxDrives.Name = "bnComboBoxDrives"; @@ -564,6 +701,7 @@ namespace CUERipper this.bnComboBoxDrives.SelectedIndex = -1; this.bnComboBoxDrives.SelectedItem = null; this.bnComboBoxDrives.Sorted = false; + this.toolTip1.SetToolTip(this.bnComboBoxDrives, resources.GetString("bnComboBoxDrives.ToolTip")); this.bnComboBoxDrives.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxDrives_SelectedIndexChanged); // // drivesBindingSource @@ -573,14 +711,18 @@ namespace CUERipper // // bnComboBoxOutputFormat // + this.bnComboBoxOutputFormat.AccessibleDescription = null; + this.bnComboBoxOutputFormat.AccessibleName = null; + resources.ApplyResources(this.bnComboBoxOutputFormat, "bnComboBoxOutputFormat"); this.bnComboBoxOutputFormat.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.bnComboBoxOutputFormat.BackgroundImage = null; this.bnComboBoxOutputFormat.DropDownHeight = 200; this.bnComboBoxOutputFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown; this.bnComboBoxOutputFormat.DropDownWidth = 552; + this.bnComboBoxOutputFormat.Font = null; this.bnComboBoxOutputFormat.ForeColor = System.Drawing.SystemColors.ControlText; this.bnComboBoxOutputFormat.ImageList = null; this.bnComboBoxOutputFormat.IsDroppedDown = false; - resources.ApplyResources(this.bnComboBoxOutputFormat, "bnComboBoxOutputFormat"); this.bnComboBoxOutputFormat.MaxDropDownItems = 8; this.bnComboBoxOutputFormat.MinimumSize = new System.Drawing.Size(40, 21); this.bnComboBoxOutputFormat.Name = "bnComboBoxOutputFormat"; @@ -588,6 +730,7 @@ namespace CUERipper this.bnComboBoxOutputFormat.SelectedIndex = -1; this.bnComboBoxOutputFormat.SelectedItem = null; this.bnComboBoxOutputFormat.Sorted = false; + this.toolTip1.SetToolTip(this.bnComboBoxOutputFormat, resources.GetString("bnComboBoxOutputFormat.ToolTip")); this.bnComboBoxOutputFormat.DroppedDown += new System.EventHandler(this.bnComboBoxOutputFormat_DroppedDown); this.bnComboBoxOutputFormat.Leave += new System.EventHandler(this.bnComboBoxOutputFormat_Leave); this.bnComboBoxOutputFormat.MouseLeave += new System.EventHandler(this.bnComboBoxOutputFormat_MouseLeave); @@ -595,8 +738,11 @@ namespace CUERipper // // frmCUERipper // + this.AccessibleDescription = null; + this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = null; this.Controls.Add(this.txtOutputPath); this.Controls.Add(this.bnComboBoxRelease); this.Controls.Add(this.bnComboBoxDrives); @@ -609,11 +755,13 @@ namespace CUERipper this.Controls.Add(this.statusStrip1); this.Controls.Add(this.buttonAbort); this.Controls.Add(this.buttonPause); + this.Font = null; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.KeyPreview = true; this.MaximizeBox = false; this.Name = "frmCUERipper"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.toolTip1.SetToolTip(this, resources.GetString("$this.ToolTip")); this.Load += new System.EventHandler(this.frmCUERipper_Load); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.frmCUERipper_FormClosed); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.frmCUERipper_KeyDown); diff --git a/CUERipper/frmCUERipper.cs b/CUERipper/frmCUERipper.cs index f8c0138..ab349ba 100644 --- a/CUERipper/frmCUERipper.cs +++ b/CUERipper/frmCUERipper.cs @@ -542,7 +542,7 @@ namespace CUERipper cueSheet.Action = CUEAction.Encode; this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " CTDB..."; }); - cueSheet.UseCUEToolsDB(true, "CUERipper 2.0.7: " + selectedDriveInfo.drive.ARName); + cueSheet.UseCUEToolsDB(true, "CUERipper 2.0.8: " + selectedDriveInfo.drive.ARName); cueSheet.CTDB.UploadHelper.onProgress += new EventHandler(UploadProgress); this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " AccurateRip..."; }); cueSheet.UseAccurateRip(); @@ -575,7 +575,7 @@ namespace CUERipper m_freedb.UserName = "gchudov"; m_freedb.Hostname = "gmail.com"; m_freedb.ClientName = "CUERipper"; - m_freedb.Version = "2.0.7"; + m_freedb.Version = "2.0.8"; m_freedb.SetDefaultSiteAddress(Properties.Settings.Default.MAIN_FREEDB_SITEADDRESS); QueryResult queryResult; @@ -626,6 +626,9 @@ namespace CUERipper releases.Add(CreateCUESheet(audioSource, null, null)); } _workThread = null; + // have to cache results.Count, because it sometimes hangs in it, + // and we don't want UI thread to hang. + int mbresults_count = results.Count; this.BeginInvoke((MethodInvoker)delegate() { SetupControls(); @@ -639,9 +642,9 @@ namespace CUERipper toolStripStatusCTDB.Text = cueSheet.CTDB.DBStatus == null ? cueSheet.CTDB.Total.ToString() : ""; toolStripStatusCTDB.ToolTipText = "CUETools DB: " + (cueSheet.CTDB.DBStatus ?? "found") + "."; toolStripStatusLabelMusicBrainz.Enabled = true; - toolStripStatusLabelMusicBrainz.BorderStyle = results.Count > 0 ? Border3DStyle.SunkenInner : Border3DStyle.RaisedInner; - toolStripStatusLabelMusicBrainz.Text = results.Count > 0 ? results.Count.ToString() : ""; - toolStripStatusLabelMusicBrainz.ToolTipText = "Musicbrainz: " + (results.Count > 0 ? results.Count.ToString() + " entries found." : "click to submit."); + toolStripStatusLabelMusicBrainz.BorderStyle = mbresults_count > 0 ? Border3DStyle.SunkenInner : Border3DStyle.RaisedInner; + toolStripStatusLabelMusicBrainz.Text = mbresults_count > 0 ? mbresults_count.ToString() : ""; + toolStripStatusLabelMusicBrainz.ToolTipText = "Musicbrainz: " + (mbresults_count > 0 ? mbresults_count.ToString() + " entries found." : "click to submit."); }); } diff --git a/CUERipper/frmCUERipper.de-DE.resx b/CUERipper/frmCUERipper.de-DE.resx index 6dd26e6..363a5b2 100644 --- a/CUERipper/frmCUERipper.de-DE.resx +++ b/CUERipper/frmCUERipper.de-DE.resx @@ -187,6 +187,6 @@ Rechtsklick zum Ändern der CD-Informationen - CUERipper 2.0.7 + CUERipper 2.0.8 \ No newline at end of file diff --git a/CUERipper/frmCUERipper.resx b/CUERipper/frmCUERipper.resx index b28f8cf..f02adbc 100644 --- a/CUERipper/frmCUERipper.resx +++ b/CUERipper/frmCUERipper.resx @@ -117,668 +117,60 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 456 - - - 394, 20 - - - MiddleLeft - - - 20, 20 - - - 20, 20 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAyNJREFUOE9tkm1P - mmcYhh+zbsm+Ntlf2Jd92n/Yx21p1nTZlplZ0mJD2+mYG119AakITi2tmoK0a33p1BL7MtcpXRCrKNbK - EEOd1qLYCigSERB5e4BjxGVZSLyTM3dyJcdx3cl9lglHHKcTHO43wk76XSH/Tl44/t4x4cP3jwsfffBW - mUiOt8uOlR3FCaN9KWplSaq+F5FehnItVN4ooOgroLpfoHM0i9WVoATOkz0cPP8DVBUxaiRFqAq+VqSR - NoPcAOqBAi0PChif5Lg3LeLeyJRKujQrKC9uFeEEZ8rTVFQWOCsv8OMVaOwW6TCDaQyGpvJYnDEW18J4 - Vjf+lyh++JsL8g0qZLuclojITmdRSEGnBP3tPHeKr7tvh8kXB2zuwU40SjwRIp2KI1y7NcUFtQtJ4yLl - dUFkNVHqzqeplwRwTsKzheLWmQzLfgjs5wgn4wR3XrIbWSAVW0D4rvURZ7SzSLQuzuq8KDTb6BpizD/N - 4VsPsvxqle2oSHBfJJTe5/XeCpGEm+TBHLmkFUF6/S6SjlFknRMoutzo9D6M19cJBGL8aRs/vCOJOP5M - Ar+4TlR0I+bsFMTHxZgRKnXdVGsHUGofoGmyYaybpafGw4zZR+YgSTy6j3fJy5u1ZWKBv8juPoHoCLno - EOz1Igyaf6OpsQtDm5mJu4sMVlmY7VwibAsRdAcITqwSsT4jNW0ns/wYvEMUXv8CwQ5S4YcIfr+f2+0G - luweVu2+oqCHTdsa4flNkk4/3t4xEiOjYC3C8wPklwzkvXrwtUHK8+9XGi/V011ZzYbVwda4h9BTF5HZ - l2z3PiRuNJIe7EIc0ZO36SjMFtvl+Yn4ytXSMjlu9WD56hzZkXESjjkyUzOE1LWk26pJ3ZRz8Gsxjy6S - GJcQc5tK4f+6/fxeH2MVnzMnPcmr8yfZrvmErYZPCbR+zGbHCXx3vsAx3HI0PDw8jMlkor9Zze9VUqbP - fckL+Slc9Z/hVJ9iUvsNN9Xf8vPVdgyG7lKJxWKhv78fvV5Pi6YZtVqFUnUZTcMltLW1qBqU1Deqi2lC - c6WZ9vZWbhgNh5J/AJcIo/TEh255AAAAAElFTkSuQmCC - - - - White - - - 20, 20 - - - Album found in AccurateRip database. - - - 100, 19 - - - Read progress - - - 0, 20 - - - toolStripStatusAr - - - 0, 456 - - - 571, 25 - - - - 12 - - - statusStrip1 - - - statusStrip1 - - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 10 - - - - Top, Left, Right - - - 1 - - - Title - - - 355 - - - 0 - - - # - - - 30 - - - Start - - - 70 - - - Length - - - 70 - - - 6, 87 - - - 553, 245 - - - 2 - - - 357, 17 - - - Double-click to edit track names - - - listTracks - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 8 - - - Top, Left, Right - - - NoControl - - - 382, 343 - - - 177, 33 - - - 13 - - - Go - - - buttonGo - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 9 - - - Top, Left, Right - - - NoControl - - - 474, 343 - - - 85, 33 - - - 19 - - - Abort - - - False - - - buttonAbort - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 11 - - - Top, Left, Right - - - NoControl - - - 383, 343 - - - 85, 33 - - - 20 - - - Pause - - - False - - - buttonPause - - - System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 12 - - - 17, 17 - - - 94, 22 - - - Edit - - - 95, 26 - - - contextMenuStripRelease - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 310, 15 - - - 54, 20 - - - 7 - - - Right - - - numericWriteOffset - - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - - 12 - - - True - - - NoControl - - - 242, 19 - - - 62, 13 - - - 23 - - - Read offset - - - lblWriteOffset - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - - 10 - - - True - - - NoControl - - - 245, 44 - - - 64, 17 - - - 3 - - - EAC log - - - checkBoxEACMode - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - - 11 - - - 369, 95 - - - 210, 56 - - - 6, 19 - - - 80, 21 - - - 39 - - - bnComboBoxLosslessOrNot - - - CUEControls.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null - - - groupBoxSettings - - - 0 - - - 189, 95 - - - 92, 46 - - - 80, 21 - - - 38 - - - bnComboBoxEncoder - - - CUEControls.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null - - - groupBoxSettings - - - 1 - - - NoControl - - - 248, 98 - - - 109, 18 - - - 33 - - - TopCenter - - - labelSecureMode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - - 2 - - - 17, 95 - - - 92, 19 - - - 80, 21 - - - 37 - - - bnComboBoxFormat - - - CUEControls.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null - - - groupBoxSettings - - - 3 - - - True - - - False - - - Tahoma, 8.25pt - - - NoControl - - - 12, 106 - - - 0, 0, 0, 0 - - - 25, 13 - - - 30 - - - 128 - - - labelEncoderMinMode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - - 4 - - - 526, 56 - - - 6, 46 - - - 80, 21 - - - 34 - - - bnComboBoxImage - - - CUEControls.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null - - - groupBoxSettings - - - 5 - - - False - - - Tahoma, 8.25pt - - - NoControl - - - 143, 106 - - - 0, 0, 0, 0 - - - 29, 13 - - - 32 - - - 320 + + 237, 71 TopRight - - labelEncoderMaxMode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - - 6 - - - Tahoma, 8.25pt - - - NoControl - - - 12, 106 - - - 0, 0, 0, 0 - - - 167, 15 - - - 31 - - - 256 - - - TopCenter - - - labelEncoderMode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - + + 7 - + + imageListMetadataSource + + + NoControl - - 6, 76 + + System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0, 0, 0 + + False - - 166, 45 + + 1 8 - - trackBarEncoderMode + + 0 - - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + labelSecureMode - - groupBoxSettings + + - - 8 + + 6, 13 - - NoControl + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 237, 71 + + 0, 20 - - 127, 45 - - - 30 - - - trackBarSecureMode - - - System.Windows.Forms.TrackBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxSettings - - - 9 - - - 6, 332 - - - 370, 121 - - - 29 - - - groupBoxSettings - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 7 - - - 207, 17 - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACK - CQAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACM + CQAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -818,111 +210,83 @@ AfMG8gHzAf8GAAH/AfMG8gHzAf/DAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/ gQAY/wHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEH AeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEH - AeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcY/ws= + AeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcB4AEHAeABBwHgAQcY/xYACw== - - 181, 22 + + CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null - - toolStripMenuItem1 + + NoControl - - 960, 17 - - - 624, 17 - - - 382, 421 - - - 454, 17 - - - 789, 17 - - - 177, 23 - - - 30 - - - progressBarErrors - - - ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.3732.11482, Culture=neutral, PublicKeyToken=null - - + $this - - 5 + + 80, 21 - - 382, 392 + + 0, 0, 0, 0 - - 356, 56 - - - 176, 23 + + 62, 13 - - 31 + + NoControl - - 10% + + False - - progressBarCD + + Right - - ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.3732.11482, Culture=neutral, PublicKeyToken=null + + Double-click to edit track names - + + 20 + + + 94, 22 + + + 571, 25 + + $this - - 6 + + 0, 0, 0, 0 - - 7, 61 + + 3 - - 552, 20 + + Top, Left, Right - - 33 - - - Click to edit output path template - - - txtOutputPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + $this - - 1 + + MiddleLeft + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl + PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI + X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG + AAAAAgAAAAIAAAAL + + + + 9 - - 708, 56 - - - 17, 56 - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAa - CQAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CQAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -960,89 +324,278 @@ AewgAASuAQABBwP/AbwB6gEAAf8BAAKuAf8BogL/AQQC/wQEAf8DBAEKIAAErgERARMBBwb/AQACrgH/ AaIBBAH/AQQC/wEEAv8BBAH/AQQB9AHzAQogAAWuAREBAAERAZIE/wEAAq4B/wGGAv8CBAL/AgQD/wIE AewgAAeuAREBAAEPAesBvAH/AQACrgH/AYYL/wH0AfMB7CEACa4BDwEAARMBEQGuAQAC/wG1C/8B9AEH - IAABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAYABAXYAAYABAQYACw== + IAABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAYABAXYAAYABARwACw== - - 6, 33 + + 128 - - 552, 21 + + groupBoxSettings + + + + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 456 + + + 474, 343 + + + 166, 45 + + + cUEStylesBindingSource + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + 33 35 - - Right-lick to edit release info - - - bnComboBoxRelease - - - CUEControls.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 2 - - - 998, 56 - - - 6, 6 - - - 552, 21 - - - 36 - - - bnComboBoxDrives - - - CUEControls.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 3 - - - 6, 60 - - - 552, 21 - - - 37 - - - bnComboBoxOutputFormat - - - CUEControls.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null - - - $this + + 0, 0, 0, 0 4 - - True - - - 50 - - - 6, 13 + + 6, 76 - - 571, 481 + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 7, 61 + + + CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null + + + bnComboBoxImage + + + 1 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl + PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI + X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG + AAAAAgAAAAIAAAAL + + + + 109, 18 + + + 12, 106 + + + 177, 23 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl + PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI + X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG + AAAAAgAAAAIAAAAL + + + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripStatusAr + + + groupBoxSettings + + + losslessOrNotBindingSource + + + bnComboBoxRelease + + + editToolStripMenuItem + + + Tahoma, 8.25pt + + + ProgressODoom.StyledBorderPainter, ProgressODoom, Version=1.0.3766.36510, Culture=neutral, PublicKeyToken=null + + + labelEncoderMaxMode + + + toolStripStatusLabelMusicBrainz + + + 2 + + + 95, 26 + + + + + + 3 + + + 20, 20 + + + System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0 + + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 37 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 176, 23 + + + CUERipper 2.0.8 + + + 38 + + + 85, 33 + + + + + + labelEncoderMinMode + + + 2 + + + 355 + + + 6, 87 + + + + + + TrackNo + + + 382, 392 + + + 85, 33 + + + NoControl + + + toolStripStatusLabel1 + + + System.Windows.Forms.ToolStripProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 552, 21 + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + 30 + + + Read offset + + + TopCenter + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAyNJREFUOE9tkm1P + mmcYhh+zbsm+Ntlf2Jd92n/Yx21p1nTZlplZ0mJD2+mYG119AakITi2tmoK0a33p1BL7MtcpXRCrKNbK + EEOd1qLYCigSERB5e4BjxGVZSLyTM3dyJcdx3cl9lglHHKcTHO43wk76XSH/Tl44/t4x4cP3jwsfffBW + mUiOt8uOlR3FCaN9KWplSaq+F5FehnItVN4ooOgroLpfoHM0i9WVoATOkz0cPP8DVBUxaiRFqAq+VqSR + NoPcAOqBAi0PChif5Lg3LeLeyJRKujQrKC9uFeEEZ8rTVFQWOCsv8OMVaOwW6TCDaQyGpvJYnDEW18J4 + Vjf+lyh++JsL8g0qZLuclojITmdRSEGnBP3tPHeKr7tvh8kXB2zuwU40SjwRIp2KI1y7NcUFtQtJ4yLl + dUFkNVHqzqeplwRwTsKzheLWmQzLfgjs5wgn4wR3XrIbWSAVW0D4rvURZ7SzSLQuzuq8KDTb6BpizD/N + 4VsPsvxqle2oSHBfJJTe5/XeCpGEm+TBHLmkFUF6/S6SjlFknRMoutzo9D6M19cJBGL8aRs/vCOJOP5M + Ar+4TlR0I+bsFMTHxZgRKnXdVGsHUGofoGmyYaybpafGw4zZR+YgSTy6j3fJy5u1ZWKBv8juPoHoCLno + EOz1Igyaf6OpsQtDm5mJu4sMVlmY7VwibAsRdAcITqwSsT4jNW0ns/wYvEMUXv8CwQ5S4YcIfr+f2+0G + luweVu2+oqCHTdsa4flNkk4/3t4xEiOjYC3C8wPklwzkvXrwtUHK8+9XGi/V011ZzYbVwda4h9BTF5HZ + l2z3PiRuNJIe7EIc0ZO36SjMFtvl+Yn4ytXSMjlu9WD56hzZkXESjjkyUzOE1LWk26pJ3ZRz8Gsxjy6S + GJcQc5tK4f+6/fxeH2MVnzMnPcmr8yfZrvmErYZPCbR+zGbHCXx3vsAx3HI0PDw8jMlkor9Zze9VUqbP + fckL+Slc9Z/hVJ9iUvsNN9Xf8vPVdgyG7lKJxWKhv78fvV5Pi6YZtVqFUnUZTcMltLW1qBqU1Deqi2lC + c6WZ9vZWbhgNh5J/AJcIo/TEh255AAAAAElFTkSuQmCC + + + + 29 + + + NoControl + + + $this + + + toolStripStatusAr + + + + + + + + + 70 + + + CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 181, 22 + + + + + + $this @@ -1441,178 +994,753 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAQAAwAMAAPAPAAA= - - CenterScreen + + 100, 19 - - CUERipper 2.0.7 + + buttonPause - - toolStripStatusLabel1 + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 25, 13 - - toolStripStatusLabelMusicBrainz - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripStatusCTDB - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripStatusAr - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl toolStripProgressBar1 - - System.Windows.Forms.ToolStripProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripStatusLabel2 + + 29, 13 - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + bnComboBoxOutputFormat - - Title + + CenterScreen - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - TrackNo - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Start - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Length - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - editToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - losslessOrNotBindingSource - - - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - bindingSourceCR - - - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - encodersBindingSource - - - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - formatsBindingSource - - - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - cUEStylesBindingSource + + 382, 421 System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - imageListChecked + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + progressBarCD - - toolStripMenuItem1 + + 6, 46 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Click to edit output path template - - plainBackgroundPainter1 + + groupBoxSettings - - ProgressODoom.PlainBackgroundPainter, ProgressODoom, Version=1.0.3732.11482, Culture=neutral, PublicKeyToken=null + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl + PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI + X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG + AAAAAgAAAAIAAAAL + - - styledBorderPainter1 + + 13 - - ProgressODoom.StyledBorderPainter, ProgressODoom, Version=1.0.3732.11482, Culture=neutral, PublicKeyToken=null - - - plainProgressPainter1 + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.3732.11482, Culture=neutral, PublicKeyToken=null + ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.3766.36510, Culture=neutral, PublicKeyToken=null - - gradientGlossPainter1 + + listTracks - - ProgressODoom.GradientGlossPainter, ProgressODoom, Version=1.0.3732.11482, Culture=neutral, PublicKeyToken=null + + 6, 19 - - plainProgressPainter2 + + lblWriteOffset - - ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.3732.11482, Culture=neutral, PublicKeyToken=null + + 6 - - toolTip1 + + 248, 98 - - System.Windows.Forms.ToolTip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl - - releasesBindingSource + + - - System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 23 - - imageListMetadataSource + + formatsBindingSource - - System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 80, 21 + + + Top, Left, Right + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl + PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI + X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG + AAAAAgAAAAIAAAAL + + + + Tahoma, 8.25pt + + + groupBoxSettings + + + groupBoxSettings + + + 11 drivesBindingSource - + + toolStripStatusCTDB + + + groupBoxSettings + + + NoControl + + + True + + + 12 + + + Edit + + + + + + 552, 21 + + + $this + + + groupBoxSettings + + + 320 + + + 34 + + + Title + + + ProgressODoom.PlainBackgroundPainter, ProgressODoom, Version=1.0.3766.36510, Culture=neutral, PublicKeyToken=null + + + 256 + + + bindingSourceCR + + + 382, 343 + + + NoControl + + + 80, 21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + labelEncoderMode + + + 10 + + + $this + + + Length + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + bnComboBoxDrives + + + Title + + + Album found in AccurateRip database. + + + 2 + + + CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null + + + 310, 15 + + + Top, Left, Right + + + 92, 19 + + + 245, 44 + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + contextMenuStripRelease + + + 54, 20 + + + groupBoxSettings + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + NoControl + + + plainProgressPainter1 + + + 4 + frmCUERipper - - System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + buttonGo + + 64, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl + PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI + X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG + AAAAAgAAAAIAAAAL + + + + trackBarEncoderMode + + + 553, 245 + + + 70 + + + ProgressODoom.GradientGlossPainter, ProgressODoom, Version=1.0.3766.36510, Culture=neutral, PublicKeyToken=null + + + 30 + + + Top, Left, Right + + + styledBorderPainter1 + + + Pause + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripStatusLabel2 + + + bnComboBoxFormat + + + 39 + + + + + + groupBoxSettings + + + groupBoxSettings + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 30 + + + 6, 332 + + + groupBoxSettings + + + $this + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 33 + + + 19 + + + groupBoxSettings + + + EAC log + + + groupBoxSettings + + + txtOutputPath + + + 12 + + + 5 + + + 5 + + + + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 32 + + + # + + + encodersBindingSource + + + toolStripMenuItem1 + + + 20, 20 + + + Read progress + + + bnComboBoxLosslessOrNot + + + 167, 15 + + + NoControl + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 8 + + + 37 + + + 31 + + + System.Windows.Forms.TrackBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 10 + + + Right-lick to edit release info + + + 9 + + + plainProgressPainter2 + + + + + + toolStripMenuItem1 + + + imageListChecked + + + White + + + + + + + + + 3 + + + False + + + 31 + + + 10% + + + statusStrip1 + + + ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.3766.36510, Culture=neutral, PublicKeyToken=null + + + numericWriteOffset + + + CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null + + + Abort + + + $this + + + 6, 60 + + + CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null + + + 12 + + + Start + + + + + + $this + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6 + + + 8 + + + 127, 45 + + + plainBackgroundPainter1 + + + progressBarErrors + + + 7 + + + + + + Go + + + 242, 19 + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Length + + + CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null + + + ProgressODoom.ProgressBarEx, ProgressODoom, Version=1.0.3766.36510, Culture=neutral, PublicKeyToken=null + + + + + + 552, 20 + + + 0, 0, 0, 0 + + + TopCenter + + + checkBoxEACMode + + + True + + + buttonAbort + + + $this + + + System.Windows.Forms.TrackBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 92, 46 + + + releasesBindingSource + + + False + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + trackBarSecureMode + + + + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 571, 481 + + + + + + statusStrip1 + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl + PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI + X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG + AAAAAgAAAAIAAAAL + + + + Start + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 143, 106 + + + toolTip1 + + + 370, 121 + + + groupBoxSettings + + + 12, 106 + + + 1 + + + 11 + + + 20, 20 + + + $this + + + + + + 552, 21 + + + 6, 6 + + + ProgressODoom.PlainProgressPainter, ProgressODoom, Version=1.0.3766.36510, Culture=neutral, PublicKeyToken=null + + + gradientGlossPainter1 + + + 383, 343 + + + bnComboBoxEncoder + + + 36 + + + 30 + + + System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 394, 20 + + + Tahoma, 8.25pt + + + 177, 33 + + + 6, 33 + + + 80, 21 + + + 7 + + + + + + 526, 56 + + + True + + + 708, 56 + + + 17, 17 + + + 356, 56 + + + 210, 56 + + + 960, 17 + + + 369, 95 + + + 17, 56 + + + 189, 95 + + + 789, 17 + + + 17, 95 + + + 0, 456 + + + 624, 17 + + + 998, 56 + + + 50 + + + 357, 17 + + + 454, 17 + + + 207, 17 + \ No newline at end of file diff --git a/CUERipper/frmCUERipper.ru-RU.resx b/CUERipper/frmCUERipper.ru-RU.resx index 7ae3baa..c500d6e 100644 --- a/CUERipper/frmCUERipper.ru-RU.resx +++ b/CUERipper/frmCUERipper.ru-RU.resx @@ -118,9 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Редактирование названий треков начинается двойным кликом мыши - Название @@ -130,6 +127,9 @@ Длина + + Редактирование названий треков начинается двойным кликом мыши + Поехали diff --git a/CUETools.ARCUE/Properties/AssemblyInfo.cs b/CUETools.ARCUE/Properties/AssemblyInfo.cs index 8d4ae5d..1f56ed1 100644 --- a/CUETools.ARCUE/Properties/AssemblyInfo.cs +++ b/CUETools.ARCUE/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.0.7.0")] -[assembly: AssemblyFileVersion("2.0.7.0")] +[assembly: AssemblyVersion("2.0.8.0")] +[assembly: AssemblyFileVersion("2.0.8.0")] diff --git a/CUETools.AccurateRip/AccurateRip.cs b/CUETools.AccurateRip/AccurateRip.cs index bf9931e..25f294a 100644 --- a/CUETools.AccurateRip/AccurateRip.cs +++ b/CUETools.AccurateRip/AccurateRip.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.IO; using System.Net; using System.Text; +using CUETools.Parity; using CUETools.CDImage; using CUETools.Codecs; @@ -18,9 +19,10 @@ namespace CUETools.AccurateRip _accDisks = new List(); //_crc32 = new Crc32(); _hasLogCRC = false; + _finalSampleCount = _toc.AudioLength * 588; _CRCLOG = new uint[_toc.AudioTracks + 1]; _CRCMASK = new uint[_toc.AudioTracks + 1]; - _CRCMASK[0] = 0xffffffff ^ Crc32.Combine(0xffffffff, 0, (int)_toc.AudioLength * 588 * 4); + _CRCMASK[0] = 0xffffffff ^ Crc32.Combine(0xffffffff, 0, (int)_finalSampleCount * 4); for (int iTrack = 1; iTrack <= _toc.AudioTracks; iTrack++) _CRCMASK[iTrack] = 0xffffffff ^ Crc32.Combine(0xffffffff, 0, (int)_toc[iTrack + _toc.FirstAudio - 1].Length * 588 * 4); Init(); @@ -316,30 +318,53 @@ namespace CUETools.AccurateRip _CRCLOG[iTrack] = value; } - private ushort[,] syndrome = new ushort[1,1]; - private byte[] parity = new byte[1]; - private ushort[] expTbl = new ushort[1]; - private ushort[] logTbl = new ushort[1]; - private int stride = 1, stridecount, npar; + internal ushort[,] syndrome; + internal byte[] parity; + internal ushort[] leadin; + internal ushort[] leadout; + private int stride = 1, laststride = 1, stridecount = 1, npar = 1; private bool calcSyn = false; private bool calcParity = false; - public void CalcSyndrome(ushort[] expTbl, ushort[] logTbl, ushort[,] syndrome, byte[] parity, int stride, int stridecount, int npar, bool calcParity, bool calcSyn) + internal void InitCDRepair(int stride, int laststride, int stridecount, int npar, bool calcSyn, bool calcParity) { if (npar != 8) - throw new NotSupportedException(); - this.syndrome = syndrome; - this.parity = parity; - this.logTbl = logTbl; - this.expTbl = expTbl; + throw new NotSupportedException("npar != 8"); this.stride = stride; + this.laststride = laststride; this.stridecount = stridecount; this.npar = npar; this.calcSyn = calcSyn; this.calcParity = calcParity; + Init(); } - private unsafe static void CalcSyn8(ushort* exp, ushort* log, ushort* syn, uint lo, uint n) + internal unsafe uint CTDBCRC(int actualOffset) + { + fixed (uint* crct = Crc32.table) + { + // calculate leadin CRC + uint crc0 = 0; + for (int off = 0; off < stride - 2 * actualOffset; off++) + { + ushort dd = leadin[off]; + crc0 = (crc0 >> 8) ^ crct[(byte)(crc0 ^ dd)]; + crc0 = (crc0 >> 8) ^ crct[(byte)(crc0 ^ (dd >> 8))]; + } + // calculate leadout CRC + uint crc2 = 0; + for (int off = laststride + 2 * actualOffset - 1; off >= 0; off--) + { + ushort dd = leadout[off]; + crc2 = (crc2 >> 8) ^ crct[(byte)(crc2 ^ dd)]; + crc2 = (crc2 >> 8) ^ crct[(byte)(crc2 ^ (dd >> 8))]; + } + + return GetCRC32(crc0, (stride - 2 * actualOffset) * 2, crc2, (laststride + 2 * actualOffset) * 2); + } + } + + private unsafe static void CalcSyn8(ushort* exp, ushort* log, ushort* syn, uint lo, uint n, int npar) { syn[0] ^= (ushort)lo; uint idx = log[lo] + n; syn[1] ^= exp[(idx & 0xffff) + (idx >> 16)]; @@ -349,6 +374,17 @@ namespace CUETools.AccurateRip idx += n; syn[5] ^= exp[(idx & 0xffff) + (idx >> 16)]; idx += n; syn[6] ^= exp[(idx & 0xffff) + (idx >> 16)]; idx += n; syn[7] ^= exp[(idx & 0xffff) + (idx >> 16)]; + //for (int i = 8; i < npar; i += 8) + //{ + // idx += n; syn[i] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[i + 1] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[i + 2] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[i + 3] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[i + 4] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[i + 5] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[i + 6] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[i + 7] ^= exp[(idx & 0xffff) + (idx >> 16)]; + //} } #if alternateSynCalc @@ -452,7 +488,7 @@ namespace CUETools.AccurateRip int pk = ((int)(lo << 16)) >> 16; peak = Math.Max(peak, (pk << 1) ^ (pk >> 31)); - if (doSyn && lo != 0) CalcSyn8(exp, log, syn + i * 16, lo, n); + if (doSyn && lo != 0) CalcSyn8(exp, log, syn + i * 16, lo, n, npar); if (doPar) CalcPar8(exp, log, wr + i * 16, lo); uint hi = sample >> 16; @@ -468,7 +504,7 @@ namespace CUETools.AccurateRip pk = ((int)(hi << 16)) >> 16; peak = Math.Max(peak, (pk << 1) ^ (pk >> 31)); - if (doSyn && hi != 0) CalcSyn8(exp, log, syn + i * 16 + 8, hi, n); + if (doSyn && hi != 0) CalcSyn8(exp, log, syn + i * 16 + 8, hi, n, npar); if (doPar) CalcPar8(exp, log, wr + i * 16 + 8, hi); } @@ -513,7 +549,7 @@ namespace CUETools.AccurateRip int pos = 0; fixed (uint* t = Crc32.table) - fixed (ushort* exp = expTbl, log = logTbl, synptr1 = syndrome) + fixed (ushort* exp = Galois16.instance.ExpTbl, log = Galois16.instance.LogTbl, synptr1 = syndrome) fixed (byte* pSampleBuff = &sampleBuffer.Bytes[0], bpar = parity) while (pos < sampleBuffer.Length) { @@ -527,6 +563,19 @@ namespace CUETools.AccurateRip int currentPart = ((int)_sampleCount * 2) % stride; ushort* synptr = synptr1 + npar * currentPart; ushort* wr = ((ushort*)bpar) + npar * currentPart; + int currentStride = ((int)_sampleCount * 2) / stride; + + if (currentStride < 2 && leadin != null) + for (int i = 0; i < copyCount * 2; i++) + leadin[_sampleCount * 2 + i] = ((ushort*)samples)[i]; + + if (currentStride >= stridecount && leadout != null) + for (int i = 0; i < copyCount * 2; i++) + { + int remaining = (int)(_finalSampleCount - _sampleCount) * 2 - i - 1; + if (remaining < stride + laststride) + leadout[remaining] = ((ushort*)samples)[i]; + } if (currentSector < 10) CalculateCRCs(t, exp, log, synptr, wr, samples, copyCount, currentOffset, currentOffset); @@ -609,6 +658,18 @@ namespace CUETools.AccurateRip _CacheCRCWN = new uint[_toc.AudioTracks + 1, 31 * 588]; _CRCNL = new int[_toc.AudioTracks + 1, 31 * 588]; _Peak = new int[_toc.AudioTracks + 1]; + syndrome = new ushort[calcSyn ? stride : 1, npar]; + parity = new byte[stride * npar * 2]; + if (calcSyn || calcParity) + { + leadin = new ushort[stride * 2]; + leadout = new ushort[stride + laststride]; + } + else + { + leadin = null; + leadout = null; + } _currentTrack = 0; Position = _toc[_toc.FirstAudio][0].Start * 588; } @@ -741,11 +802,14 @@ namespace CUETools.AccurateRip public long FinalSampleCount { + get + { + return _finalSampleCount; + } set { - if (value < 0) // != _toc.Length? + if (value != _finalSampleCount) throw new Exception("invalid FinalSampleCount"); - _finalSampleCount = value; } } diff --git a/CUETools.AccurateRip/CDRepair.cs b/CUETools.AccurateRip/CDRepair.cs new file mode 100644 index 0000000..079fb97 --- /dev/null +++ b/CUETools.AccurateRip/CDRepair.cs @@ -0,0 +1,642 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using CUETools.CDImage; +using CUETools.Codecs; +using CUETools.Parity; +using CUETools.AccurateRip; + +namespace CUETools.AccurateRip +{ + public class CDRepair + { + protected int sampleCount; + protected int finalSampleCount; + internal Galois galois; + protected RsDecode rs; + //protected uint crc; + protected int[] encodeGx; + internal int stride; + internal int laststride; + internal int stridecount; + internal int npar; + + public CDRepair(int finalSampleCount, int stride, int npar) + { + this.npar = npar; + this.stride = stride; + this.finalSampleCount = finalSampleCount; + sampleCount = 0; + galois = Galois16.instance; + rs = new RsDecode16(npar, galois); + //crc32 = new Crc32(); + //crc = 0xffffffff; + encodeGx = galois.makeEncodeGxLog(npar); + laststride = stride + (finalSampleCount * 2) % stride; + stridecount = (finalSampleCount * 2) / stride - 2; // minus one for leadin and one for leadout + if ((finalSampleCount * 2 + stride - 1) / stride + npar > galois.Max) + throw new Exception("invalid stride"); + } + + public CDRepair(CDRepair src) + : this(src.finalSampleCount, src.stride, src.npar) + { + } + + //public unsafe void Write(AudioBuffer sampleBuffer) + //{ + // throw new Exception("unsupported"); + //} + + //public unsafe void Close() + //{ + // if (sampleCount != finalSampleCount) + // throw new Exception("sampleCount != finalSampleCount"); + //} + + public long FinalSampleCount + { + set + { + if (value < 0) // != _toc.Length? + throw new Exception("invalid FinalSampleCount"); + finalSampleCount = (int)value; + } + } + + public int NPAR + { + get + { + return npar; + } + } + } + + public class CDRepairEncode : CDRepair + { + internal bool verify; + internal bool encode; + protected AccurateRipVerify ar; + + public CDRepairEncode(AccurateRipVerify ar, int stride, int npar, bool verify, bool encode) + : base ((int)ar.FinalSampleCount, stride, npar) + { + this.ar = ar; + this.verify = verify; + this.encode = encode; + + ar.InitCDRepair(stride, laststride, stridecount, npar, verify, encode); + } + + //private unsafe void ProcessStride(int currentStride, int currentPart, int count, ushort* data) + //{ + // fixed (uint* crct = Crc32.table) + // fixed (byte* bpar = parity) + // fixed (ushort* exp = galois.ExpTbl, log = galois.LogTbl, synptr = syndrome) + // fixed (int* gx = encodeGx) + // for (int pos = 0; pos < count; pos++) + // { + // ushort* par = (ushort*)bpar; + // int part = currentPart + pos; + // ushort* wr = ((ushort*)par) + part * npar; + // ushort dd = data[pos]; + + // //crc = (crc >> 8) ^ crct[(byte)(crc ^ dd)]; + // //crc = (crc >> 8) ^ crct[(byte)(crc ^ (dd >> 8))]; + + // if (verify) + // { + // ushort* syn = synptr + part * npar; + // syn[0] ^= dd; // wk += data + // for (int i = 1; i < npar; i++) + // syn[i] = (ushort)(dd ^ galois.mulExp(syn[i], i)); // wk = data + wk * α^i + // } + + // int ib = wr[0] ^ dd; + // if (ib != 0) + // { + // ushort* myexp = exp + log[ib]; + // for (int i = 0; i < npar - 1; i++) + // wr[i] = (ushort)(wr[i + 1] ^ myexp[gx[i]]); + // wr[npar - 1] = myexp[gx[npar - 1]]; + // } + // else + // { + // for (int i = 0; i < npar - 1; i++) + // wr[i] = wr[i + 1]; + // wr[npar - 1] = 0; + // } + // } + //} + + //private unsafe void ProcessStride16(int currentStride, int currentPart, int count, ushort* data) + //{ + // fixed (uint* crct = Crc32.table) + // fixed (byte* bpar = parity) + // fixed (ushort* exp = galois.ExpTbl, log = galois.LogTbl, synptr = syndrome) + // for (int pos = 0; pos < count; pos++) + // { + // ushort* par = (ushort*)bpar; + // int part = currentPart + pos; + // ushort* wr = par + part * 16; + // ushort dd = data[pos]; + + // //crc = (crc >> 8) ^ crct[(byte)(crc ^ dd)]; + // //crc = (crc >> 8) ^ crct[(byte)(crc ^ (dd >> 8))]; + + // int ib = wr[0] ^ dd; + // if (ib != 0) + // { + // ushort* myexp = exp + log[ib]; + // wr[0] = (ushort)(wr[1] ^ myexp[0x000059f1]); + // wr[1] = (ushort)(wr[2] ^ myexp[0x0000608f]); + // wr[2] = (ushort)(wr[3] ^ myexp[0x0000918b]); + // wr[3] = (ushort)(wr[4] ^ myexp[0x00004487]); + // wr[4] = (ushort)(wr[5] ^ myexp[0x0000a151]); + // wr[5] = (ushort)(wr[6] ^ myexp[0x0000c074]); + // wr[6] = (ushort)(wr[7] ^ myexp[0x00004178]); + // wr[7] = (ushort)(wr[8] ^ myexp[0x00004730]); + // wr[8] = (ushort)(wr[9] ^ myexp[0x00004187]); + // wr[9] = (ushort)(wr[10] ^ myexp[0x0000c092]); + // wr[10] = (ushort)(wr[11] ^ myexp[0x0000a17e]); + // wr[11] = (ushort)(wr[12] ^ myexp[0x000044c3]); + // wr[12] = (ushort)(wr[13] ^ myexp[0x000091d6]); + // wr[13] = (ushort)(wr[14] ^ myexp[0x000060e9]); + // wr[14] = (ushort)(wr[15] ^ myexp[0x00005a5a]); + // wr[15] = myexp[0x00000078]; + // } + // else + // { + // wr[0] = wr[1]; + // wr[1] = wr[2]; + // wr[2] = wr[3]; + // wr[3] = wr[4]; + // wr[4] = wr[5]; + // wr[5] = wr[6]; + // wr[6] = wr[7]; + // wr[7] = wr[8]; + // wr[8] = wr[9]; + // wr[9] = wr[10]; + // wr[10] = wr[11]; + // wr[11] = wr[12]; + // wr[12] = wr[13]; + // wr[13] = wr[14]; + // wr[14] = wr[15]; + // wr[15] = 0; + // } + + // // syn[i] += data[pos] * α^(n*i) + // if (verify && dd != 0) + // { + // int n = stridecount - currentStride; + // ushort* syn = synptr + part * 16; + // syn[0] ^= dd; + // int idx = log[dd]; + // idx += n; syn[1] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[2] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[3] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[4] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[5] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[6] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[7] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[8] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[9] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[10] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[11] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[12] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[13] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[14] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // idx += n; syn[15] ^= exp[(idx & 0xffff) + (idx >> 16)]; + // } + // } + //} + + //new public unsafe void Write(AudioBuffer sampleBuffer) + //{ + // if (!verify && !encode) + // return; + + // sampleBuffer.Prepare(this); + + // if ((sampleBuffer.ByteLength & 1) != 0 || sampleCount + sampleBuffer.Length > finalSampleCount) + // throw new Exception("sampleCount > finalSampleCount"); + + // fixed (byte* bytes = sampleBuffer.Bytes) + // { + // int offs = 0; + // while (offs < sampleBuffer.Length) + // { + // int currentPart = (sampleCount * 2) % stride; + // int currentStride = (sampleCount * 2) / stride; + // // Process no more than there is in the buffer, and no more than up to a stride boundary. + // int copyCount = Math.Min((sampleBuffer.Length - offs) * 2, stride - currentPart); + // ushort* data = ((ushort*)bytes) + offs * 2; + + // if (currentStride < 2) + // for (int pos = 0; pos < copyCount; pos++) + // leadin[sampleCount * 2 + pos] = data[pos]; + + // if (currentStride >= stridecount) + // for (int pos = 0; pos < copyCount; pos++) + // { + // int remaining = (finalSampleCount - sampleCount) * 2 - pos - 1; + // if (remaining < stride + laststride) + // leadout[remaining] = data[pos]; + // } + + // if (currentStride >= 1 && currentStride <= stridecount) + // { + // if (npar == 16) + // ProcessStride16(currentStride, currentPart, copyCount, data); + // else if (npar != 8) + // ProcessStride(currentStride, currentPart, copyCount, data); + // } + + // sampleCount += copyCount >> 1; + // offs += copyCount >> 1; + // } + // } + //} + + public unsafe CDRepairFix VerifyParity(byte[] parity2, int actualOffset) + { + return VerifyParity(npar, parity2, 0, parity2.Length, actualOffset); + } + + public uint CRC + { + get + { + return ar.CTDBCRC(0); + } + } + + public unsafe bool FindOffset(int npar2, byte[] parity2, int pos, uint expectedCRC, out int actualOffset, out bool hasErrors) + { + if (npar2 != npar) + throw new Exception("npar mismatch"); + if (!verify) + throw new Exception("verify was not enabled"); + if (ar.Position != ar.FinalSampleCount) + throw new Exception("ar.Position != ar.FinalSampleCount"); + + // find offset + fixed (byte* par2ptr = &parity2[pos]) + { + ushort* par2 = (ushort*)par2ptr; + int* _sigma = stackalloc int[npar]; + int* _errpos = stackalloc int[npar]; + int* syn = stackalloc int[npar]; + bool foundOffset = false; + + for (int allowed_errors = 0; allowed_errors < npar / 2 && !foundOffset; allowed_errors++) + { + int part2 = 0; + ushort* wr = par2 + part2 * npar; + + // We can only use offset if Abs(offset * 2) < stride, + // else we might need to add/remove more than one sample + // from syndrome calculations, and that would be too difficult + // and will probably require longer leadin/leadout. + for (int offset = 1 - stride / 2; offset < stride / 2; offset++) + { + int err = 0; + int part = (part2 + stride - offset * 2) % stride; + + for (int i = 0; i < npar; i++) + { + int synI = ar.syndrome[part, i]; + + // offset < 0 + if (part < -offset * 2) + { + synI ^= galois.mulExp(ar.leadin[stride + part], (i * (stridecount - 1)) % galois.Max); + synI = ar.leadout[laststride - part - 1] ^ galois.mulExp(synI, i); + } + // offset > 0 + if (part >= stride - offset * 2) + { + synI = galois.divExp(synI ^ ar.leadout[laststride + stride - part - 1], i); + synI ^= galois.mulExp(ar.leadin[part], (i * (stridecount - 1)) % galois.Max); + } + + for (int j = 0; j < npar; j++) + synI = wr[j] ^ galois.mulExp(synI, i); + + syn[i] = synI; + err |= synI; + } + int err_count = err == 0 ? 0 : rs.calcSigmaMBM(_sigma, syn); + if (err_count == allowed_errors && (err_count == 0 || rs.chienSearch(_errpos, stridecount + npar, err_count, _sigma))) + { + actualOffset = offset; + hasErrors = err_count != 0 || ar.CTDBCRC(offset) != expectedCRC; + return true; + } + } + } + } + actualOffset = 0; + hasErrors = true; + return false; + } + + public unsafe CDRepairFix VerifyParity(int npar2, byte[] parity2, int pos, int len, int actualOffset) + { + if (len != stride * npar * 2) + throw new Exception("wrong size"); + + CDRepairFix fix = new CDRepairFix(this); + fix.actualOffset = actualOffset; + fix.correctableErrors = 0; + fix.hasErrors = false; + fix.canRecover = true; + + fix.sigma = new int[stride, npar / 2 + 2]; + fix.omega = new int[stride, npar / 2 + 1]; + fix.errpos = new int[stride, npar / 2]; + //fix.erroff = new int[stride, npar / 2]; + fix.errors = new int[stride]; + + fixed (byte* par = &parity2[pos]) + fixed (ushort* exp = galois.ExpTbl, log = galois.LogTbl) + { + int* syn = stackalloc int[npar]; + int offset = fix.actualOffset; + + for (int part = 0; part < stride; part++) + { + int part2 = (part + offset * 2 + stride) % stride; + ushort* wr = (ushort*)par + part2 * npar; + int err = 0; + + for (int i = 0; i < npar; i++) + { + syn[i] = ar.syndrome[part, i]; + + // offset < 0 + if (part < -offset * 2) + { + syn[i] ^= galois.mulExp(ar.leadin[stride + part], (i * (stridecount - 1)) % galois.Max); + syn[i] = ar.leadout[laststride - part - 1] ^ galois.mulExp(syn[i], i); + } + // offset > 0 + if (part >= stride - offset * 2) + { + syn[i] = galois.divExp(syn[i] ^ ar.leadout[laststride + stride - part - 1], i); + syn[i] ^= galois.mulExp(ar.leadin[part], (i * (stridecount - 1)) % galois.Max); + } + + //syn[i] = galois.mulExp(syn[i], i * npar); + + for (int j = 0; j < npar; j++) + syn[i] = wr[j] ^ galois.mulExp(syn[i], i); // wk = data + wk * α^i + + err |= syn[i]; + } + + //for (int j = 0; j < npar; j++) + // if (wr[j] != 0) + // { + // ushort* myexp = exp + log[wr[j]]; + // syn[0] ^= wr[j]; + // for (int i = 1; i < npar; i++) + // syn[i] ^= myexp[(npar - j - 1) * i]; + // } + + //for (int i = 0; i < npar; i++) + // err |= syn[i]; + + if (err != 0) + { + fixed (int* s = &fix.sigma[part, 0], o = &fix.omega[part, 0], e = &fix.errpos[part, 0]) + { + fix.errors[part] = rs.calcSigmaMBM(s, syn); + fix.hasErrors = true; + fix.correctableErrors += fix.errors[part]; + if (fix.errors[part] <= 0 || !rs.chienSearch(e, stridecount + npar, fix.errors[part], s)) + fix.canRecover = false; + else + galois.mulPoly(o, s, syn, npar / 2 + 1, npar, npar); + } + } + else + fix.errors[part] = 0; + } + } + + return fix; + } + + public byte[] Parity + { + get + { + return ar.parity; + } + } + } + + public class CDRepairFix : CDRepair, IAudioDest + { + internal bool hasErrors = false, canRecover = true; + internal int actualOffset = 0; + internal int correctableErrors = 0; + internal int[,] sigma; + internal int[,] omega; + internal int[,] errpos; + internal int[] erroffsorted; + internal ushort[] forneysorted; + internal int erroffcount; + internal int[] errors; + private BitArray affectedSectorArray; + private int nexterroff; + uint crc = 0; + + internal CDRepairFix(CDRepairEncode decode) + : base(decode) + { + } + + public string AffectedSectors + { + get + { + StringBuilder sb = new StringBuilder(); + SortErrors(); + for (int i = 0; i < erroffcount; i++) + { + int j; + for (j = i + 1; j < erroffcount; j++) + if (erroffsorted[j] - erroffsorted[j - 1] > 2 * 588 * 5) + break; + uint sec1 = (uint)erroffsorted[i] / 2 / 588; + uint sec2 = (uint)erroffsorted[j - 1] / 2 / 588; + if (sb.Length != 0) sb.Append(","); + sb.Append(CDImageLayout.TimeToString(sec1)); + if (sec1 != sec2) sb.Append("-"); + if (sec1 != sec2) sb.Append(CDImageLayout.TimeToString(sec2)); + i = j - 1; + } + return sb.ToString(); + } + } + + public BitArray AffectedSectorArray + { + get + { + if (affectedSectorArray == null) + { + affectedSectorArray = new BitArray(finalSampleCount / 588 + 1); + SortErrors(); + for (int i = 0; i < erroffcount; i++) + affectedSectorArray[erroffsorted[i] / 2 / 588] = true; + } + return affectedSectorArray; + } + } + + private int GetErrOff(int part, int i) + { + return (2 + galois.toPos(stridecount + npar, errpos[part, i]) - (stride + part + ActualOffset * 2) / stride) * stride + part; + } + + private unsafe void SortErrors() + { + if (erroffsorted != null) + return; + erroffcount = 0; + erroffsorted = new int[errpos.GetLength(0) * errpos.GetLength(1)]; + forneysorted = new ushort[errpos.GetLength(0) * errpos.GetLength(1)]; + for (int part = 0; part < stride; part++) + { + fixed (int* s = &sigma[part, 0], o = &omega[part, 0]) + for (int i = 0; i < errors[part]; i++) + { + erroffsorted[erroffcount] = GetErrOff(part, i); + if (erroffsorted[erroffcount] >= 0 && erroffsorted[erroffcount] < finalSampleCount * 2) + { + forneysorted[erroffcount] = (ushort)rs.doForney(errors[part], errpos[part, i], s, o); + erroffcount++; + } + } + } + Array.Sort(erroffsorted, forneysorted, 0, erroffcount); + // assert erroffcount == CorrectableErrors + nexterroff = 0; + } + + public unsafe void Write(AudioBuffer sampleBuffer) + { + sampleBuffer.Prepare(this); + + if ((sampleBuffer.ByteLength & 1) != 0) + throw new Exception("never happens"); + + int firstPos = Math.Max(0, stride - sampleCount * 2 - ActualOffset * 2); + int lastPos = Math.Min(sampleBuffer.ByteLength >> 1, (finalSampleCount - sampleCount) * 2 - laststride - ActualOffset * 2); + + SortErrors(); + + fixed (byte* bytes = sampleBuffer.Bytes) + fixed (uint* t = Crc32.table) + { + ushort* data = (ushort*)bytes; + for (int pos = firstPos; pos < lastPos; pos++) + { + if (sampleCount * 2 + pos == erroffsorted[nexterroff] && nexterroff < erroffsorted.Length) + data[pos] ^= forneysorted[nexterroff++]; + + ushort dd = data[pos]; + crc = (crc >> 8) ^ t[(byte)(crc ^ dd)]; + crc = (crc >> 8) ^ t[(byte)(crc ^ (dd >> 8))]; + } + } + sampleCount += sampleBuffer.Length; + } + + public unsafe void Close() + { + if (sampleCount != finalSampleCount) + throw new Exception("sampleCount != finalSampleCount"); + } + + public bool HasErrors + { + get + { + return hasErrors; + } + } + + public bool CanRecover + { + get + { + return canRecover; + } + } + + public int CorrectableErrors + { + get + { + return correctableErrors; + } + } + + public int ActualOffset + { + get + { + return actualOffset; + } + } + + public uint CRC + { + get + { + return 0xffffffff ^ Crc32.Combine(0xffffffff, crc, stride * stridecount * 2); + } + } + + public void Delete() + { + throw new Exception("unsupported"); + } + + public int CompressionLevel + { + get { return 0; } + set { } + } + + public string Options + { + set + { + if (value == null || value == "") return; + throw new Exception("Unsupported options " + value); + } + } + + public AudioPCMConfig PCM + { + get { return AudioPCMConfig.RedBook; } + } + + public long BlockSize + { + set { throw new Exception("unsupported"); } + } + + public string Path + { + get { throw new Exception("unsupported"); } + } + } +} diff --git a/CUETools.AccurateRip/CUETools.AccurateRip.csproj b/CUETools.AccurateRip/CUETools.AccurateRip.csproj index 3e7f423..f925b74 100644 --- a/CUETools.AccurateRip/CUETools.AccurateRip.csproj +++ b/CUETools.AccurateRip/CUETools.AccurateRip.csproj @@ -44,6 +44,7 @@ + @@ -55,6 +56,10 @@ {1DD41038-D885-46C5-8DDE-E0B82F066584} CUETools.CDImage + + {ECEB839C-171B-4535-958F-9899310A0342} + CUETools.Parity +