public void WavOpusSimilarity()
{
string opusFingerprint;
string pcmFingerprint;
// cut out 30 second from the middle of the file
var opusDataSection = new short[330750];
var pcmDataSection = new short[330750];
Buffer.BlockCopy(opusData, 330750, opusDataSection, 0, 330750);
Buffer.BlockCopy(pcmData, 340775, pcmDataSection, 0, 330750); // starts 1 sec later than opus section
// generate fingerprints
var echoPrint = new CodeGen();
opusFingerprint = echoPrint.Generate(opusDataSection);
pcmFingerprint = echoPrint.Generate(pcmDataSection);
byte[] unbase64edOpusFingerprint = Convert.FromBase64String(opusFingerprint.Replace('-', '+').Replace('_', '/'));
string unzippedOpusFingerprint = ZlibStream.UncompressString(unbase64edOpusFingerprint);
byte[] unbase64edPcmFingerprint = Convert.FromBase64String(pcmFingerprint.Replace('-', '+').Replace('_', '/'));
string unzippedPcmFingerprint = ZlibStream.UncompressString(unbase64edPcmFingerprint);
// compute Damereau-Levenshein Distance in absence of actual fingerprint matching algorithm
int similarity = ComputeLevenshteinDistance(unzippedOpusFingerprint, unzippedPcmFingerprint);
float averageDifferencePerCharacter = (float)similarity / (unzippedOpusFingerprint.Length + unzippedPcmFingerprint.Length / 2);
Assert.Less(averageDifferencePerCharacter, 0.4);
Assert.Greater(averageDifferencePerCharacter, 0.001);
}