mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
moving AccurateRipId calculations to CUETools.AccurateRip
This commit is contained in:
@@ -362,49 +362,42 @@ namespace CUETools.AccurateRip
|
||||
}
|
||||
}
|
||||
|
||||
//private string CalculateAccurateRipId()
|
||||
//{
|
||||
// // Calculate the three disc ids used by AR
|
||||
// uint discId1 = 0;
|
||||
// uint discId2 = 0;
|
||||
// uint cddbDiscId = 0;
|
||||
private static uint sumDigits(uint n)
|
||||
{
|
||||
uint r = 0;
|
||||
while (n > 0)
|
||||
{
|
||||
r = r + (n % 10);
|
||||
n = n / 10;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
// for (int iTrack = 1; iTrack <= _toc.TrackCount; iTrack++)
|
||||
// {
|
||||
// discId1 += _toc[iTrack].Start;
|
||||
// discId2 += (_toc[iTrack].Start == 0 ? 1 : _toc[iTrack].Start) * ((uint)iTrack);
|
||||
// cddbDiscId += sumDigits(_toc[iTrack].Start / 75 + 2);
|
||||
// }
|
||||
// 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);
|
||||
public static string CalculateCDDBId(CDImageLayout toc)
|
||||
{
|
||||
uint cddbDiscId = 0;
|
||||
for (int iTrack = 1; iTrack <= toc.TrackCount; iTrack++)
|
||||
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);
|
||||
}
|
||||
|
||||
// if (!_dataTrackLength.HasValue && _cddbDiscIdTag != null)
|
||||
// {
|
||||
// uint cddbDiscIdNum = UInt32.Parse(_cddbDiscIdTag, NumberStyles.HexNumber);
|
||||
// if ((cddbDiscIdNum & 0xff) == TrackCount + 1)
|
||||
// {
|
||||
// uint lengthFromTag = ((cddbDiscIdNum >> 8) & 0xffff);
|
||||
// _minDataTrackLength = ((lengthFromTag + _toc[1].Start / 75) - 152) * 75 - trackOffset;
|
||||
// }
|
||||
// }
|
||||
|
||||
// cddbDiscId = ((cddbDiscId % 255) << 24) +
|
||||
// ((trackOffset / 75 - _toc[1].Start / 75) << 8) +
|
||||
// (uint)(TrackCount + (_dataTrackLength.HasValue ? 1 : 0));
|
||||
|
||||
// discId1 &= 0xFFFFFFFF;
|
||||
// discId2 &= 0xFFFFFFFF;
|
||||
// cddbDiscId &= 0xFFFFFFFF;
|
||||
|
||||
// return String.Format("{0:x8}-{1:x8}-{2:x8}", discId1, discId2, cddbDiscId);
|
||||
//}
|
||||
public static string CalculateAccurateRipId(CDImageLayout toc)
|
||||
{
|
||||
// Calculate the three disc ids used by AR
|
||||
uint discId1 = 0;
|
||||
uint discId2 = 0;
|
||||
for (int iTrack = 1; iTrack <= toc.TrackCount; iTrack++)
|
||||
if (toc[iTrack].IsAudio)
|
||||
{
|
||||
discId1 += toc[iTrack].Start;
|
||||
discId2 += Math.Max(toc[iTrack].Start, 1) * toc[iTrack].Number;
|
||||
}
|
||||
discId1 += toc.Length;
|
||||
discId2 += Math.Max(toc.Length, 1) * ((uint)toc.AudioTracks + 1);
|
||||
discId1 &= 0xFFFFFFFF;
|
||||
discId2 &= 0xFFFFFFFF;
|
||||
return string.Format("{0:x8}-{1:x8}-{2}", discId1, discId2, CalculateCDDBId(toc).ToLower());
|
||||
}
|
||||
|
||||
public List<AccDisk> AccDisks
|
||||
{
|
||||
|
||||
@@ -299,9 +299,6 @@ namespace CUETools.CDImage
|
||||
return String.Format("{0:00}:{1:00}:{2:00}", min, sec, frame);
|
||||
}
|
||||
|
||||
public string _cddbId;
|
||||
public string _ArId;
|
||||
|
||||
uint _length;
|
||||
string _catalog;
|
||||
IList<CDTrack> _tracks;
|
||||
|
||||
@@ -62,8 +62,10 @@ namespace CUERipper
|
||||
AccurateRipVerify arVerify = new AccurateRipVerify(audioSource.TOC);
|
||||
WAVWriter audioDest = new WAVWriter(destFile, audioSource.BitsPerSample, audioSource.ChannelCount, audioSource.SampleRate, toStdout ? Console.OpenStandardOutput() : null);
|
||||
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("Filename : {0}", destFile);
|
||||
@@ -131,8 +133,8 @@ namespace CUERipper
|
||||
logWriter.Close();
|
||||
|
||||
StreamWriter cueWriter = new StreamWriter(Path.ChangeExtension(destFile, ".cue"));
|
||||
cueWriter.WriteLine("REM DISCID {0}", audioSource.TOC._cddbId);
|
||||
cueWriter.WriteLine("REM ACCURATERIPID {0}", audioSource.TOC._ArId);
|
||||
cueWriter.WriteLine("REM DISCID {0}", CDDBId);
|
||||
cueWriter.WriteLine("REM ACCURATERIPID {0}", ArId);
|
||||
cueWriter.WriteLine("REM COMMENT \"{0}\"", programVersion);
|
||||
if (audioSource.TOC.Catalog != null)
|
||||
cueWriter.WriteLine("CATALOG {0}", audioSource.TOC.Catalog);
|
||||
|
||||
@@ -107,29 +107,9 @@ namespace CUETools.Ripper.SCSI
|
||||
// new CDTextEncoderDecoder
|
||||
|
||||
_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++)
|
||||
{
|
||||
_toc.AddTrack(new CDTrack((uint)iTrack + 1, toc[iTrack].StartSector,
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user