public void FingerprintConfigurationInheritsDefaultValues()
        {
            var customConfiguration = new CustomFingerprintConfiguration();

            Assert.AreEqual(defaultConfiguration.NormalizeSignal, customConfiguration.NormalizeSignal);
            Assert.AreEqual(defaultConfiguration.SampleRate, customConfiguration.SampleRate);
            Assert.AreEqual(defaultConfiguration.SamplesPerFingerprint, customConfiguration.SamplesPerFingerprint);
            Assert.AreEqual(defaultConfiguration.TopWavelets, customConfiguration.TopWavelets);
        }
        public void CustomValuesAreSetOnFingerprintConfiguration()
        {
            var customConfiguration = new CustomFingerprintConfiguration
                { NormalizeSignal = true, SampleRate = 10024, TopWavelets = 250, };

            Assert.IsTrue(customConfiguration.NormalizeSignal);
            Assert.AreEqual(10024, customConfiguration.SampleRate);
            Assert.AreEqual(250, customConfiguration.TopWavelets);
        }
        public void AudioSamplesAreNormalized()
        {
            const int TenSeconds = 5512 * 10;
            var samples = TestUtilities.GenerateRandomAudioSamples(TenSeconds);
            var fingerprintConfig = new CustomFingerprintConfiguration { NormalizeSignal = true };
            var dividedLogSpectrum = GetDividedLogSpectrum();
            spectrumService.Setup(service => service.CreateLogSpectrogram(samples, It.IsAny<CustomSpectrogramConfig>())).Returns(dividedLogSpectrum);
            waveletDecomposition.Setup(service => service.DecomposeImageInPlace(It.IsAny<float[][]>()));
            fingerprintDescriptor.Setup(descriptor => descriptor.ExtractTopWavelets(It.IsAny<float[][]>(), fingerprintConfig.TopWavelets))
                .Returns(GenericFingerprint);
            audioSamplesNormalizer.Setup(normalizer => normalizer.NormalizeInPlace(samples.Samples));

            fingerprintService.CreateFingerprints(samples, fingerprintConfig);
        }
        public void CorrectFingerprintConfigurationIsUsedWithInstanceConfigTest()
        {
            const string PathToAudioFile = "path-to-audio-file";

            var configuration = new CustomFingerprintConfiguration { FingerprintLength = 1234 };

            var fingerprintCommand = fingerprintCommandBuilder.BuildFingerprintCommand()
                                                              .From(PathToAudioFile)
                                                              .WithFingerprintConfig(configuration)
                                                              .UsingServices(audioService.Object);

            Assert.AreSame(configuration, fingerprintCommand.FingerprintConfiguration);
            Assert.AreEqual(configuration.FingerprintLength, fingerprintCommand.FingerprintConfiguration.FingerprintLength);
        }
        public void CreateLogSpectrogramFromMinimalSamplesLengthTest()
        {
            var configuration = new CustomFingerprintConfiguration { NormalizeSignal = false };
            float[] samples = TestUtilities.GenerateRandomFloatArray(configuration.SamplesPerFingerprint + configuration.WdftSize); // 8192 + 2048

            logUtility.Setup(utility => utility.GenerateLogFrequenciesRanges(configuration)).Returns(new int[33]);
            fftService.Setup(service => service.FFTForward(samples, It.IsAny<int>(), configuration.WdftSize))
                      .Returns(TestUtilities.GenerateRandomFloatArray(2048));

            float[][] result = spectrumService.CreateLogSpectrogram(samples, configuration);

            audioSamplesNormalizer.Verify(service => service.NormalizeInPlace(samples), Times.Never());
            logUtility.Verify(utility => utility.GenerateLogFrequenciesRanges(configuration), Times.Once());

            Assert.AreEqual(configuration.FingerprintLength, result.Length); // 128
            Assert.AreEqual(32, result[0].Length);
        }
        public void GenerateLogFrequenciesRangesTest()
        {
            var defaultConfig = new CustomFingerprintConfiguration { UseDynamicLogBase = false, LogBase = 10 };
            float[] logSpacedFrequencies = new[] // generated in matlab with logspace(2.50242712, 3.3010299957, 33)
                {
                    318.00f, 336.81f, 356.73f, 377.83f, 400.18f, 423.85f, 448.92f, 475.47f, 503.59f, 533.38f, 564.92f,
                    598.34f, 633.73f, 671.21f, 710.91f, 752.96f, 797.50f, 844.67f, 894.63f, 947.54f, 1003.58f, 1062.94f,
                    1125.81f, 1192.40f, 1262.93f, 1337.63f, 1416.75f, 1500.54f, 1589.30f, 1683.30f, 1782.86f, 1888.31f,
                    2000f
                };

            int[] indexes = logUtility.GenerateLogFrequenciesRanges(defaultConfig);

            for (int i = 0; i < logSpacedFrequencies.Length; i++)
            {
                var logSpacedFrequency = logSpacedFrequencies[i];
                int index = logUtility.FrequencyToSpectrumIndex(logSpacedFrequency, defaultConfig.SampleRate, defaultConfig.WdftSize);
                Assert.AreEqual(index, indexes[i]);
            }
        }
        public void FingerprintConfigurationInheritsDefaultValues()
        {
            var customConfiguration = new CustomFingerprintConfiguration();
            var defaultConfiguration = new DefaultFingerprintConfiguration();

            Assert.AreEqual(defaultConfiguration.FingerprintLength, customConfiguration.FingerprintLength);
            Assert.AreEqual(defaultConfiguration.LogBase, customConfiguration.LogBase);
            Assert.AreEqual(defaultConfiguration.LogBins, customConfiguration.LogBins);
            Assert.AreEqual(defaultConfiguration.MaxFrequency, customConfiguration.MaxFrequency);
            Assert.AreEqual(defaultConfiguration.MinFrequency, customConfiguration.MinFrequency);
            Assert.AreEqual(defaultConfiguration.NormalizeSignal, customConfiguration.NormalizeSignal);
            Assert.AreEqual(defaultConfiguration.NumberOfLSHTables, customConfiguration.NumberOfLSHTables);
            Assert.AreEqual(defaultConfiguration.NumberOfMinHashesPerTable, customConfiguration.NumberOfMinHashesPerTable);
            Assert.AreEqual(defaultConfiguration.Overlap, customConfiguration.Overlap);
            Assert.AreEqual(defaultConfiguration.SampleRate, customConfiguration.SampleRate);
            Assert.AreEqual(defaultConfiguration.SamplesPerFingerprint, customConfiguration.SamplesPerFingerprint);
            Assert.IsTrue(defaultConfiguration.Stride.GetType() == customConfiguration.Stride.GetType());
            Assert.AreEqual(defaultConfiguration.TopWavelets, customConfiguration.TopWavelets);
            Assert.AreEqual(defaultConfiguration.UseDynamicLogBase, customConfiguration.UseDynamicLogBase);
            Assert.AreEqual(defaultConfiguration.WdftSize, customConfiguration.WdftSize);
        }
        public void CustomValuesAreSetOnFingerprintConfiguration()
        {
            var staticStride = new StaticStride(2048);
            var customConfiguration = new CustomFingerprintConfiguration
                                          {
                                              FingerprintLength = 256,
                                              LogBase = 4,
                                              LogBins = 46,
                                              MaxFrequency = 22050,
                                              MinFrequency = 5512,
                                              NormalizeSignal = true,
                                              NumberOfLSHTables = 30,
                                              NumberOfMinHashesPerTable = 4,
                                              Overlap = 32,
                                              SampleRate = 10024,
                                              Stride = staticStride,
                                              TopWavelets = 250,
                                              UseDynamicLogBase = true,
                                              WdftSize = 4048
                                          };

            Assert.AreEqual(256, customConfiguration.FingerprintLength);
            Assert.AreEqual(4, customConfiguration.LogBase);
            Assert.AreEqual(46, customConfiguration.LogBins);
            Assert.AreEqual(22050, customConfiguration.MaxFrequency);
            Assert.AreEqual(5512, customConfiguration.MinFrequency);
            Assert.IsTrue(customConfiguration.NormalizeSignal);
            Assert.AreEqual(30, customConfiguration.NumberOfLSHTables);
            Assert.AreEqual(4, customConfiguration.NumberOfMinHashesPerTable);
            Assert.AreEqual(32, customConfiguration.Overlap);
            Assert.AreEqual(10024, customConfiguration.SampleRate);
            Assert.AreEqual(staticStride, customConfiguration.Stride);
            Assert.AreEqual(250, customConfiguration.TopWavelets);
            Assert.IsTrue(customConfiguration.UseDynamicLogBase);
            Assert.AreEqual(4048, customConfiguration.WdftSize);
        }
        public void InvalidMinFrequencyTest()
        {
            var configuration = new CustomFingerprintConfiguration { MinFrequency = 44100 * 2 };

            Assert.Fail();
        }
        public void InvalidWdftSizeTest()
        {
            var configuration = new CustomFingerprintConfiguration { WdftSize = -1 };

            Assert.Fail();
        }
 public void NegativeOverlapTest()
 {
     var configuration = new CustomFingerprintConfiguration { Overlap = -1 };
     
     Assert.Fail();
 }
        public void InvalidNumberOfMinHashesPerTableTest()
        {
            var configuration = new CustomFingerprintConfiguration { NumberOfMinHashesPerTable = 0 };

            Assert.Fail();
        }
        public void InvalidNumberOfLSHTablesTest()
        {
            var configuration = new CustomFingerprintConfiguration { NumberOfLSHTables = 0 };

            Assert.Fail();
        }
        public void InvalidFingerprintLengthTest()
        {
            var configuration = new CustomFingerprintConfiguration { FingerprintLength = 0 };

            Assert.Fail();
        }
        public void InvalidLogBinsTest()
        {
            var configuration = new CustomFingerprintConfiguration { LogBins = 0 };

            Assert.Fail();
        }
        public void InvalidSampleRateTest()
        {
            var configuration = new CustomFingerprintConfiguration { SampleRate = 0 };

            Assert.Fail();
        }
        public void InvalidTopWaveletsTest()
        {
            var configuration = new CustomFingerprintConfiguration { TopWavelets = 0 };

            Assert.Fail();
        }