moving AccurateRipId calculations to CUETools.AccurateRip

This commit is contained in:
chudov
2008-11-28 23:07:43 +00:00
parent d68737bd2e
commit 421364a64d
4 changed files with 39 additions and 67 deletions

View File

@@ -362,49 +362,42 @@ namespace CUETools.AccurateRip
} }
} }
//private string CalculateAccurateRipId() private static uint sumDigits(uint n)
//{ {
// // Calculate the three disc ids used by AR uint r = 0;
// uint discId1 = 0; while (n > 0)
// uint discId2 = 0; {
// uint cddbDiscId = 0; r = r + (n % 10);
n = n / 10;
}
return r;
}
// for (int iTrack = 1; iTrack <= _toc.TrackCount; iTrack++) public static string CalculateCDDBId(CDImageLayout toc)
// { {
// discId1 += _toc[iTrack].Start; uint cddbDiscId = 0;
// discId2 += (_toc[iTrack].Start == 0 ? 1 : _toc[iTrack].Start) * ((uint)iTrack); for (int iTrack = 1; iTrack <= toc.TrackCount; iTrack++)
// cddbDiscId += sumDigits(_toc[iTrack].Start / 75 + 2); cddbDiscId += sumDigits(toc[iTrack].Start / 75 + 2);
// } return string.Format("{0:X8}", ((cddbDiscId << 24) + ((toc.Length / 75 - toc[1].Start / 75) << 8) + (uint)toc.TrackCount) & 0xFFFFFFFF);
// uint trackOffset = _toc.Length; }
// if (_dataTrackLength.HasValue)
// {
// trackOffset += ((90 + 60) * 75) + 150; // 90 second lead-out, 60 second lead-in, 150 sector gap
// cddbDiscId += sumDigits((uint)(trackOffset / 75) + 2);
// trackOffset += _dataTrackLength.Value;
// }
// discId1 += trackOffset;
// discId2 += (trackOffset == 0 ? 1 : trackOffset) * ((uint)TrackCount + 1);
// if (!_dataTrackLength.HasValue && _cddbDiscIdTag != null) public static string CalculateAccurateRipId(CDImageLayout toc)
// { {
// uint cddbDiscIdNum = UInt32.Parse(_cddbDiscIdTag, NumberStyles.HexNumber); // Calculate the three disc ids used by AR
// if ((cddbDiscIdNum & 0xff) == TrackCount + 1) uint discId1 = 0;
// { uint discId2 = 0;
// uint lengthFromTag = ((cddbDiscIdNum >> 8) & 0xffff); for (int iTrack = 1; iTrack <= toc.TrackCount; iTrack++)
// _minDataTrackLength = ((lengthFromTag + _toc[1].Start / 75) - 152) * 75 - trackOffset; if (toc[iTrack].IsAudio)
// } {
// } discId1 += toc[iTrack].Start;
discId2 += Math.Max(toc[iTrack].Start, 1) * toc[iTrack].Number;
// cddbDiscId = ((cddbDiscId % 255) << 24) + }
// ((trackOffset / 75 - _toc[1].Start / 75) << 8) + discId1 += toc.Length;
// (uint)(TrackCount + (_dataTrackLength.HasValue ? 1 : 0)); discId2 += Math.Max(toc.Length, 1) * ((uint)toc.AudioTracks + 1);
discId1 &= 0xFFFFFFFF;
// discId1 &= 0xFFFFFFFF; discId2 &= 0xFFFFFFFF;
// discId2 &= 0xFFFFFFFF; return string.Format("{0:x8}-{1:x8}-{2}", discId1, discId2, CalculateCDDBId(toc).ToLower());
// cddbDiscId &= 0xFFFFFFFF; }
// return String.Format("{0:x8}-{1:x8}-{2:x8}", discId1, discId2, cddbDiscId);
//}
public List<AccDisk> AccDisks public List<AccDisk> AccDisks
{ {

View File

@@ -299,9 +299,6 @@ namespace CUETools.CDImage
return String.Format("{0:00}:{1:00}:{2:00}", min, sec, frame); return String.Format("{0:00}:{1:00}:{2:00}", min, sec, frame);
} }
public string _cddbId;
public string _ArId;
uint _length; uint _length;
string _catalog; string _catalog;
IList<CDTrack> _tracks; IList<CDTrack> _tracks;

View File

@@ -62,8 +62,10 @@ namespace CUERipper
AccurateRipVerify arVerify = new AccurateRipVerify(audioSource.TOC); AccurateRipVerify arVerify = new AccurateRipVerify(audioSource.TOC);
WAVWriter audioDest = new WAVWriter(destFile, audioSource.BitsPerSample, audioSource.ChannelCount, audioSource.SampleRate, toStdout ? Console.OpenStandardOutput() : null); WAVWriter audioDest = new WAVWriter(destFile, audioSource.BitsPerSample, audioSource.ChannelCount, audioSource.SampleRate, toStdout ? Console.OpenStandardOutput() : null);
int[,] buff = new int[audioSource.BestBlockSize, audioSource.ChannelCount]; int[,] buff = new int[audioSource.BestBlockSize, audioSource.ChannelCount];
string CDDBId = AccurateRipVerify.CalculateCDDBId(audioSource.TOC);
string ArId = AccurateRipVerify.CalculateAccurateRipId(audioSource.TOC);
arVerify.ContactAccurateRip(audioSource.TOC._ArId); arVerify.ContactAccurateRip(ArId);
Console.WriteLine("File Info : {0}kHz; {1} channel; {2} bit; {3}", audioSource.SampleRate, audioSource.ChannelCount, audioSource.BitsPerSample, TimeSpan.FromSeconds(audioSource.Length * 1.0 / audioSource.SampleRate)); Console.WriteLine("File Info : {0}kHz; {1} channel; {2} bit; {3}", audioSource.SampleRate, audioSource.ChannelCount, audioSource.BitsPerSample, TimeSpan.FromSeconds(audioSource.Length * 1.0 / audioSource.SampleRate));
Console.WriteLine("Filename : {0}", destFile); Console.WriteLine("Filename : {0}", destFile);
@@ -131,8 +133,8 @@ namespace CUERipper
logWriter.Close(); logWriter.Close();
StreamWriter cueWriter = new StreamWriter(Path.ChangeExtension(destFile, ".cue")); StreamWriter cueWriter = new StreamWriter(Path.ChangeExtension(destFile, ".cue"));
cueWriter.WriteLine("REM DISCID {0}", audioSource.TOC._cddbId); cueWriter.WriteLine("REM DISCID {0}", CDDBId);
cueWriter.WriteLine("REM ACCURATERIPID {0}", audioSource.TOC._ArId); cueWriter.WriteLine("REM ACCURATERIPID {0}", ArId);
cueWriter.WriteLine("REM COMMENT \"{0}\"", programVersion); cueWriter.WriteLine("REM COMMENT \"{0}\"", programVersion);
if (audioSource.TOC.Catalog != null) if (audioSource.TOC.Catalog != null)
cueWriter.WriteLine("CATALOG {0}", audioSource.TOC.Catalog); cueWriter.WriteLine("CATALOG {0}", audioSource.TOC.Catalog);

View File

@@ -107,29 +107,9 @@ namespace CUETools.Ripper.SCSI
// new CDTextEncoderDecoder // new CDTextEncoderDecoder
_toc = new CDImageLayout(toc[toc.Count - 1].StartSector); _toc = new CDImageLayout(toc[toc.Count - 1].StartSector);
uint cddbDiscId = 0;
uint discId1 = 0;
uint discId2 = 0;
for (int iTrack = 0; iTrack < toc.Count - 1; iTrack++) for (int iTrack = 0; iTrack < toc.Count - 1; iTrack++)
{
_toc.AddTrack(new CDTrack((uint)iTrack + 1, toc[iTrack].StartSector, _toc.AddTrack(new CDTrack((uint)iTrack + 1, toc[iTrack].StartSector,
toc[iTrack + 1].StartSector - toc[iTrack].StartSector, toc[iTrack].Control == 0)); toc[iTrack + 1].StartSector - toc[iTrack].StartSector, toc[iTrack].Control == 0));
cddbDiscId += sumDigits((uint)(toc[iTrack].StartSector / 75) + 2);
if (toc[iTrack].Control == 0)
{
discId1 += toc[iTrack].StartSector;
discId2 += (toc[iTrack].StartSector == 0 ? 1 : toc[iTrack].StartSector) * ((uint)iTrack + 1);
}
}
discId1 += toc[toc.Count - 1].StartSector;
discId2 += (toc[toc.Count - 1].StartSector == 0 ? 1 : toc[toc.Count - 1].StartSector) * (_toc.AudioTracks+1);
discId1 &= 0xFFFFFFFF;
discId2 &= 0xFFFFFFFF;
cddbDiscId = (((cddbDiscId % 255) << 24) +
(((uint)(toc[toc.Count - 1].StartSector / 75) - (uint)(toc[0].StartSector / 75)) << 8) +
(uint)(toc.Count - 1)) & 0xFFFFFFFF;
_toc._cddbId = string.Format("{0:X8}", cddbDiscId);
_toc._ArId = string.Format("{0:x8}-{1:x8}-{2:x8}", discId1, discId2, cddbDiscId);
return true; return true;
} }