2011-04-08 14:41:28 +00:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using CUETools.AccurateRip;
|
|
|
|
|
|
using CUETools.Codecs;
|
|
|
|
|
|
using CUETools.CDImage;
|
|
|
|
|
|
|
|
|
|
|
|
namespace CUETools.TestHelpers
|
|
|
|
|
|
{
|
|
|
|
|
|
public class TestImageGenerator
|
|
|
|
|
|
{
|
|
|
|
|
|
public CDImageLayout toc;
|
2011-11-15 10:56:49 +00:00
|
|
|
|
public int seed, offset, start, end, errors, maxStrideErrors;
|
2011-04-08 14:41:28 +00:00
|
|
|
|
|
2011-11-15 10:56:49 +00:00
|
|
|
|
public TestImageGenerator(CDImageLayout toc, int seed, int offset, int errors, int maxStrideErrors, int start, int end)
|
2011-04-08 14:41:28 +00:00
|
|
|
|
{
|
|
|
|
|
|
this.toc = toc;
|
|
|
|
|
|
this.seed = seed;
|
|
|
|
|
|
this.offset = offset;
|
|
|
|
|
|
this.start = start;
|
|
|
|
|
|
this.end = end;
|
|
|
|
|
|
this.errors = errors;
|
2011-11-15 10:56:49 +00:00
|
|
|
|
this.maxStrideErrors = maxStrideErrors;
|
2011-04-08 14:41:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2011-11-15 10:56:49 +00:00
|
|
|
|
public TestImageGenerator(string trackoffsets, int seed, int offset, int errors, int maxStrideErrors, int start, int end)
|
|
|
|
|
|
: this(new CDImageLayout(trackoffsets), seed, offset, errors, maxStrideErrors, start, end)
|
2011-04-08 14:41:28 +00:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2011-11-15 10:56:49 +00:00
|
|
|
|
public TestImageGenerator(CDImageLayout toc, int seed, int offset, int errors = 0, int maxStrideErrors = 0)
|
|
|
|
|
|
: this(toc, seed, offset, errors, maxStrideErrors, 0, (int)toc.AudioLength * 588)
|
2011-04-08 14:41:28 +00:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2011-11-15 10:56:49 +00:00
|
|
|
|
public TestImageGenerator(string trackoffsets, int seed, int offset = 0, int errors = 0, int maxStrideErrors = 0)
|
|
|
|
|
|
: this(new CDImageLayout(trackoffsets), seed, offset, errors, maxStrideErrors)
|
2011-04-08 14:41:28 +00:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public TestImageGenerator(TestImageGenerator copy)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.toc = copy.toc;
|
|
|
|
|
|
this.seed = copy.seed;
|
|
|
|
|
|
this.offset = copy.offset;
|
|
|
|
|
|
this.start = copy.start;
|
|
|
|
|
|
this.end = copy.end;
|
|
|
|
|
|
this.errors = copy.errors;
|
2011-11-15 10:56:49 +00:00
|
|
|
|
this.maxStrideErrors = copy.maxStrideErrors;
|
2011-04-08 14:41:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Write(IAudioDest dest)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (start < 0 || start > end || end > toc.AudioLength * 588)
|
|
|
|
|
|
throw new ArgumentOutOfRangeException();
|
2011-11-15 10:56:49 +00:00
|
|
|
|
var src = new NoiseAndErrorsGenerator(AudioPCMConfig.RedBook, end - start, seed, offset + start, errors, maxStrideErrors);
|
2011-04-08 14:41:28 +00:00
|
|
|
|
var buff = new AudioBuffer(src, 588 * 10);
|
|
|
|
|
|
var rnd = new Random(seed);
|
|
|
|
|
|
//dest.Position = start;
|
|
|
|
|
|
while (src.Remaining > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
src.Read(buff, rnd.Next(1, buff.Size));
|
|
|
|
|
|
dest.Write(buff);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public AccurateRipVerify CreateAccurateRipVerify()
|
|
|
|
|
|
{
|
|
|
|
|
|
var ar = new AccurateRipVerify(toc, null);
|
|
|
|
|
|
ar.Position = start;
|
|
|
|
|
|
Write(ar);
|
|
|
|
|
|
return ar;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2011-10-27 20:50:11 +00:00
|
|
|
|
public CDRepairEncode CreateCDRepairEncode(int stride)
|
2011-04-08 14:41:28 +00:00
|
|
|
|
{
|
|
|
|
|
|
var ar = new AccurateRipVerify(toc, null);
|
2011-10-27 20:50:11 +00:00
|
|
|
|
var encode = new CDRepairEncode(ar, stride);
|
2011-04-08 14:41:28 +00:00
|
|
|
|
ar.Position = start;
|
|
|
|
|
|
Write(ar);
|
2011-04-24 21:07:50 +00:00
|
|
|
|
//ar.Close();
|
2011-04-08 14:41:28 +00:00
|
|
|
|
return encode;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static AccurateRipVerify CreateAccurateRipVerify(string trackoffsets, int seed, int offset, int start, int end)
|
|
|
|
|
|
{
|
2011-11-15 10:56:49 +00:00
|
|
|
|
var generator = new TestImageGenerator(trackoffsets, seed, offset, 0, 0, start, end);
|
2011-04-08 14:41:28 +00:00
|
|
|
|
return generator.CreateAccurateRipVerify();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static AccurateRipVerify CreateAccurateRipVerify(string trackoffsets, int seed, int offset)
|
|
|
|
|
|
{
|
2011-11-15 10:56:49 +00:00
|
|
|
|
var generator = new TestImageGenerator(trackoffsets, seed, offset, 0, 0);
|
2011-04-08 14:41:28 +00:00
|
|
|
|
return generator.CreateAccurateRipVerify();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|