Having 3 or more versions of the same ripping with uncorrelated errors would be quite simple and fast to implement in matlab, just like 2Bdecided suggested.
The following lines seems to do the trick:
%% load 3 separate distorted files
a = wavread('file1.wav');
b = wavread('file2.wav');
c = wavread('file3.wav');
%% find most likely
d = median(cat(3,a,b,c),3);
%% write output
wavwrite(d);
As indicated by this test-code:
%% test-code
load handel
y = [y flipud(y)];
a = y;
a(100,1) = 1;
b = y;
b(1000,2) = -1;
c = y;
c(1,:) = 1;
tic
d = median(cat(3,a,b,c),3);
t=toc;
samples_on_cd = 44100*60*73;
time_spent_processing_one_CD = samples_on_cd*t/length(y)
assert(all(d(:)==y(:)))
assert(~all(d(:)==a(:)))
assert(~all(d(:)==b(:)))
assert(~all(d(:)==c(:)))
linear scaling of results suggest that processing one CD would take 1 minute of processing time - excluding disk i/o. In practice you might run out of memory for such large files. Frame-based i/o and processing is just a few lines more.
If the error model include sample insertion/dropping, then you need a much more complicated algo, doing correlation or something.
-k