From c4a5a465efbe6d5997538770904b735805a4eb10 Mon Sep 17 00:00:00 2001 From: chudov Date: Sun, 10 Apr 2011 18:16:26 +0000 Subject: [PATCH] * LocalDB merged with file browser * fixed hangup on truncated flac files * optimized CRC32 calculations --- CUETools.AccurateRip/AccurateRip.cs | 325 ++- CUETools.AccurateRip/CDRepair.cs | 2 +- CUETools.Codecs.ALAC/ALACDotNet.cs | 3 + CUETools.Codecs.ALAC/ALACWriter.cs | 2 + CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.cpp | 5 +- CUETools.Codecs.FLAKE/FlakeReader.cs | 3 + .../CUETools.TestCodecs/ALACWriterTest.cs | 16 +- .../AccurateRipVerifyTest.cs | 32 +- .../CUETools.TestCodecs.csproj | 4 +- CUETools/CUETools.TestCodecs/alac.m4a | Bin 774 -> 801 bytes CUETools/CUETools1.vsmdi | 5 - CUETools/frmCUETools.Designer.cs | 9 - CUETools/frmCUETools.cs | 344 ++- CUETools/frmCUETools.resx | 2107 ++++++++++------- 14 files changed, 1661 insertions(+), 1196 deletions(-) diff --git a/CUETools.AccurateRip/AccurateRip.cs b/CUETools.AccurateRip/AccurateRip.cs index 9d60491..33c3f9c 100644 --- a/CUETools.AccurateRip/AccurateRip.cs +++ b/CUETools.AccurateRip/AccurateRip.cs @@ -27,9 +27,9 @@ namespace CUETools.AccurateRip { int offset = 64 * 64; for (int i = 0; i < 64; i++) - this.val[i] = ar.CTDBCRC(offset + i * 64 + 64, 2 * offset - 64 - i * 64); + this.val[i] = ar.CTDBCRC(0, (i + 1) * 64, offset, 2 * offset); for (int i = 0; i < 64; i++) - this.val[i + 64] = ar.CTDBCRC(offset + 64 - 1 - i, 2 * offset - 64 + 1 + i); + this.val[i + 64] = ar.CTDBCRC(0, 63 - i, offset, 2 * offset); } public OffsetSafeCRCRecord(uint[] val) @@ -287,10 +287,10 @@ namespace CUETools.AccurateRip public uint CRC450(int iTrack, int oi) { - uint crca = _CRCAR[iTrack + 1, 2 * maxOffset + 5 * 588 + oi]; - uint crcb = _CRCAR[iTrack + 1, 2 * maxOffset + 6 * 588 + oi]; - uint suma = _CRCSM[iTrack + 1, 2 * maxOffset + 5 * 588 + oi]; - uint sumb = _CRCSM[iTrack + 1, 2 * maxOffset + 6 * 588 + oi]; + uint crca = _CRCAR[iTrack + 1, 2 * maxOffset + 1 + 5 * 588 + oi]; + uint crcb = _CRCAR[iTrack + 1, 2 * maxOffset + 1 + 6 * 588 + oi]; + uint suma = _CRCSM[iTrack + 1, 2 * maxOffset + 1 + 5 * 588 + oi]; + uint sumb = _CRCSM[iTrack + 1, 2 * maxOffset + 1 + 6 * 588 + oi]; uint offs = 450 * 588 + (uint)oi; return crcb - crca - offs * (sumb - suma); } @@ -329,63 +329,21 @@ namespace CUETools.AccurateRip uint crc = 0; if (iTrack == 0) { - // New idea: - // _CRC32[x, maxOffset] keeps crc state at track x boundary - // _CRC32[x, maxOffset +- offs] keeps crc state around track x boundary - // _CRC32[0, maxOffset] keeps crc state at disc end - // _CRC32[0, maxOffset + offs] keeps crc state around disc start - // _CRC32[0, maxOffset - offs] keeps crc state around disc end - - //int t0len = (int)_toc[_toc.FirstAudio].Pregap * 588; - //int dlen = (int)_toc.AudioLength * 588; - //if (oi == 0) - //{ - // // whole disc crc - // crc = _CRC32[0, maxOffset]; - //} - //if (oi > 0) - //{ - // // whole disc crc - // crc = _CRC32[0, maxOffset]; - // // substract prefix - // // IDEA: copy _CRC32[1, maxOffset + oi - t0len] so we can always use _CRC32[0, maxOffset + oi] even if pregap is short - // if (oi >= t0len) - // crc = Crc32.Combine(_CRC32[1, maxOffset + oi - t0len], crc, (dlen - oi) * 4); - // else - // crc = Crc32.Combine(_CRC32[0, maxOffset + oi], crc, (dlen - oi) * 4); - // // add zero suffix - // crc = Crc32.Combine(crc, 0, oi * 4); // TODO: is crc(0) really 0? - //} - //if (oi < 0) - //{ - // crc = _CRC32[0, maxOffset + oi]; - // crc = Crc32.Combine(crc, 0, -oi * 4); // TODO: is crc(0) really 0? - //} - - for (iTrack = 0; iTrack <= _toc.AudioTracks; iTrack++) + int dlen = (int)_toc.AudioLength * 588; + if (oi > 0) { - int trackLength = (int)(iTrack > 0 ? _toc[iTrack + _toc.FirstAudio - 1].Length : _toc[_toc.FirstAudio].Pregap) * 588 * 4; - if (oi < 0 && iTrack == 0) - crc = Crc32.Combine(crc, 0, -oi * 4); - if (trackLength == 0) - continue; - if (oi > 0 && (iTrack == 0 || (iTrack == 1 && _toc[_toc.FirstAudio].Pregap == 0))) - { - // Calculate track CRC skipping first oi samples by 'subtracting' their CRC - crc = Crc32.Combine(_CRC32[iTrack, oi], _CRC32[iTrack, 0], trackLength - oi * 4); - } - else if (oi < 0 && iTrack == _toc.AudioTracks) - { - crc = Crc32.Combine(crc, _CRC32[iTrack, 2 * maxOffset + oi], trackLength + oi * 4); - } - else - { - crc = Crc32.Combine(crc, _CRC32[iTrack, 0], trackLength); - } - if (oi > 0 && iTrack == _toc.AudioTracks) - crc = Crc32.Combine(crc, 0, oi * 4); + // whole disc crc + crc = _CRC32[_toc.AudioTracks, 2 * maxOffset]; + // - prefix + crc = Crc32.Combine(_CRC32[0, oi], crc, (dlen - oi) * 4); + // + zero suffix + crc = Crc32.Combine(crc, 0, oi * 4); } - iTrack = 0; + else // if (oi <= 0) + { + crc = _CRC32[_toc.AudioTracks, 2 * maxOffset + oi]; + } + // Use 0xffffffff as an initial state crc ^= _CRCMASK[0]; } @@ -394,23 +352,13 @@ namespace CUETools.AccurateRip int trackLength = (int)(iTrack > 0 ? _toc[iTrack + _toc.FirstAudio - 1].Length : _toc[_toc.FirstAudio].Pregap) * 588 * 4; if (oi > 0) { - // Calculate track CRC skipping first oi samples by 'subtracting' their CRC - crc = Crc32.Combine(_CRC32[iTrack, oi], _CRC32[iTrack, 0], trackLength - oi * 4); - // Add oi samples from next track CRC - crc = Crc32.Combine(crc, 0, oi * 4); - if (iTrack < _toc.AudioTracks) - crc ^= _CRC32[iTrack + 1, oi]; + crc = iTrack < _toc.AudioTracks ? _CRC32[iTrack + 1, oi] + : Crc32.Combine(_CRC32[iTrack, 2 * maxOffset], 0, oi * 4); + crc = Crc32.Combine(_CRC32[iTrack, oi], crc, trackLength); } - else if (oi < 0) + else //if (oi <= 0) { - // Calculate CRC of previous track's last oi samples by 'subtracting' it's last CRCs - crc = Crc32.Combine(_CRC32[iTrack - 1, 2 * maxOffset + oi], _CRC32[iTrack - 1, 0], -oi * 4); - // Add this track's CRC without last oi samples - crc = Crc32.Combine(crc, _CRC32[iTrack, 2 * maxOffset + oi], trackLength + oi * 4); - } - else // oi == 0 - { - crc = _CRC32[iTrack, 0]; + crc = Crc32.Combine(_CRC32[iTrack - 1, 2 * maxOffset + oi], _CRC32[iTrack, 2 * maxOffset + oi], trackLength); } // Use 0xffffffff as an initial state crc ^= _CRCMASK[iTrack]; @@ -429,59 +377,47 @@ namespace CUETools.AccurateRip { if (_CacheCRCWN[iTrack, _arOffsetRange + oi] == 0) { - uint crc = 0xffffffff; + uint crc; + int cnt; if (iTrack == 0) { - for (iTrack = 0; iTrack <= _toc.AudioTracks; iTrack++) + if (oi > 0) { - int trackLength = (int)(iTrack > 0 ? _toc[iTrack + _toc.FirstAudio - 1].Length : _toc[_toc.FirstAudio].Pregap) * 588 * 4 - - _CRCNL[iTrack, 0] * 2; - crc = Crc32.Combine(crc, _CRCWN[iTrack, 0], trackLength); + // whole disc crc + cnt = _CRCNL[_toc.AudioTracks, 2 * maxOffset] * 2; + crc = _CRCWN[_toc.AudioTracks, 2 * maxOffset]; + // - prefix + cnt -= _CRCNL[0, oi] * 2; + crc = Crc32.Combine(_CRCWN[0, oi], crc, cnt); } - iTrack = 0; + else // if (oi <= 0) + { + cnt = _CRCNL[_toc.AudioTracks, 2 * maxOffset + oi] * 2; + crc = _CRCWN[_toc.AudioTracks, 2 * maxOffset + oi]; + } } else { - int trackLength = (int)(iTrack > 0 ? _toc[iTrack + _toc.FirstAudio - 1].Length : _toc[_toc.FirstAudio].Pregap) * 588 * 4; if (oi > 0) { - int nonzeroPrevLength = trackLength - oi * 4 - - (_CRCNL[iTrack, 0] - _CRCNL[iTrack, oi]) * 2; - // Calculate track CRC skipping first oi samples by 'subtracting' their CRC - crc = Crc32.Combine( - _CRCWN[iTrack, oi], - _CRCWN[iTrack, 0], - nonzeroPrevLength); - // Use 0xffffffff as an initial state - crc = Crc32.Combine(0xffffffff, crc, nonzeroPrevLength); - // Add oi samples from next track CRC - if (iTrack < _toc.AudioTracks) - crc = Crc32.Combine(crc, - _CRCWN[iTrack + 1, oi], - oi * 4 - _CRCNL[iTrack + 1, oi] * 2); + cnt = (iTrack < _toc.AudioTracks ? _CRCNL[iTrack + 1, oi] : _CRCNL[iTrack, 2 * maxOffset]) * 2; + crc = iTrack < _toc.AudioTracks ? _CRCWN[iTrack + 1, oi] : _CRCWN[iTrack, 2 * maxOffset]; + + cnt -= _CRCNL[iTrack, oi] * 2; + crc = Crc32.Combine(_CRCWN[iTrack, oi], crc, cnt); } - else if (oi < 0) + else //if (oi <= 0) { - int nonzeroPrevLength = -oi * 4 - - (_CRCNL[iTrack - 1, 0] - _CRCNL[iTrack - 1, 2 * maxOffset + oi]) * 2; - // Calculate CRC of previous track's last oi samples by 'subtracting' it's last CRCs - crc = Crc32.Combine( - _CRCWN[iTrack - 1, 2 * maxOffset + oi], - _CRCWN[iTrack - 1, 0], - nonzeroPrevLength); - // Use 0xffffffff as an initial state - crc = Crc32.Combine(0xffffffff, crc, nonzeroPrevLength); - // Add this track's CRC without last oi samples - crc = Crc32.Combine(crc, - _CRCWN[iTrack, 2 * maxOffset + oi], - trackLength + oi * 4 - _CRCNL[iTrack, 2 * maxOffset + oi] * 2); - } - else // oi == 0 - { - // Use 0xffffffff as an initial state - crc = Crc32.Combine(0xffffffff, _CRCWN[iTrack, 0], trackLength - _CRCNL[iTrack, 0] * 2); + cnt = _CRCNL[iTrack, 2 * maxOffset + oi] * 2; + crc = _CRCWN[iTrack, 2 * maxOffset + oi]; + + cnt -= _CRCNL[iTrack - 1, 2 * maxOffset + oi] * 2; + crc = Crc32.Combine(_CRCWN[iTrack - 1, 2 * maxOffset + oi], crc, cnt); } + } + // Use 0xffffffff as an initial state + crc = Crc32.Combine(0xffffffff, crc, cnt); _CacheCRCWN[iTrack, _arOffsetRange + oi] = crc ^ 0xffffffff; } return _CacheCRCWN[iTrack, _arOffsetRange + oi]; @@ -503,7 +439,6 @@ namespace CUETools.AccurateRip private int maxOffset; internal ushort[] leadin; internal ushort[] leadout; - private uint preLeadoutCrc; private int stride = 1, laststride = 1, stridecount = 1, npar = 1; private bool calcSyn = false; private bool calcParity = false; @@ -523,38 +458,56 @@ namespace CUETools.AccurateRip Init(_toc); } - public unsafe uint CTDBCRC(int prefixSamples, int suffixSamples) + public unsafe uint CTDBCRC(int iTrack, int oi, int prefixSamples, int suffixSamples) { - if (prefixSamples > maxOffset || suffixSamples > maxOffset) + prefixSamples += oi; + suffixSamples -= oi; + if (prefixSamples < 0 || prefixSamples >= maxOffset || suffixSamples < 0 || suffixSamples > maxOffset) throw new ArgumentOutOfRangeException(); - int discLen = (int)_toc.AudioLength * 588; - int lastTrackLen = (int)_toc[_toc.FirstAudio + (int)_toc.AudioTracks - 1].Length * 588; - int trackOneBorder = (int)_toc[_toc.FirstAudio].Pregap * 588; - - if (preLeadoutCrc == 0) + uint crc; + if (iTrack == 0) { - preLeadoutCrc = CRC32(0, 0) ^ _CRCMASK[0]; - preLeadoutCrc = Crc32.Substract(preLeadoutCrc, _CRC32[_toc.AudioTracks, 0], lastTrackLen * 4); + int discLen = (int)_toc.AudioLength * 588; + int chunkLen = discLen - prefixSamples - suffixSamples; + crc = Crc32.Combine( + _CRC32[0, prefixSamples], + _CRC32[_toc.AudioTracks, 2 * maxOffset - suffixSamples], + chunkLen * 4); + return Crc32.Combine(0xffffffff, crc, chunkLen * 4) ^ 0xffffffff; } - - uint crcA = prefixSamples == 0 ? 0 - : prefixSamples < trackOneBorder ? _CRC32[0, prefixSamples] - : trackOneBorder == 0 ? _CRC32[1, prefixSamples - trackOneBorder] - : Crc32.Combine(_CRC32[0, 0], _CRC32[1, prefixSamples - trackOneBorder], (prefixSamples - trackOneBorder) * 4); - if (_toc.AudioTracks == 1) + int posA = (int)_toc[iTrack + _toc.FirstAudio - 1].Start * 588 + (iTrack > 1 ? oi : prefixSamples); + int posB = iTrack < _toc.AudioTracks ? + (int)_toc[iTrack + 1 + _toc.FirstAudio - 1].Start * 588 + oi : + (int)_toc.AudioLength * 588 - suffixSamples; + uint crcA, crcB; + if (oi > 0) { - uint crcY = Crc32.Combine(crcA, _CRC32[_toc.AudioTracks, 2 * maxOffset - suffixSamples], (discLen - prefixSamples - suffixSamples) * 4); - return Crc32.Combine(0xffffffff, crcY, (discLen - prefixSamples - suffixSamples) * 4) ^ 0xffffffff; + crcA = iTrack > 1 ? + _CRC32[iTrack, oi]: + _CRC32[iTrack, prefixSamples]; + crcB = iTrack < _toc.AudioTracks ? + _CRC32[iTrack + 1, oi] : + _CRC32[iTrack, maxOffset * 2 - suffixSamples]; } - uint crcXE = Crc32.Combine(crcA, preLeadoutCrc, (discLen - prefixSamples - lastTrackLen) * 4); - uint crcX = Crc32.Combine(crcXE, _CRC32[_toc.AudioTracks, 2 * maxOffset - suffixSamples], (lastTrackLen - suffixSamples) * 4); - return Crc32.Combine(0xffffffff, crcX, (discLen - prefixSamples - suffixSamples) * 4) ^ 0xffffffff; + else //if (oi <= 0) + { + crcA = iTrack > 1 ? + _CRC32[iTrack - 1, maxOffset * 2 + oi] : + _CRC32[iTrack, prefixSamples]; + crcB = iTrack < _toc.AudioTracks ? + _CRC32[iTrack, maxOffset * 2 + oi] : + _CRC32[iTrack, maxOffset * 2 - suffixSamples]; + } + crc = Crc32.Combine(crcA, crcB, (posB - posA) * 4); + // Use 0xffffffff as an initial state + crc = Crc32.Combine(0xffffffff, crc, (posB - posA) * 4) ^ 0xffffffff; + return crc; } - public uint CTDBCRC(int actualOffset) + public uint CTDBCRC(int offset) { - return CTDBCRC(stride / 2 - actualOffset, laststride / 2 + actualOffset); + return CTDBCRC(0, offset, stride / 2, laststride / 2); } private unsafe static void CalcSyn8(ushort* exp, ushort* log, ushort* syn, uint lo, uint n, int npar) @@ -645,11 +598,12 @@ namespace CUETools.AccurateRip bool doPar = currentStride >= 1 && currentStride <= stridecount && calcParity; uint n = (uint)(stridecount - currentStride); + int crcTrack = _currentTrack + (_samplesDoneTrack == 0 && _currentTrack > 0 ? -1 : 0); uint crcar = _CRCAR[_currentTrack, 0]; uint crcsm = _CRCSM[_currentTrack, 0]; - uint crc32 = _CRC32[_currentTrack, 0]; - uint crcwn = _CRCWN[_currentTrack, 0]; - int crcnl = _CRCNL[_currentTrack, 0]; + uint crc32 = _CRC32[crcTrack, 2 * maxOffset]; + uint crcwn = _CRCWN[crcTrack, 2 * maxOffset]; + int crcnl = _CRCNL[crcTrack, 2 * maxOffset]; uint crcv2 = _CRCV2[_currentTrack, 0]; int peak = _Peak[_currentTrack]; @@ -678,8 +632,8 @@ namespace CUETools.AccurateRip { crcwn = (crcwn >> 8) ^ t[(byte)(crcwn ^ lo)]; crcwn = (crcwn >> 8) ^ t[(byte)(crcwn ^ (lo >> 8))]; + crcnl++; } - else crcnl++; int pk = ((int)(lo << 16)) >> 16; peak = Math.Max(peak, (pk << 1) ^ (pk >> 31)); @@ -694,8 +648,8 @@ namespace CUETools.AccurateRip { crcwn = (crcwn >> 8) ^ t[(byte)(crcwn ^ hi)]; crcwn = (crcwn >> 8) ^ t[(byte)(crcwn ^ (hi >> 8))]; + crcnl++; } - else crcnl++; pk = ((int)(hi << 16)) >> 16; peak = Math.Max(peak, (pk << 1) ^ (pk >> 31)); @@ -706,9 +660,9 @@ namespace CUETools.AccurateRip _CRCAR[_currentTrack, 0] = crcar; _CRCSM[_currentTrack, 0] = crcsm; - _CRC32[_currentTrack, 0] = crc32; - _CRCWN[_currentTrack, 0] = crcwn; - _CRCNL[_currentTrack, 0] = crcnl; + _CRC32[_currentTrack, 2 * maxOffset] = crc32; + _CRCWN[_currentTrack, 2 * maxOffset] = crcwn; + _CRCNL[_currentTrack, 2 * maxOffset] = crcnl; _CRCV2[_currentTrack, 0] = crcv2; _Peak[_currentTrack] = peak; } @@ -773,7 +727,7 @@ namespace CUETools.AccurateRip int offset = _samplesDoneTrack < maxOffset ? _samplesDoneTrack : _samplesRemTrack <= maxOffset ? 2 * maxOffset - _samplesRemTrack - : _samplesDoneTrack >= 445 * 588 && _samplesDoneTrack <= 455 * 588 ? 2 * maxOffset + _samplesDoneTrack - 445 * 588 + : _samplesDoneTrack >= 445 * 588 && _samplesDoneTrack <= 455 * 588 ? 2 * maxOffset + 1 + _samplesDoneTrack - 445 * 588 : -1; CalculateCRCs(t, exp, log, synptr, wr, samples, copyCount, offset); @@ -784,15 +738,26 @@ namespace CUETools.AccurateRip Array.Copy(_CRC32, _currentTrack * 3 * maxOffset + _samplesDoneTrack, _CRC32, _currentTrack * 3 * maxOffset + 2 * maxOffset - _samplesRemTrack, copyCount); + Array.Copy(_CRCWN, _currentTrack * 3 * maxOffset + _samplesDoneTrack, + _CRCWN, _currentTrack * 3 * maxOffset + 2 * maxOffset - _samplesRemTrack, + copyCount); + Array.Copy(_CRCNL, _currentTrack * 3 * maxOffset + _samplesDoneTrack, + _CRCNL, _currentTrack * 3 * maxOffset + 2 * maxOffset - _samplesRemTrack, + copyCount); + } + // duplicate prefix to pregap + if (_sampleCount < maxOffset && _currentTrack == 1) + { + Array.Copy(_CRC32, _currentTrack * 3 * maxOffset + _samplesDoneTrack, + _CRC32, _sampleCount, + copyCount); + Array.Copy(_CRCWN, _currentTrack * 3 * maxOffset + _samplesDoneTrack, + _CRCWN, _sampleCount, + copyCount); + Array.Copy(_CRCNL, _currentTrack * 3 * maxOffset + _samplesDoneTrack, + _CRCNL, _sampleCount, + copyCount); } - //// duplicate prefix to pregap - //// be careful here not overwrite _CRC32[0, maxOffset] which can hold disc CRC in the future!!! - //if (_sampleCount < maxOffset && _currentTrack == 1) - //{ - // Array.Copy(_CRC32, _currentTrack * 3 * maxOffset + _samplesDoneTrack, - // _CRC32, _sampleCount, - // copyCount); - //} pos += copyCount; _samplesRemTrack -= copyCount; @@ -823,6 +788,22 @@ namespace CUETools.AccurateRip if (currentOffset >= start && currentOffset < end) this.leadout[i] = part.leadout[i]; } + int iSplitTrack = -1; + for (int iTrack = 0; iTrack <= _toc.AudioTracks; iTrack++) + { + int tempLocation = (int)(iTrack == 0 ? 0 : _toc[_toc.FirstAudio + iTrack - 1].Start - _toc[_toc.FirstAudio][0].Start) * 588; + int tempLen = (int)(iTrack == 0 ? _toc[_toc.FirstAudio].Pregap : _toc[_toc.FirstAudio + iTrack - 1].Length) * 588; + if (start > tempLocation && start <= tempLocation + tempLen) + { + iSplitTrack = iTrack; + break; + } + } + + uint crc32 = _CRC32[iSplitTrack, 2 * maxOffset]; + uint crcwn = _CRCWN[iSplitTrack, 2 * maxOffset]; + int crcnl = _CRCNL[iSplitTrack, 2 * maxOffset]; + for (int iTrack = 0; iTrack <= _toc.AudioTracks; iTrack++) { // ??? int tempLocation = (int) (iTrack == 0 ? _toc[_toc.FirstAudio][0].Start : _toc[_toc.FirstAudio + iTrack - 1].Start) * 588; @@ -836,39 +817,32 @@ namespace CUETools.AccurateRip uint crcar = _CRCAR[iTrack, 0]; uint crcv2 = _CRCV2[iTrack, 0]; uint crcsm = _CRCSM[iTrack, 0]; - uint crc32 = _CRC32[iTrack, 0]; - uint crcwn = _CRCWN[iTrack, 0]; - int crcnl = _CRCNL[iTrack, 0]; _CRCAR[iTrack, 0] = crcar + part._CRCAR[iTrack, 0]; _CRCSM[iTrack, 0] = crcsm + part._CRCSM[iTrack, 0]; - _CRCNL[iTrack, 0] = crcnl + part._CRCNL[iTrack, 0]; - _CRC32[iTrack, 0] = Crc32.Combine(crc32, part._CRC32[iTrack, 0], 4 * (trEnd - trStart)); - _CRCWN[iTrack, 0] = Crc32.Combine(crcwn, part._CRCWN[iTrack, 0], 4 * (trEnd - trStart) - 2 * part._CRCNL[iTrack, 0]); _CRCV2[iTrack, 0] = crcv2 + part._CRCV2[iTrack, 0]; - for (int i = 1; i < 3 * maxOffset; i++) + + for (int i = 0; i < 3 * maxOffset; i++) { int currentOffset; if (i < maxOffset) - { currentOffset = tempLocation + i; - } else if (i < 2 * maxOffset) - { currentOffset = tempLocation + tempLen + i - 2 * maxOffset; - } - else - { - currentOffset = tempLocation + i - 2 * maxOffset + 445 * 588; - } - if (currentOffset < trStart) + else if (i == 2 * maxOffset) + currentOffset = trEnd; + else //if (i > 2 * maxOffset) + currentOffset = tempLocation + i - 1 - 2 * maxOffset + 445 * 588; + + if (currentOffset < trStart || currentOffset > trEnd) continue; + _CRC32[iTrack, i] = Crc32.Combine(crc32, part._CRC32[iTrack, i], 4 * (currentOffset - start)); + _CRCWN[iTrack, i] = Crc32.Combine(crcwn, part._CRCWN[iTrack, i], part._CRCNL[iTrack, i] * 2); + _CRCNL[iTrack, i] = crcnl + part._CRCNL[iTrack, i]; + if (i == 0 || i == 2 * maxOffset) continue; _CRCAR[iTrack, i] = crcar + part._CRCAR[iTrack, i]; _CRCV2[iTrack, i] = crcv2 + part._CRCV2[iTrack, i]; _CRCSM[iTrack, i] = crcsm + part._CRCSM[iTrack, i]; - _CRCNL[iTrack, i] = crcnl + part._CRCNL[iTrack, i]; - _CRC32[iTrack, i] = Crc32.Combine(crc32, part._CRC32[iTrack, i], 4 * (currentOffset - trStart)); - _CRCWN[iTrack, i] = Crc32.Combine(crcwn, part._CRCWN[iTrack, i], 4 * (currentOffset - trStart) - 2 * part._CRCNL[iTrack, i]); } _Peak[iTrack] = Math.Max(_Peak[iTrack], part._Peak[iTrack]); } @@ -902,7 +876,6 @@ namespace CUETools.AccurateRip int leadout_len = Math.Max(4096 * 4, (calcSyn || calcParity) ? stride + laststride : 0); leadin = new ushort[leadin_len]; leadout = new ushort[leadout_len]; - preLeadoutCrc = 0; _currentTrack = 0; Position = 0; // NOT _toc[_toc.FirstAudio][0].Start * 588; } diff --git a/CUETools.AccurateRip/CDRepair.cs b/CUETools.AccurateRip/CDRepair.cs index 7b27f47..a0da424 100644 --- a/CUETools.AccurateRip/CDRepair.cs +++ b/CUETools.AccurateRip/CDRepair.cs @@ -332,7 +332,7 @@ namespace CUETools.AccurateRip 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; + hasErrors = err_count != 0 || ar.CTDBCRC(-offset) != expectedCRC; return true; } } diff --git a/CUETools.Codecs.ALAC/ALACDotNet.cs b/CUETools.Codecs.ALAC/ALACDotNet.cs index 49caefc..fb82c91 100644 --- a/CUETools.Codecs.ALAC/ALACDotNet.cs +++ b/CUETools.Codecs.ALAC/ALACDotNet.cs @@ -108,7 +108,10 @@ namespace CUETools.Codecs.ALAC int sampleDuration; int sampleSize; if (_iSample >= _sample_byte_size.Length) + { + buff.Length = offset; return offset; + } get_sample_info(_iSample, out sampleDuration, out sampleSize); _IO.Read(_framesBuffer, 0, sampleSize); decodeFrame(sampleSize); diff --git a/CUETools.Codecs.ALAC/ALACWriter.cs b/CUETools.Codecs.ALAC/ALACWriter.cs index 2e24dd0..a13135e 100644 --- a/CUETools.Codecs.ALAC/ALACWriter.cs +++ b/CUETools.Codecs.ALAC/ALACWriter.cs @@ -1628,6 +1628,8 @@ namespace CUETools.Codecs.ALAC verifyBuffer = new int[Alac.MAX_BLOCKSIZE * _pcm.ChannelCount]; } + if (sample_count < 0) + throw new InvalidOperationException("FinalSampleCount unknown"); int frames = sample_count / eparams.block_size; int header_len = max_header_len + eparams.padding_size diff --git a/CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.cpp b/CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.cpp index 4241c77..f6e3343 100644 --- a/CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.cpp +++ b/CUETools.Codecs.FLAC/CUETools.Codecs.FLAC.cpp @@ -263,7 +263,10 @@ namespace CUETools { namespace Codecs { namespace FLAC { do { if (FLAC__stream_decoder_get_state(_decoder) == FLAC__STREAM_DECODER_END_OF_STREAM) - return buff->Length - samplesNeeded; + { + buff->Length -= samplesNeeded; + return buff->Length; + } if (!FLAC__stream_decoder_process_single(_decoder)) { String^ state = gcnew String(FLAC__StreamDecoderStateString[FLAC__stream_decoder_get_state(_decoder)]); diff --git a/CUETools.Codecs.FLAKE/FlakeReader.cs b/CUETools.Codecs.FLAKE/FlakeReader.cs index 78d81e5..3ca4d5b 100644 --- a/CUETools.Codecs.FLAKE/FlakeReader.cs +++ b/CUETools.Codecs.FLAKE/FlakeReader.cs @@ -251,7 +251,10 @@ namespace CUETools.Codecs.FLAKE fill_frames_buffer(); if (_framesBufferLength == 0) + { + buff.Length = offset; return offset; + } int bytesDecoded = DecodeFrame(_framesBuffer, _framesBufferOffset, _framesBufferLength); _framesBufferLength -= bytesDecoded; diff --git a/CUETools/CUETools.TestCodecs/ALACWriterTest.cs b/CUETools/CUETools.TestCodecs/ALACWriterTest.cs index 8021557..d5c0e43 100644 --- a/CUETools/CUETools.TestCodecs/ALACWriterTest.cs +++ b/CUETools/CUETools.TestCodecs/ALACWriterTest.cs @@ -79,14 +79,6 @@ namespace CUETools.TestCodecs AudioBuffer buff = WAVReader.ReadAllSamples("test.wav", null); ALACWriter target; - target = new ALACWriter("alacwriter0.m4a", null, buff.PCM); - target.Padding = 1; - target.Vendor = "CUETools"; - target.CreationTime = DateTime.Parse("15 Aug 1976"); - target.Write(buff); - target.Close(); - CollectionAssert.AreEqual(File.ReadAllBytes("alac.m4a"), File.ReadAllBytes("alacwriter0.m4a"), "alacwriter0.m4a doesn't match."); - target = new ALACWriter("alacwriter1.m4a", null, buff.PCM); target.Padding = 1; target.Vendor = "CUETools"; @@ -95,6 +87,14 @@ namespace CUETools.TestCodecs target.Write(buff); target.Close(); CollectionAssert.AreEqual(File.ReadAllBytes("alac.m4a"), File.ReadAllBytes("alacwriter1.m4a"), "alacwriter1.m4a doesn't match."); + + target = new ALACWriter("alacwriter0.m4a", null, buff.PCM); + target.Padding = 1; + target.Vendor = "CUETools"; + target.CreationTime = DateTime.Parse("15 Aug 1976"); + target.Write(buff); + target.Close(); + CollectionAssert.AreEqual(File.ReadAllBytes("alac.m4a"), File.ReadAllBytes("alacwriter0.m4a"), "alacwriter0.m4a doesn't match."); } } diff --git a/CUETools/CUETools.TestCodecs/AccurateRipVerifyTest.cs b/CUETools/CUETools.TestCodecs/AccurateRipVerifyTest.cs index 36bfc71..69ef28b 100644 --- a/CUETools/CUETools.TestCodecs/AccurateRipVerifyTest.cs +++ b/CUETools/CUETools.TestCodecs/AccurateRipVerifyTest.cs @@ -91,10 +91,10 @@ namespace CUETools.TestCodecs } /// - ///A test for CRC32 + ///A test for CRC32 with offset /// [TestMethod()] - public void CRC32Test1() + public void CRC32TestOffset() { Assert.AreEqual(2953798997, ar.CRC32(0, 13), "CRC32[0][13] was not set correctly."); Assert.AreEqual(0480843614, ar.CRC32(0, -7), "CRC32[0][-7] was not set correctly."); @@ -108,6 +108,20 @@ namespace CUETools.TestCodecs Assert.AreEqual(0480843614, ar2.CRC32(1, -7), "CRC32[1,13](2) was not set correctly."); } + /// + ///A test for CTDBCRC + /// + [TestMethod()] + public void CTDBCRCTest() + { + Assert.AreEqual(4209773141, ar.CTDBCRC(1, 0, 5 * 588, 5 * 588), "CTDBCRC[1] was not set correctly."); + Assert.AreEqual(0037001035, ar.CTDBCRC(2, 0, 5 * 588, 5 * 588), "CTDBCRC[2] was not set correctly."); + Assert.AreEqual(1024656428, ar.CTDBCRC(3, 0, 5 * 588, 5 * 588), "CTDBCRC[3] was not set correctly."); + + Assert.AreEqual(ar.CRC32(2), ar.CTDBCRC(2, 0, 5 * 588, 5 * 588), "CTDBCRC[2] was not set correctly."); + } + + /// ///A test for ARV1 CRC /// @@ -195,19 +209,21 @@ namespace CUETools.TestCodecs Assert.AreEqual(ar0.CRC(track), ar1.CRC(track, -offs), "CRC with offset " + (-offs) + " was not set correctly."); Assert.AreEqual(ar0.CRC450(track, offs), ar1.CRC450(track, 0), "CRC450 with offset " + offs + " was not set correctly."); Assert.AreEqual(ar0.CRC450(track, 0), ar1.CRC450(track, -offs), "CRC450 with offset " + (-offs) + " was not set correctly."); + Assert.AreEqual(ar0.CTDBCRC(track + 1, offs, 588 * 5, 588 * 5), ar1.CTDBCRC(track + 1, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + offs + " was not set correctly."); + Assert.AreEqual(ar1.CTDBCRC(track + 1, -offs, 588 * 5, 588 * 5), ar0.CTDBCRC(track + 1, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + (-offs) + " was not set correctly."); if (track != 2) { Assert.AreEqual(ar0.CRC32(track + 1, offs), ar1.CRC32(track + 1), "CRC32 with offset " + (offs) + " was not set correctly."); Assert.AreEqual(ar0.CRCWONULL(track + 1, offs), ar1.CRCWONULL(track + 1), "CRCWONULL with offset " + (offs) + " was not set correctly."); } - if (track != 0) + //if (track != 0) { Assert.AreEqual(ar0.CRC32(track + 1), ar1.CRC32(track + 1, -offs), "CRC32 with offset " + (-offs) + " was not set correctly."); Assert.AreEqual(ar0.CRCWONULL(track + 1), ar1.CRCWONULL(track + 1, -offs), "CRCWONULL with offset " + (-offs) + " was not set correctly."); } } - Assert.AreEqual(ar0.CTDBCRC(588 * 5, 588 * 5), ar1.CTDBCRC(588 * 5 - offs, 588 * 5 + offs), "CTDBCRC with offset " + offs + " was not set correctly."); - Assert.AreEqual(ar1.CTDBCRC(588 * 5, 588 * 5), ar0.CTDBCRC(588 * 5 + offs, 588 * 5 - offs), "CTDBCRC with offset " + (-offs) + " was not set correctly."); + Assert.AreEqual(ar0.CTDBCRC(0, offs, 588 * 5, 588 * 5), ar1.CTDBCRC(0, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + offs + " was not set correctly."); + Assert.AreEqual(ar1.CTDBCRC(0, -offs, 588 * 5, 588 * 5), ar0.CTDBCRC(0, 0, 588 * 5, 588 * 5), "CTDBCRC with offset " + (-offs) + " was not set correctly."); } } @@ -231,8 +247,10 @@ namespace CUETools.TestCodecs { string message = "split = " + CDImageLayout.TimeToString((uint)split/588) + "." + (split%588).ToString() + ", offset = " + offs.ToString() + ", track = " + (track + 1).ToString(); Assert.AreEqual(ar0.CRC(track, offs), ar1.CRC(track, offs), "CRC was not set correctly, " + message); - Assert.AreEqual(ar0.CRC450(track, offs), ar1.CRC450(track, offs), "CRC450 was not set correctly, " + message); - if ((track != 2 || offs <= 0) && (track != 0 || offs >= 0)) + Assert.AreEqual(ar0.CTDBCRC(track, offs, 5 * 588, 5 * 588), ar1.CTDBCRC(track, offs, 5 * 588, 5 * 588), "CTDBCRC was not set correctly, " + message); + //CRC450 is zero here :( too small tracks + //Assert.AreEqual(ar0.CRC450(track, offs), ar1.CRC450(track, offs), "CRC450 was not set correctly, " + message); + if ((track != 2 || offs <= 0))// && (track != 0 || offs >= 0)) { Assert.AreEqual(ar0.CRC32(track + 1, offs), ar1.CRC32(track + 1, offs), "CRC32 was not set correctly, " + message); Assert.AreEqual(ar0.CRCWONULL(track + 1, offs), ar1.CRCWONULL(track + 1, offs), "CRCWONULL was not set correctly, " + message); diff --git a/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj b/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj index ea42635..b1349aa 100644 --- a/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj +++ b/CUETools/CUETools.TestCodecs/CUETools.TestCodecs.csproj @@ -70,12 +70,12 @@ {F2EC7193-D5E5-4252-9803-5CEB407E910F} CUETools.Codecs.ALAC - False + True {082D6B9E-326E-4D15-9798-EDAE9EDE70A6} CUETools.Codecs.FLAKE - False + True {8A0426FA-0BC2-4C49-A6E5-1F9A68156F19} diff --git a/CUETools/CUETools.TestCodecs/alac.m4a b/CUETools/CUETools.TestCodecs/alac.m4a index 2ca355d27f2d5732801f9562beb7f4e74b1a994c..cd2a0a4b88171c79192718f8232b3bbc62b81c30 100644 GIT binary patch delta 271 zcmZo;TgWy+Nseh|Zhn3l0|P@&ZdpbO0|Ns?$4qAj5N2Rl<1(=?Ty+P3}Rz2WnfKGm~70XE~-&nQk)D`#00gTb#gM36(7?Z j1_p-o(v%XA{qd7mGev7NFfeGR6{V&^)#IZk8rlK?pUyKk delta 240 zcmZ3;*2XqLiJyTpttd5>fq{X61H_p8gvnNcfq|(%H$T6Ofq@|>w=5$CB+FC0-~tFU zFfhNE=nyWux1=aBn}LBLrX(AzfFC3Y!VC-yjFS&CiA+3U92S|Il9|ZBz@U(u0#?KT zQUJmX3~O8%7#K`LkATc((9KB6DFU+?7#NE4OY>lC5X}>uUz(TVk(if~lUl^Uz{oP$ zjnSI%#N;N%AT}of2GNd&$+sBQIc17VijzU=CyOyz@iAC3FfhcGrj&rJ51Smv6b%3{ CLOhxP diff --git a/CUETools/CUETools1.vsmdi b/CUETools/CUETools1.vsmdi index bfa89ec..d3c80d5 100644 --- a/CUETools/CUETools1.vsmdi +++ b/CUETools/CUETools1.vsmdi @@ -3,9 +3,4 @@ - - - - - \ No newline at end of file diff --git a/CUETools/frmCUETools.Designer.cs b/CUETools/frmCUETools.Designer.cs index f1698f4..9af15a0 100644 --- a/CUETools/frmCUETools.Designer.cs +++ b/CUETools/frmCUETools.Designer.cs @@ -80,7 +80,6 @@ namespace JDP { this.toolStripMenuItemInputBrowserFiles = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemInputBrowserMulti = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemInputBrowserDrag = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItemLocalDatabase = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemInputBrowserHide = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripOutput = new System.Windows.Forms.ToolStrip(); this.toolStripLabelOutput = new System.Windows.Forms.ToolStripLabel(); @@ -649,7 +648,6 @@ namespace JDP { this.toolStripMenuItemInputBrowserFiles, this.toolStripMenuItemInputBrowserMulti, this.toolStripMenuItemInputBrowserDrag, - this.toolStripMenuItemLocalDatabase, this.toolStripMenuItemInputBrowserHide}); this.toolStripSplitButtonInputBrowser.Image = global::JDP.Properties.Resources.folder; resources.ApplyResources(this.toolStripSplitButtonInputBrowser, "toolStripSplitButtonInputBrowser"); @@ -675,12 +673,6 @@ namespace JDP { this.toolStripMenuItemInputBrowserDrag.Name = "toolStripMenuItemInputBrowserDrag"; resources.ApplyResources(this.toolStripMenuItemInputBrowserDrag, "toolStripMenuItemInputBrowserDrag"); // - // toolStripMenuItemLocalDatabase - // - this.toolStripMenuItemLocalDatabase.Image = global::JDP.Properties.Resources.puzzle__arrow; - this.toolStripMenuItemLocalDatabase.Name = "toolStripMenuItemLocalDatabase"; - resources.ApplyResources(this.toolStripMenuItemLocalDatabase, "toolStripMenuItemLocalDatabase"); - // // toolStripMenuItemInputBrowserHide // this.toolStripMenuItemInputBrowserHide.Image = global::JDP.Properties.Resources.folder_delete; @@ -1206,7 +1198,6 @@ namespace JDP { private System.Windows.Forms.CheckBox checkBoxVerifyUseCDRepair; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelCTDB; private System.Windows.Forms.CheckBox checkBoxVerifyUseLocal; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemLocalDatabase; private System.Windows.Forms.CheckBox checkBoxSkipRecent; private System.Windows.Forms.ToolStripMenuItem editMetadataToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem addFolderToLocalDatabaseToolStripMenuItem; diff --git a/CUETools/frmCUETools.cs b/CUETools/frmCUETools.cs index 642bfde..f240c50 100644 --- a/CUETools/frmCUETools.cs +++ b/CUETools/frmCUETools.cs @@ -82,28 +82,26 @@ namespace JDP { { if (node.IsExpanded) AddCheckedNodesToBatch(node.Nodes); - else if (node.Checked && node is CUEControls.FileSystemTreeNodeFileSystemInfo) - _batchPaths.Add((node as CUEControls.FileSystemTreeNodeFileSystemInfo).Path); + else if (node.Checked) + { + if (node is CUEControls.FileSystemTreeNodeFileSystemInfo || node is FileSystemTreeNodeLocalDBEntry) + if ((node as CUEControls.FileSystemTreeNode).Path != null) + _batchPaths.Add((node as CUEControls.FileSystemTreeNode).Path); + if (node is FileSystemTreeNodeLocalDBFolder) + foreach (var entry in (node as FileSystemTreeNodeLocalDBFolder).Group) + if (entry.Path != null) + _batchPaths.Add(entry.Path); + } } } private void AddAllNodesToBatch(TreeNode node) { - if (node.IsExpanded || !(node is CUEControls.FileSystemTreeNode)) - { - AddAllNodesToBatch(node.Nodes); - return; - } if (node is CUEControls.FileSystemTreeNodeFileSystemInfo) { _batchPaths.Add((node as CUEControls.FileSystemTreeNodeFileSystemInfo).Path); return; } - if (node is FileSystemTreeNodeLocalDBEntry) - { - _batchPaths.Add((node as FileSystemTreeNodeLocalDBEntry).Path); - return; - } if (node is FileSystemTreeNodeLocalDBFolder) { foreach (var entry in (node as FileSystemTreeNodeLocalDBFolder).Group) @@ -111,6 +109,17 @@ namespace JDP { _batchPaths.Add(entry.Path); return; } + if (node is FileSystemTreeNodeLocalDBEntry) + { + if ((node as FileSystemTreeNodeLocalDBEntry).Path != null) + _batchPaths.Add((node as FileSystemTreeNodeLocalDBEntry).Path); + return; + } + if (node.IsExpanded || !(node is CUEControls.FileSystemTreeNode)) + { + AddAllNodesToBatch(node.Nodes); + return; + } } private void AddAllNodesToBatch(TreeNodeCollection nodes) @@ -164,10 +173,10 @@ namespace JDP { // } //} - if (FileBrowserState != FileBrowserStateEnum.Checkboxes - && FileBrowserState != FileBrowserStateEnum.DragDrop - && (FileBrowserState != FileBrowserStateEnum.LocalDB || fileSystemTreeView1.SelectedPath != null) - && !Directory.Exists(InputPath)) + if (FileBrowserState == FileBrowserStateEnum.Hidden + || (FileBrowserState == FileBrowserStateEnum.Tree + && !(fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBFolder) + && !Directory.Exists(InputPath))) { StartConvert(); return; @@ -182,8 +191,12 @@ namespace JDP { AddCheckedNodesToBatch(fileSystemTreeView1.Nodes); else if (FileBrowserState == FileBrowserStateEnum.DragDrop) AddAllNodesToBatch(fileSystemTreeView1.Nodes); - else if (FileBrowserState == FileBrowserStateEnum.LocalDB && fileSystemTreeView1.SelectedNode != null) - AddAllNodesToBatch(fileSystemTreeView1.SelectedNode); + else if (FileBrowserState == FileBrowserStateEnum.Tree && fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBFolder) + { + foreach (var entry in (fileSystemTreeView1.SelectedNode as FileSystemTreeNodeLocalDBFolder).Group) + if (entry.Path != null) + _batchPaths.Add(entry.Path); + } else { _batchRoot = InputPath; @@ -386,7 +399,6 @@ namespace JDP { Tree = 0, Checkboxes = 1, DragDrop = 2, - LocalDB = 8, Hidden = 4 } @@ -1153,7 +1165,6 @@ namespace JDP { toolStripMenu.Enabled = !running; fileSystemTreeView1.Enabled = !running; txtInputPath.Enabled = !running; - txtInputPath.ReadOnly = FileBrowserState == FileBrowserStateEnum.DragDrop || FileBrowserState == FileBrowserStateEnum.Checkboxes || FileBrowserState == FileBrowserStateEnum.LocalDB; grpExtra.Enabled = !running && (converting || verifying); //groupBoxCorrector.Enabled = !running && SelectedAction == CUEAction.CorrectFilenames; //grpOutputStyle.Enabled = !running && converting; @@ -1361,7 +1372,7 @@ namespace JDP { if (InputPath == "") { InputPath = sr.Load("InputPath") ?? ""; - FileBrowserState = (FileBrowserStateEnum)(sr.LoadInt32("FileBrowserState", (int)FileBrowserStateEnum.Tree, (int)FileBrowserStateEnum.LocalDB) ?? (int)FileBrowserStateEnum.Hidden); + FileBrowserState = (FileBrowserStateEnum)(sr.LoadInt32("FileBrowserState", (int)FileBrowserStateEnum.Tree, (int)FileBrowserStateEnum.Hidden) ?? (int)FileBrowserStateEnum.Hidden); } else FileBrowserState = FileBrowserStateEnum.Hidden; @@ -1542,7 +1553,7 @@ namespace JDP { ? toolStripMenuItemOutputManual : toolStripMenuItemOutputBrowse; toolStripSplitButtonOutputBrowser.Text = toolStripSplitButtonOutputBrowser.DefaultItem.Text; toolStripSplitButtonOutputBrowser.Image = toolStripSplitButtonOutputBrowser.DefaultItem.Image; - toolStripSplitButtonOutputBrowser.Enabled = toolStripSplitButtonOutputBrowser.DefaultItem.Enabled; + toolStripSplitButtonOutputBrowser.Enabled = true;// toolStripSplitButtonOutputBrowser.DefaultItem.Enabled; UpdateOutputPath(); } } @@ -1555,7 +1566,6 @@ namespace JDP { case FileBrowserStateEnum.Checkboxes: return toolStripMenuItemInputBrowserMulti; case FileBrowserStateEnum.DragDrop: return toolStripMenuItemInputBrowserDrag; case FileBrowserStateEnum.Hidden: return toolStripMenuItemInputBrowserHide; - case FileBrowserStateEnum.LocalDB: return toolStripMenuItemLocalDatabase; } return null; } @@ -1601,6 +1611,7 @@ namespace JDP { { fileSystemTreeView1.Nodes.Clear(); fileSystemTreeView1.IconManager = m_icon_mgr; + fileSystemTreeView1.Nodes.Add(new FileSystemTreeNodeLocalDB(m_icon_mgr, _localDB)); if (InputPath != "") { TreeNode node = null; @@ -1619,8 +1630,9 @@ namespace JDP { } } } - if (fileSystemTreeView1.Nodes.Count > 0) - fileSystemTreeView1.Nodes[0].Expand(); + foreach (TreeNode node in fileSystemTreeView1.Nodes) + node.Expand(); + if (value == FileBrowserStateEnum.Checkboxes && fileSystemTreeView1.SelectedNode != null && fileSystemTreeView1.SelectedNode is CUEControls.FileSystemTreeNodeFileSystemInfo) @@ -1647,92 +1659,6 @@ namespace JDP { fileSystemTreeView1.Select(); fileSystemTreeView1.ShowRootLines = false; break; - case FileBrowserStateEnum.LocalDB: - OutputPathUseTemplate = true; - if (_fileBrowserControlState != value) - { - fileSystemTreeView1.BeginUpdate(); - fileSystemTreeView1.CheckBoxes = false; - //fileSystemTreeView1.StateImageList = m_state_image_list; - fileSystemTreeView1.Nodes.Clear(); - fileSystemTreeView1.Nodes.Add("dummy"); - fileSystemTreeView1.IconManager = m_icon_mgr; - fileSystemTreeView1.Nodes.Clear(); - - fileSystemTreeView1.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( - m_icon_mgr, _localDB, true, true, m_icon_mgr.GetIconIndex(".#puzzle"), "By Uniqueness", - i => ((int)FileSystemTreeNodeLocalDBCollision.GetGroupType(_localDB.FindAll(j => j.DiscID == i.DiscID))).ToString(), - i => FileSystemTreeNodeLocalDBCollision.GroupTypeToDescription(FileSystemTreeNodeLocalDBCollision.GetGroupType(_localDB.FindAll(j => j.DiscID == i.DiscID))), - i => m_icon_mgr.GetIconIndex(FileSystemTreeNodeLocalDBCollision.GroupTypeToIconTag(FileSystemTreeNodeLocalDBCollision.GetGroupType(_localDB.FindAll(j => j.DiscID == i.DiscID)))))); //converter_icon - - fileSystemTreeView1.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( - m_icon_mgr, _localDB, true, true, m_icon_mgr.GetIconIndex(".flac"), "By Format", - i => i.AudioPaths == null || i.AudioPaths.Count == 0 ? null : Path.GetExtension(i.AudioPaths[0]).ToLower(), - null, - i => m_icon_mgr.GetIconIndex(i.AudioPaths[0]))); - - fileSystemTreeView1.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( - m_icon_mgr, _localDB, false, true, m_icon_mgr.GetIconIndex(".#users"), "By Artist", - i => i.Metadata.Artist, null, null)); - - fileSystemTreeView1.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( - m_icon_mgr, _localDB, true, false, m_icon_mgr.GetIconIndex(".#calendar"), "By Release Date", - i => i.Metadata.Year, null, null)); - - fileSystemTreeView1.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( - m_icon_mgr, _localDB, true, true, m_icon_mgr.GetIconIndex(".#alarm_clock"), "By Verification Date", - i => - i.VerificationDate == DateTime.MinValue ? "0" : - i.VerificationDate.AddHours(1) > DateTime.Now ? "1" : - i.VerificationDate.AddDays(1) > DateTime.Now ? "2" : - i.VerificationDate.AddDays(7) > DateTime.Now ? "3" : - i.VerificationDate.AddDays(31) > DateTime.Now ? "4" : - i.VerificationDate.AddDays(365) > DateTime.Now ? "5" : - "6", - i => - i.VerificationDate == DateTime.MinValue ? "never" : - i.VerificationDate.AddHours(1) > DateTime.Now ? "this hour" : - i.VerificationDate.AddDays(1) > DateTime.Now ? "this day" : - i.VerificationDate.AddDays(7) > DateTime.Now ? "this week" : - i.VerificationDate.AddDays(31) > DateTime.Now ? "this month" : - i.VerificationDate.AddDays(365) > DateTime.Now ? "this year" : - "more than a year ago", - null)); - - fileSystemTreeView1.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( - m_icon_mgr, _localDB, true, true, m_icon_mgr.GetIconIndex(".#ar"), "By AccurateRip Confidence", - i => - i.VerificationDate == DateTime.MinValue ? "00" : - i.ARConfidence == 0 ? "01" : - i.ARConfidence == 1 ? "02" : - i.ARConfidence == 2 ? "03" : - i.ARConfidence == 3 ? "04" : - i.ARConfidence < 5 ? "05" : - i.ARConfidence < 10 ? "06" : - i.ARConfidence < 20 ? "07" : - i.ARConfidence < 50 ? "08" : - i.ARConfidence < 100 ? "09" : - "10", - i => - i.VerificationDate == DateTime.MinValue ? "?" : - i.ARConfidence == 0 ? "0" : - i.ARConfidence == 1 ? "1" : - i.ARConfidence == 2 ? "2" : - i.ARConfidence == 3 ? "3" : - i.ARConfidence < 5 ? "< 5" : - i.ARConfidence < 10 ? "< 10" : - i.ARConfidence < 20 ? "< 20" : - i.ARConfidence < 50 ? "< 50" : - i.ARConfidence < 100 ? "< 100" : - ">=100", - null)); - - _fileBrowserControlState = value; - fileSystemTreeView1.EndUpdate(); - } - fileSystemTreeView1.Select(); - fileSystemTreeView1.ShowRootLines = true; - break; case FileBrowserStateEnum.Hidden: break; } @@ -1872,7 +1798,7 @@ namespace JDP { private void UpdateActions() { - if (FileBrowserState == FileBrowserStateEnum.DragDrop || FileBrowserState == FileBrowserStateEnum.Checkboxes || FileBrowserState == FileBrowserStateEnum.LocalDB) + if (FileBrowserState == FileBrowserStateEnum.DragDrop || FileBrowserState == FileBrowserStateEnum.Checkboxes) { rbActionCorrectFilenames.Enabled = true; rbActionCreateCUESheet.Enabled = true; @@ -1881,24 +1807,21 @@ namespace JDP { //toolStripSplitButtonOutputBrowser.Enabled = false; toolStripMenuItemOutputManual.Enabled = toolStripMenuItemOutputBrowse.Enabled = false; + txtInputPath.ReadOnly = true; } else { string pathIn = InputPath; - rbActionCorrectFilenames.Enabled = pathIn.Length != 0 - && ((File.Exists(pathIn) && Path.GetExtension(pathIn).ToLower() == ".cue") - || Directory.Exists(pathIn)); - rbActionCreateCUESheet.Enabled = pathIn.Length != 0 - && ((File.Exists(pathIn) && Path.GetExtension(pathIn).ToLower() != ".cue") - //&& ((File.Exists(pathIn) && CUESheet.CreateDummyCUESheet(_profile._config, pathIn) != null) -- too slow - || Directory.Exists(pathIn)); - rbActionVerify.Enabled = - rbActionEncode.Enabled = pathIn.Length != 0 - && (File.Exists(pathIn) || Directory.Exists(pathIn) || IsCDROM(pathIn)); - toolStripMenuItemOutputManual.Enabled = - toolStripMenuItemOutputBrowse.Enabled = - pathIn.Length != 0 - && (IsCDROM(pathIn) || File.Exists(pathIn)); + bool is_file = !string.IsNullOrEmpty(pathIn) && File.Exists(pathIn); + bool is_cue = is_file && Path.GetExtension(pathIn).ToLower() == ".cue"; + bool is_directory = !string.IsNullOrEmpty(pathIn) && Directory.Exists(pathIn); + bool is_folder = FileBrowserState == FileBrowserStateEnum.Tree && fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBFolder; + bool is_cdrom = !string.IsNullOrEmpty(pathIn) && IsCDROM(pathIn); + rbActionCorrectFilenames.Enabled = is_cue || is_directory; + rbActionCreateCUESheet.Enabled = (is_file && !is_cue) || is_directory; + rbActionVerify.Enabled = rbActionEncode.Enabled = is_file || is_directory || is_folder || is_cdrom; + toolStripMenuItemOutputManual.Enabled = toolStripMenuItemOutputBrowse.Enabled = is_file || is_cdrom; + txtInputPath.ReadOnly = is_folder; } btnConvert.Enabled = btnConvert.Visible && @@ -1911,54 +1834,27 @@ namespace JDP { comboBoxScript.Enabled = btnConvert.Enabled && comboBoxScript.Items.Count > 1; } - private void DumpLocalDB(StringBuilder report, TreeNode parent) + private void fileSystemTreeView1_AfterSelect(object sender, TreeViewEventArgs e) { - if (parent is FileSystemTreeNodeLocalDBFolder) + InputPath = fileSystemTreeView1.SelectedPath ?? ""; + txtInputPath.SelectAll(); + UpdateActions(); + if (fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBEntry) { - foreach (var entry in (parent as FileSystemTreeNodeLocalDBFolder).Group) + var entry = (fileSystemTreeView1.SelectedNode as FileSystemTreeNodeLocalDBEntry).Item; + textBatchReport.Text = (entry.Log ?? "").Replace("\r", "").Replace("\n", "\r\n"); + } + else if (fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBFolder) + { + var group = (fileSystemTreeView1.SelectedNode as FileSystemTreeNodeLocalDBFolder).Group; + StringBuilder report = new StringBuilder(); + foreach (var entry in group) if (entry.Path != null) if (entry.Status == null || entry.OffsetSafeCRC == null) report.AppendFormat("{0}: never verified\r\n", entry.Path); else report.AppendFormat("{0}: CRC {1,8:X}, {2}\r\n", entry.Path, entry.OffsetSafeCRC.Value[0], entry.Status); - } - else - { - foreach (TreeNode node in parent.Nodes) - if (node is FileSystemTreeNodeLocalDBEntry) - { - var entry = (node as FileSystemTreeNodeLocalDBEntry).Item; - if (entry.Path != null) - if (entry.Status == null || entry.OffsetSafeCRC == null) - report.AppendFormat("{0}: never verified\r\n", entry.Path); - else - report.AppendFormat("{0}: CRC {1,8:X}, {2}\r\n", entry.Path, entry.OffsetSafeCRC.Value[0], entry.Status); - } - else - DumpLocalDB(report, node); - } - } - - private void fileSystemTreeView1_AfterSelect(object sender, TreeViewEventArgs e) - { - if (fileSystemTreeView1.SelectedPath != null) - { - InputPath = fileSystemTreeView1.SelectedPath; - txtInputPath.SelectAll(); - } - if (FileBrowserState == FileBrowserStateEnum.LocalDB && fileSystemTreeView1.SelectedNode != null) - { - if (fileSystemTreeView1.SelectedNode is FileSystemTreeNodeLocalDBEntry) - { - var entry = (fileSystemTreeView1.SelectedNode as FileSystemTreeNodeLocalDBEntry).Item; - textBatchReport.Text = (entry.Log ?? "").Replace("\r", "").Replace("\n", "\r\n"); - } - else - { - StringBuilder report = new StringBuilder(); - DumpLocalDB(report, fileSystemTreeView1.SelectedNode); - textBatchReport.Text = report.ToString(); - } + textBatchReport.Text = report.ToString(); } } @@ -2028,9 +1924,6 @@ namespace JDP { fileSystemTreeView1.Nodes.Add(node); } break; - case FileBrowserStateEnum.LocalDB: - // ??? - break; } fileSystemTreeView1.Focus(); } @@ -2139,9 +2032,6 @@ namespace JDP { } fileSystemTreeView1.Select(); break; - case FileBrowserStateEnum.LocalDB: - // ??? - break; } } if (WindowState == FormWindowState.Minimized) @@ -2549,8 +2439,6 @@ namespace JDP { FileBrowserState = FileBrowserStateEnum.Checkboxes; if (e.ClickedItem == toolStripMenuItemInputBrowserDrag) FileBrowserState = FileBrowserStateEnum.DragDrop; - if (e.ClickedItem == toolStripMenuItemLocalDatabase) - FileBrowserState = FileBrowserStateEnum.LocalDB; if (e.ClickedItem == toolStripMenuItemInputBrowserHide) FileBrowserState = FileBrowserStateEnum.Hidden; SetupControls(false); @@ -2953,4 +2841,110 @@ namespace JDP { this.Nodes.Add(new FileSystemTreeNodeLocalDBGroup(icon_mgr, group, ShowArtist, ShowYear, m_converter_icon(group[0]), m_converter_name(group[0]))); } } + + public class FileSystemTreeNodeLocalDB : FileSystemTreeNodeLocalDBFolder + { + public override string Path + { + get + { + return null; + } + } + + public override string DisplayName + { + get + { + return "Local DB"; + } + } + + public override int DisplayIcon + { + get + { + return icon_mgr.GetIconIndex(".#puzzle"); + } + } + + public FileSystemTreeNodeLocalDB(CUEControls.IIconManager icon_mgr, List group) + : base(icon_mgr) + { + this.Group = group; + this.SelectedImageIndex = this.ImageIndex = this.DisplayIcon; + this.Text = this.DisplayName; + } + + public override void DoExpand() + { + this.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( + icon_mgr, this.Group, true, true, icon_mgr.GetIconIndex(".#puzzle"), "By Uniqueness", + i => ((int)FileSystemTreeNodeLocalDBCollision.GetGroupType(this.Group.FindAll(j => j.DiscID == i.DiscID))).ToString(), + i => FileSystemTreeNodeLocalDBCollision.GroupTypeToDescription(FileSystemTreeNodeLocalDBCollision.GetGroupType(this.Group.FindAll(j => j.DiscID == i.DiscID))), + i => icon_mgr.GetIconIndex(FileSystemTreeNodeLocalDBCollision.GroupTypeToIconTag(FileSystemTreeNodeLocalDBCollision.GetGroupType(this.Group.FindAll(j => j.DiscID == i.DiscID)))))); //converter_icon + + this.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( + icon_mgr, this.Group, true, true, icon_mgr.GetIconIndex(".flac"), "By Format", + i => i.AudioPaths == null || i.AudioPaths.Count == 0 ? null : System.IO.Path.GetExtension(i.AudioPaths[0]).ToLower(), + null, + i => icon_mgr.GetIconIndex(i.AudioPaths[0]))); + + this.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( + icon_mgr, this.Group, false, true, icon_mgr.GetIconIndex(".#users"), "By Artist", + i => i.Metadata.Artist, null, null)); + + this.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( + icon_mgr, this.Group, true, false, icon_mgr.GetIconIndex(".#calendar"), "By Release Date", + i => i.Metadata.Year, null, null)); + + this.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( + icon_mgr, this.Group, true, true, icon_mgr.GetIconIndex(".#alarm_clock"), "By Verification Date", + i => + i.VerificationDate == DateTime.MinValue ? "0" : + i.VerificationDate.AddHours(1) > DateTime.Now ? "1" : + i.VerificationDate.AddDays(1) > DateTime.Now ? "2" : + i.VerificationDate.AddDays(7) > DateTime.Now ? "3" : + i.VerificationDate.AddDays(31) > DateTime.Now ? "4" : + i.VerificationDate.AddDays(365) > DateTime.Now ? "5" : + "6", + i => + i.VerificationDate == DateTime.MinValue ? "never" : + i.VerificationDate.AddHours(1) > DateTime.Now ? "this hour" : + i.VerificationDate.AddDays(1) > DateTime.Now ? "this day" : + i.VerificationDate.AddDays(7) > DateTime.Now ? "this week" : + i.VerificationDate.AddDays(31) > DateTime.Now ? "this month" : + i.VerificationDate.AddDays(365) > DateTime.Now ? "this year" : + "more than a year ago", + null)); + + this.Nodes.Add(new FileSystemTreeNodeLocalDBCategory( + icon_mgr, this.Group, true, true, icon_mgr.GetIconIndex(".#ar"), "By AccurateRip Confidence", + i => + i.VerificationDate == DateTime.MinValue ? "00" : + i.ARConfidence == 0 ? "01" : + i.ARConfidence == 1 ? "02" : + i.ARConfidence == 2 ? "03" : + i.ARConfidence == 3 ? "04" : + i.ARConfidence < 5 ? "05" : + i.ARConfidence < 10 ? "06" : + i.ARConfidence < 20 ? "07" : + i.ARConfidence < 50 ? "08" : + i.ARConfidence < 100 ? "09" : + "10", + i => + i.VerificationDate == DateTime.MinValue ? "?" : + i.ARConfidence == 0 ? "0" : + i.ARConfidence == 1 ? "1" : + i.ARConfidence == 2 ? "2" : + i.ARConfidence == 3 ? "3" : + i.ARConfidence < 5 ? "< 5" : + i.ARConfidence < 10 ? "< 10" : + i.ARConfidence < 20 ? "< 20" : + i.ARConfidence < 50 ? "< 50" : + i.ARConfidence < 100 ? "< 100" : + ">=100", + null)); + } + } } diff --git a/CUETools/frmCUETools.resx b/CUETools/frmCUETools.resx index b43f1a6..0720d08 100644 --- a/CUETools/frmCUETools.resx +++ b/CUETools/frmCUETools.resx @@ -252,21 +252,6 @@ 0 - - Top, Bottom, Left, Right - - - 19 - - - 3, 17 - - - 192, 304 - - - 1 - fileSystemTreeView1 @@ -312,9 +297,1032 @@ 3 + + 3, 17 + + + tableLayoutPanelVerifyMode + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxMode + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxSkipRecent" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBoxVerifyUseLocal" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="checkBoxVerifyUseCDRepair" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333,Absolute,20" /><Rows Styles="Percent,32,72727,Percent,67,27273" /></TableLayoutSettings> + + + tableLayoutPanelCUEStyle + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxMode + + + 1 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxUseAccurateRip" Row="4" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBoxUseFreeDb" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="rbTracks" Row="2" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="rbEmbedCUE" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="rbSingleFile" Row="1" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="checkBoxUseMusicBrainz" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,33,33332,Percent,33,33334,Percent,33,33334" /><Rows Styles="Percent,18,18229,Percent,18,18229,Percent,18,18229,Percent,22,72658,Percent,22,72658" /></TableLayoutSettings> + + + toolStripCorrectorFormat + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxMode + + + 2 + + + Fill + + + 173, 101 + + + 150, 130 + + + 12 + + + Mode + + + groupBoxMode + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 0 + + + labelEncoderMaxMode + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 0 + + + labelEncoderMinMode + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 1 + + + labelEncoderMode + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 2 + + + trackBarEncoderMode + + + System.Windows.Forms.TrackBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 3 + + + comboBoxEncoder + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 4 + + + radioButtonAudioNone + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 5 + + + radioButtonAudioLossy + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 6 + + + radioButtonAudioHybrid + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 7 + + + radioButtonAudioLossless + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 8 + + + labelFormat + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 9 + + + comboBoxAudioFormat + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAudioOutput + + + 10 + + + Fill + + + 329, 101 + + + 148, 194 + + + 2 + + + Audio Output + + + grpAudioOutput + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 1 + + + Fill + + + NoControl + + + 3, 237 + + + 164, 90 + + + Zoom + + + 15 + + + pictureBoxMotd + + + System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 2 + + + 2 + + + Fill + + + NoControl + + + 0, 48 + + + 0, 0, 0, 0 + + + 97, 24 + + + 13 + + + Template: + + + MiddleLeft + + + labelOutputTemplate + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelPaths + + + 0 + + + Fill + + + 100, 51 + + + 365, 21 + + + 9 + + + 153, 8 + + + Template for output files (foobar2000 format) + + + comboBoxOutputFormat + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelPaths + + + 1 + + + Fill + + + 100, 3 + + + 365, 21 + + + 0 + + + Input file + + + txtInputPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelPaths + + + 2 + + + Fill + + + 100, 27 + + + 365, 21 + + + 0 + + + Output file + + + txtOutputPath + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelPaths + + + 3 + + + 0, 0 + + + Fill + + + 38, 21 + + + Input: + + + 177, 22 + + + Folder browser + + + 177, 22 + + + Multiselect Browser + + + 177, 22 + + + Drag'n'drop mode + + + 177, 22 + + + Hide browser + + + Magenta + + + 32, 21 + + + Open/close input browser + + + 0, 0 + + + 0, 0, 0, 0 + + + 97, 24 + + + 14 + + + toolStripInput + + + toolStripInput + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelPaths + + + 4 + + + 0, 24 + + + Fill + + + 0, 24 + + + 0, 0, 0, 0 + + + 97, 24 + + + 15 + + + toolStripOutput + + + toolStripOutput + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelPaths + + + 5 + + + Fill + + + 3, 17 + + + 0, 0, 0, 0 + + + 3 + + + 468, 72 + + + 14 + + + tableLayoutPanelPaths + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpOutputPathGeneration + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelOutputTemplate" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="comboBoxOutputFormat" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="txtInputPath" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="txtOutputPath" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="toolStripInput" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="toolStripOutput" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,20,94017,Percent,79,05983" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> + + + Fill + + + 3, 3 + + + 474, 92 + + + 1 + + + CUE Paths + + + grpOutputPathGeneration + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 3 + + + comboBoxScript + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAction + + + 0 + + + rbActionCorrectFilenames + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAction + + + 1 + + + rbActionCreateCUESheet + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAction + + + 2 + + + rbActionVerify + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAction + + + 3 + + + rbActionEncode + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpAction + + + 4 + + + Fill + + + 3, 101 + + + 164, 130 + + + 4 + + + Action + + + grpAction + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 4 + + + tableLayoutPanel4 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpExtra + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelPregap" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblWriteOffset" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numericWriteOffset" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="txtPreGapLength" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelDataTrack" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="txtDataTrackLength" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,56,75676,Percent,43,24324" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> + + + Fill + + + 173, 237 + + + 150, 90 + + + 6 + + + Extra + + + grpExtra + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 5 + + + btnConvert + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelGo + + + 0 + + + btnStop + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelGo + + + 1 + + + btnResume + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelGo + + + 2 + + + btnPause + + + System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + panelGo + + + 3 + + + Fill + + + 338, 301 + + + 12, 3, 12, 3 + + + 130, 26 + + + 14 + + + panelGo + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel2 + + + 6 + + + Fill + + + 204, 0 + + + 0, 0, 0, 0 + + + 4 + + + 480, 330 + + + 1 + + + tableLayoutPanel2 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel1 + + + 2 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="groupBoxMode" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="grpAudioOutput" Row="1" RowSpan="2" Column="2" ColumnSpan="1" /><Control Name="pictureBoxMotd" Row="2" RowSpan="2" Column="0" ColumnSpan="1" /><Control Name="grpOutputPathGeneration" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="grpAction" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="grpExtra" Row="2" RowSpan="2" Column="1" ColumnSpan="1" /><Control Name="panelGo" Row="3" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Percent,35,41667,Percent,32,70833,Percent,31,875" /><Rows Styles="Percent,29,69697,Percent,41,51515,Percent,19,39394,Percent,9,393939" /></TableLayoutSettings> + + + Fill + + + 0, 0 + + + 0, 0, 0, 0 + + + 2 + + + 684, 451 + + + 17 + + + tableLayoutPanel1 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripContainer1.ContentPanel + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="textBatchReport" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="grpInput" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel2" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,480" /><Rows Styles="Absolute,330,Percent,100" /></TableLayoutSettings> + + + 0, 0, 0, 0 + + + 684, 451 + + + toolStripContainer1.ContentPanel + + + System.Windows.Forms.ToolStripContentPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripContainer1 + + + 0 + + + Fill + + + toolStripContainer1.LeftToolStripPanel + + + System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripContainer1 + + + 1 + + + 0, 0 + + + toolStripContainer1.RightToolStripPanel + + + System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripContainer1 + + + 2 + + + 684, 502 + + + 17 + + + toolStripContainer1 + + + 0, 0 + + + None + + + 0, 0 + + + 684, 25 + + + 0 + + + toolStripMenu + + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripContainer1.TopToolStripPanel + + + 0 + + + toolStripContainer1.TopToolStripPanel + + + System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripContainer1 + + + 3 + + + toolStripContainer1 + + + System.Windows.Forms.ToolStripContainer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Top, Bottom, Left, Right + + + 19 + + + 3, 17 + + + 192, 304 + + + 1 + + + fileSystemTreeView1 + + + CUEControls.FileSystemTreeView, CUEControls, Version=2.1.1.0, Culture=neutral, PublicKeyToken=null + + + grpInput + + + 0 + 3 + + checkBoxSkipRecent + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelVerifyMode + + + 0 + + + checkBoxVerifyUseLocal + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelVerifyMode + + + 1 + + + checkBoxVerifyUseCDRepair + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelVerifyMode + + + 2 + + + Fill + + + 3, 17 + + + 2 + + + 144, 110 + + + 2 + + + tableLayoutPanelVerifyMode + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxMode + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxSkipRecent" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBoxVerifyUseLocal" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="checkBoxVerifyUseCDRepair" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333,Absolute,20" /><Rows Styles="Percent,32,72727,Percent,67,27273" /></TableLayoutSettings> + + + 153, 8 + True @@ -333,9 +1341,6 @@ 2 - - 153, 8 - Skip recently verified @@ -417,39 +1422,114 @@ 2 - - Fill - - - 3, 17 - - - 2 - - - 144, 110 - - - 2 - - - tableLayoutPanelVerifyMode - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxMode - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxSkipRecent" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBoxVerifyUseLocal" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="checkBoxVerifyUseCDRepair" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333,Absolute,20" /><Rows Styles="Percent,32,72727,Percent,67,27273" /></TableLayoutSettings> - 3 + + checkBoxUseAccurateRip + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelCUEStyle + + + 0 + + + checkBoxUseFreeDb + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelCUEStyle + + + 1 + + + rbTracks + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelCUEStyle + + + 2 + + + rbEmbedCUE + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelCUEStyle + + + 3 + + + rbSingleFile + + + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelCUEStyle + + + 4 + + + checkBoxUseMusicBrainz + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanelCUEStyle + + + 5 + + + Fill + + + 3, 17 + + + 0, 0, 0, 0 + + + 5 + + + 144, 110 + + + 11 + + + tableLayoutPanelCUEStyle + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + groupBoxMode + + + 1 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxUseAccurateRip" Row="4" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBoxUseFreeDb" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="rbTracks" Row="2" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="rbEmbedCUE" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="rbSingleFile" Row="1" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="checkBoxUseMusicBrainz" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,33,33332,Percent,33,33334,Percent,33,33334" /><Rows Styles="Percent,18,18229,Percent,18,18229,Percent,18,18229,Percent,22,72658,Percent,22,72658" /></TableLayoutSettings> + True @@ -675,39 +1755,6 @@ 5 - - Fill - - - 3, 17 - - - 0, 0, 0, 0 - - - 5 - - - 144, 110 - - - 11 - - - tableLayoutPanelCUEStyle - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBoxMode - - - 1 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="checkBoxUseAccurateRip" Row="4" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="checkBoxUseFreeDb" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="rbTracks" Row="2" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="rbEmbedCUE" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="rbSingleFile" Row="1" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="checkBoxUseMusicBrainz" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,33,33332,Percent,33,33334,Percent,33,33334" /><Rows Styles="Percent,18,18229,Percent,18,18229,Percent,18,18229,Percent,22,72658,Percent,22,72658" /></TableLayoutSettings> - 3, 17 @@ -717,51 +1764,6 @@ Fill - - Magenta - - - 78, 20 - - - Overwrite - - - 168, 22 - - - Locate files - - - Try to locate missing files automatically - - - 168, 22 - - - Change extension - - - Replace extension for audio files with this: - - - Magenta - - - 79, 19 - - - Locate files - - - Magenta - - - 39, 19 - - - flac - 3, 17 @@ -786,32 +1788,50 @@ 2 - - Fill + + Magenta - - 173, 101 + + 78, 20 - - 150, 130 + + Overwrite - - 12 + + Magenta - - Mode + + 79, 19 - - groupBoxMode + + Locate files - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 168, 22 - - tableLayoutPanel2 + + Locate files - - 0 + + Try to locate missing files automatically + + + 168, 22 + + + Change extension + + + Replace extension for audio files with this: + + + Magenta + + + 39, 19 + + + flac False @@ -1173,273 +2193,21 @@ 10 - - Fill - - - 329, 101 - - - 148, 194 - - - 2 - - - Audio Output - - - grpAudioOutput - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 1 - - - Fill - - - NoControl - - - 3, 237 - - - 164, 90 - - - Zoom - - - 15 - - - pictureBoxMotd - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 2 - - - 2 - - - Fill - - - NoControl - - - 0, 48 - - - 0, 0, 0, 0 - - - 97, 24 - - - 13 - - - Template: - - - MiddleLeft - - - labelOutputTemplate - - - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelPaths - - - 0 - - - Fill - - - 100, 51 - - - 365, 21 - - - 9 - - - Template for output files (foobar2000 format) - - - comboBoxOutputFormat - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelPaths - - - 1 - - - Fill - - - 100, 3 - - - 365, 21 - - - 0 - - - Input file - - - txtInputPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelPaths - - - 2 - - - Fill - - - 100, 27 - - - 365, 21 - - - 0 - - - Output file - - - txtOutputPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelPaths - - - 3 - - - 0, 0 - - - Fill - - - 38, 21 - - - Input: - - - 177, 22 - - - Folder browser - - - 177, 22 - - - Multiselect Browser - - - 177, 22 - - - Drag'n'drop mode - - - 177, 22 - - - Local database - - - 177, 22 - - - Hide browser - - - Magenta - - - 32, 21 - - - Open/close input browser - - - 0, 0 - - - 0, 0, 0, 0 - - - 97, 24 - - - 14 - - - toolStripInput - - - toolStripInput - - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelPaths - - - 4 - - - 0, 24 - - - Fill - 48, 24 Output: + + Magenta + + + 32, 21 + + + toolStripSplitButtonOutputBrowser + 143, 22 @@ -1458,102 +2226,6 @@ Use template - - Magenta - - - 32, 21 - - - toolStripSplitButtonOutputBrowser - - - 0, 24 - - - 0, 0, 0, 0 - - - 97, 24 - - - 15 - - - toolStripOutput - - - toolStripOutput - - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanelPaths - - - 5 - - - Fill - - - 3, 17 - - - 0, 0, 0, 0 - - - 3 - - - 468, 72 - - - 14 - - - tableLayoutPanelPaths - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpOutputPathGeneration - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelOutputTemplate" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="comboBoxOutputFormat" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="txtInputPath" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="txtOutputPath" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="toolStripInput" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="toolStripOutput" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Percent,20,94017,Percent,79,05983" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> - - - Fill - - - 3, 3 - - - 474, 92 - - - 1 - - - CUE Paths - - - grpOutputPathGeneration - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 3 - Top, Left, Right @@ -1713,36 +2385,114 @@ 4 - - Fill - - - 3, 101 - - - 164, 130 - - - 4 - - - Action - - - grpAction - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 4 - 2 + + labelPregap + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel4 + + + 0 + + + lblWriteOffset + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel4 + + + 1 + + + numericWriteOffset + + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel4 + + + 2 + + + txtPreGapLength + + + System.Windows.Forms.MaskedTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel4 + + + 3 + + + labelDataTrack + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel4 + + + 4 + + + txtDataTrackLength + + + System.Windows.Forms.MaskedTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tableLayoutPanel4 + + + 5 + + + Fill + + + 3, 17 + + + 0, 0, 0, 0 + + + 3 + + + 144, 70 + + + 6 + + + tableLayoutPanel4 + + + System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + grpExtra + + + 0 + + + <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelPregap" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblWriteOffset" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numericWriteOffset" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="txtPreGapLength" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelDataTrack" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="txtDataTrackLength" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,56,75676,Percent,43,24324" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> + True @@ -1947,66 +2697,6 @@ 5 - - Fill - - - 3, 17 - - - 0, 0, 0, 0 - - - 3 - - - 144, 70 - - - 6 - - - tableLayoutPanel4 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - grpExtra - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="labelPregap" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="lblWriteOffset" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="numericWriteOffset" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="txtPreGapLength" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="labelDataTrack" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="txtDataTrackLength" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,56,75676,Percent,43,24324" /><Rows Styles="Percent,33,33333,Percent,33,33333,Percent,33,33333" /></TableLayoutSettings> - - - Fill - - - 173, 237 - - - 150, 90 - - - 6 - - - Extra - - - grpExtra - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 5 - Fill @@ -2145,161 +2835,17 @@ 3 - - Fill + + Magenta - - 338, 301 + + 73, 22 - - 12, 3, 12, 3 + + default - - 130, 26 - - - 14 - - - panelGo - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel2 - - - 6 - - - Fill - - - 204, 0 - - - 0, 0, 0, 0 - - - 4 - - - 480, 330 - - - 1 - - - tableLayoutPanel2 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tableLayoutPanel1 - - - 2 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="groupBoxMode" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="grpAudioOutput" Row="1" RowSpan="2" Column="2" ColumnSpan="1" /><Control Name="pictureBoxMotd" Row="2" RowSpan="2" Column="0" ColumnSpan="1" /><Control Name="grpOutputPathGeneration" Row="0" RowSpan="1" Column="0" ColumnSpan="3" /><Control Name="grpAction" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="grpExtra" Row="2" RowSpan="2" Column="1" ColumnSpan="1" /><Control Name="panelGo" Row="3" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Percent,35,41667,Percent,32,70833,Percent,31,875" /><Rows Styles="Percent,29,69697,Percent,41,51515,Percent,19,39394,Percent,9,393939" /></TableLayoutSettings> - - - Fill - - - 0, 0 - - - 0, 0, 0, 0 - - - 2 - - - 684, 451 - - - 17 - - - tableLayoutPanel1 - - - System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripContainer1.ContentPanel - - - 0 - - - <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="textBatchReport" Row="1" RowSpan="1" Column="0" ColumnSpan="2" /><Control Name="grpInput" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="tableLayoutPanel2" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Percent,100,Absolute,480" /><Rows Styles="Absolute,330,Percent,100" /></TableLayoutSettings> - - - 0, 0, 0, 0 - - - 684, 451 - - - toolStripContainer1.ContentPanel - - - System.Windows.Forms.ToolStripContentPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripContainer1 - - - 0 - - - Fill - - - toolStripContainer1.LeftToolStripPanel - - - System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripContainer1 - - - 1 - - - 0, 0 - - - toolStripContainer1.RightToolStripPanel - - - System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripContainer1 - - - 2 - - - 684, 502 - - - 17 - - - toolStripContainer1 - - - 0, 0 - - - None + + Profile 100, 23 @@ -2325,18 +2871,6 @@ default - - Magenta - - - 73, 22 - - - default - - - Profile - 6, 25 @@ -2379,54 +2913,18 @@ Batch log - - 0, 0 - - - 684, 25 - - - 0 - - - toolStripMenu - - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripContainer1.TopToolStripPanel - - - 0 - - - toolStripContainer1.TopToolStripPanel - - - System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripContainer1 - - - 3 - - - toolStripContainer1 - - - System.Windows.Forms.ToolStripContainer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - 424, 8 + + 224, 142 + + + contextMenuStripFileTree + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + False @@ -2469,15 +2967,6 @@ Remove item from database - - 224, 142 - - - contextMenuStripFileTree - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 845, 8 @@ -2989,12 +3478,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripMenuItemLocalDatabase - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - toolStripMenuItemInputBrowserHide