diff --git a/CUERipper/Options.cs b/CUERipper/Options.cs index 54b70b1..5872d8b 100644 --- a/CUERipper/Options.cs +++ b/CUERipper/Options.cs @@ -78,5 +78,8 @@ namespace CUERipper [DefaultValue(CUETools.Processor.CUEConfigAdvanced.CTDBCoversSearch.Small), Category("CTDB"), DisplayName("Album art search")] public CUETools.Processor.CUEConfigAdvanced.CTDBCoversSearch coversSearch { get { return config.advanced.coversSearch; } set { config.advanced.coversSearch = value; } } + + [DefaultValue(false), Category("CTDB"), DisplayName("Detailed log")] + public bool DetailedCTDBLog { get { return config.advanced.DetailedCTDBLog; } set { config.advanced.DetailedCTDBLog = value; } } } } diff --git a/CUERipper/frmCUERipper.resx b/CUERipper/frmCUERipper.resx index e87deca..5ea89c7 100644 --- a/CUERipper/frmCUERipper.resx +++ b/CUERipper/frmCUERipper.resx @@ -780,7 +780,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy - CQAAAk1TRnQBSQFMAgEBBAEAAYwBAQGMAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CQAAAk1TRnQBSQFMAgEBBAEAAZQBAQGUAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -930,7 +930,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADy - EAAAAk1TRnQBSQFMAgEBCgEAAYwBAQGMAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + EAAAAk1TRnQBSQFMAgEBCgEAAZQBAQGUAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/CUETools.Codecs/WAVReader.cs b/CUETools.Codecs/WAVReader.cs index 1231e08..903e947 100644 --- a/CUETools.Codecs/WAVReader.cs +++ b/CUETools.Codecs/WAVReader.cs @@ -24,13 +24,32 @@ namespace CUETools.Codecs { long seekPos; + if (_samplePos == value) + { + return; + } + + var oldSamplePos = _samplePos; if (_sampleLen >= 0 && value > _sampleLen) _samplePos = _sampleLen; else _samplePos = value; - seekPos = _dataOffset + _samplePos * PCM.BlockAlign; - _IO.Seek(seekPos, SeekOrigin.Begin); + if (_IO.CanSeek || _samplePos < oldSamplePos) + { + seekPos = _dataOffset + _samplePos * PCM.BlockAlign; + _IO.Seek(seekPos, SeekOrigin.Begin); + } + else + { + int offs = (int)(_samplePos - oldSamplePos) * PCM.BlockAlign; + while (offs > 0) + { + int chunk = Math.Min(offs, 16536); + _br.ReadBytes(chunk); + offs -= chunk; + } + } } } diff --git a/CUETools.Processor/CUEConfig.cs b/CUETools.Processor/CUEConfig.cs index d63b37a..4010b28 100644 --- a/CUETools.Processor/CUEConfig.cs +++ b/CUETools.Processor/CUEConfig.cs @@ -91,7 +91,7 @@ namespace CUETools.Processor encodeWhenZeroOffset = false; fixOffset = false; noUnverifiedOutput = false; - writeArTagsOnEncode = true; + writeArTagsOnEncode = false; writeArLogOnConvert = true; writeArTagsOnVerify = false; writeArLogOnVerify = false; @@ -402,7 +402,7 @@ return processor.Go(); encodeWhenZeroOffset = sr.LoadBoolean("ArEncodeWhenZeroOffset") ?? false; noUnverifiedOutput = sr.LoadBoolean("ArNoUnverifiedOutput") ?? false; fixOffset = sr.LoadBoolean("ArFixOffset") ?? false; - writeArTagsOnEncode = sr.LoadBoolean("ArWriteCRC") ?? true; + writeArTagsOnEncode = sr.LoadBoolean("ArWriteCRC") ?? writeArTagsOnEncode; writeArLogOnConvert = sr.LoadBoolean("ArWriteLog") ?? true; writeArTagsOnVerify = sr.LoadBoolean("ArWriteTagsOnVerify") ?? false; writeArLogOnVerify = sr.LoadBoolean("ArWriteLogOnVerify") ?? false; diff --git a/CUETools.Processor/CUEConfigAdvanced.cs b/CUETools.Processor/CUEConfigAdvanced.cs index 77d337d..86c2141 100644 --- a/CUETools.Processor/CUEConfigAdvanced.cs +++ b/CUETools.Processor/CUEConfigAdvanced.cs @@ -84,5 +84,8 @@ namespace CUETools.Processor [DefaultValue(false), Category("CTDB"), DisplayName("Detailed log")] public bool DetailedCTDBLog { get; set; } + + [DefaultValue(false), Category("Tagging"), DisplayName("Use id3v2.4 instead of id3v2.3")] + public bool UseId3v24 { get; set; } } } diff --git a/CUETools.Processor/CUEMetadata.cs b/CUETools.Processor/CUEMetadata.cs index 35de74e..da3dd6e 100644 --- a/CUETools.Processor/CUEMetadata.cs +++ b/CUETools.Processor/CUEMetadata.cs @@ -313,7 +313,7 @@ namespace CUETools.Processor this.Tracks[i].Comment = cdEntry.track[i + firstAudio].extra ?? ""; } } - } + } private static string FreedbToEncoding(Encoding iso, Encoding def, ref bool changed, ref bool error, string s) { diff --git a/CUETools.Processor/CUESheet.cs b/CUETools.Processor/CUESheet.cs index c21a6bd..cafed96 100644 --- a/CUETools.Processor/CUESheet.cs +++ b/CUETools.Processor/CUESheet.cs @@ -2508,6 +2508,8 @@ namespace CUETools.Processor if (!_isCD) throw new Exception("Not a cd"); + _ripper.DetectGaps(); + _arTestVerify = new AccurateRipVerify(_toc, proxy); var buff = new AudioBuffer(AudioPCMConfig.RedBook, 0x10000); while (_ripper.Read(buff, -1) != 0) @@ -3902,7 +3904,17 @@ namespace CUETools.Processor } if (sourceInfo.Offset != 0) - audioSource.Position = sourceInfo.Offset; + { + try + { + audioSource.Position = sourceInfo.Offset; + } + catch(Exception ex) + { + audioSource.Close(); + throw ex; + } + } //if (!(audioSource is AudioPipe) && !(audioSource is UserDefinedReader) && _config.separateDecodingThread) if (!(audioSource is AudioPipe) && pipe) diff --git a/CUETools.Processor/General.cs b/CUETools.Processor/General.cs index a010519..7f4fd9c 100644 --- a/CUETools.Processor/General.cs +++ b/CUETools.Processor/General.cs @@ -99,6 +99,10 @@ namespace CUETools.Processor return; } + value = value.Replace('\n', ' ').Replace('\r', ' ').Replace('"', '\''); + if (value.Length > 1024) + value = value.Substring(0, 1021) + "..."; + CUELine line = General.FindCUELine(list, command, command2); if (line == null) { diff --git a/CUETools.Processor/Tagging.cs b/CUETools.Processor/Tagging.cs index 567cbdb..1352934 100644 --- a/CUETools.Processor/Tagging.cs +++ b/CUETools.Processor/Tagging.cs @@ -30,6 +30,7 @@ namespace CUETools.Processor if (fileInfo is TagLib.Mpeg.AudioFile || (fileInfo is TagLib.UserDefined.File && (fileInfo as TagLib.UserDefined.File).Tagger == CUEToolsTagger.ID3v2)) { var id3v2 = (TagLib.Id3v2.Tag)fileInfo.GetTag(TagLib.TagTypes.Id3v2, true); + id3v2.Version = (byte) (config.advanced.UseId3v24 ? 4 : 3); foreach (string tag in tags.AllKeys) { var frame = TagLib.Id3v2.UserTextInformationFrame.Get(id3v2, tag, true); diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index ec9bc8f..84b1493 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -1958,7 +1958,9 @@ namespace JDP { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { - if (((e.KeyState & 8) != 0 && FileBrowserState == FileBrowserStateEnum.DragDrop) || FileBrowserState == FileBrowserStateEnum.Checkboxes) + if ((e.KeyState & 40) == 40 && FileBrowserState == FileBrowserStateEnum.DragDrop) + e.Effect = DragDropEffects.Link; + else if (((e.KeyState & 8) != 0 && FileBrowserState == FileBrowserStateEnum.DragDrop) || FileBrowserState == FileBrowserStateEnum.Checkboxes) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.Move; @@ -1995,6 +1997,13 @@ namespace JDP case FileBrowserStateEnum.DragDrop: if (e.Effect == DragDropEffects.Move) fileSystemTreeView1.Nodes.Clear(); + if (e.Effect == DragDropEffects.Link) + { + var lst = new List(); + for (var i = 0; i < 1024; i++) + lst.AddRange(folders); + folders = lst.ToArray(); + } foreach (string folder in folders) { TreeNode node = Directory.Exists(folder) diff --git a/MAC_SDK/Source/MACLib/Assembly/Assembly.obj b/MAC_SDK/Source/MACLib/Assembly/Assembly.obj index f0e717f..b91c40c 100644 Binary files a/MAC_SDK/Source/MACLib/Assembly/Assembly.obj and b/MAC_SDK/Source/MACLib/Assembly/Assembly.obj differ diff --git a/MAC_SDK/Source/MACLib/Assembly/Assembly64.obj b/MAC_SDK/Source/MACLib/Assembly/Assembly64.obj index 34856b3..beb7efc 100644 Binary files a/MAC_SDK/Source/MACLib/Assembly/Assembly64.obj and b/MAC_SDK/Source/MACLib/Assembly/Assembly64.obj differ diff --git a/flac/src/libFLAC/ia32/bitreader_asm.obj b/flac/src/libFLAC/ia32/bitreader_asm.obj index 8a56e40..0eb764a 100644 Binary files a/flac/src/libFLAC/ia32/bitreader_asm.obj and b/flac/src/libFLAC/ia32/bitreader_asm.obj differ diff --git a/flac/src/libFLAC/ia32/cpu_asm.obj b/flac/src/libFLAC/ia32/cpu_asm.obj index 27aa3ad..a8c8647 100644 Binary files a/flac/src/libFLAC/ia32/cpu_asm.obj and b/flac/src/libFLAC/ia32/cpu_asm.obj differ diff --git a/flac/src/libFLAC/ia32/fixed_asm.obj b/flac/src/libFLAC/ia32/fixed_asm.obj index 3486f7e..a240e79 100644 Binary files a/flac/src/libFLAC/ia32/fixed_asm.obj and b/flac/src/libFLAC/ia32/fixed_asm.obj differ diff --git a/flac/src/libFLAC/ia32/lpc_asm.obj b/flac/src/libFLAC/ia32/lpc_asm.obj index f599400..9e5efc4 100644 Binary files a/flac/src/libFLAC/ia32/lpc_asm.obj and b/flac/src/libFLAC/ia32/lpc_asm.obj differ diff --git a/flac/src/libFLAC/ia32/stream_encoder_asm.obj b/flac/src/libFLAC/ia32/stream_encoder_asm.obj index 3baf650..f12c3e5 100644 Binary files a/flac/src/libFLAC/ia32/stream_encoder_asm.obj and b/flac/src/libFLAC/ia32/stream_encoder_asm.obj differ diff --git a/flac/src/libFLAC/ia64/lpc_asm.obj b/flac/src/libFLAC/ia64/lpc_asm.obj index 02f43eb..71eaa8b 100644 Binary files a/flac/src/libFLAC/ia64/lpc_asm.obj and b/flac/src/libFLAC/ia64/lpc_asm.obj differ diff --git a/flac/src/libFLAC/libFLAC_static.vcxproj b/flac/src/libFLAC/libFLAC_static.vcxproj index 941c664..c160639 100644 --- a/flac/src/libFLAC/libFLAC_static.vcxproj +++ b/flac/src/libFLAC/libFLAC_static.vcxproj @@ -33,6 +33,7 @@ StaticLibrary + v90 StaticLibrary