コード例 #1
0
        public void InvalidMinFrequencyTest()
        {
            var configuration = new CustomSpectrogramConfig
                { FrequencyRange = new FrequencyRange { Max = 5512, Min = -1 } };

            Assert.Fail();
        }
コード例 #2
0
        public void CutLogarithmizedSpectrumOfJustOneFingerprintTest()
        {
            var stride        = new StaticStride(0, 0);
            var configuration = new CustomSpectrogramConfig {
                Stride = stride
            };
            int logSpectrumLength = configuration.ImageLength; // 128
            var logSpectrum       = GetLogSpectrum(logSpectrumLength);

            var cutLogarithmizedSpectrum = spectrumService.CutLogarithmizedSpectrum(logSpectrum, SampleRate, configuration);

            Assert.AreEqual(1, cutLogarithmizedSpectrum.Count);
        }
コード例 #3
0
        public void CreateLogSpectrogramFromMinimalSamplesLengthTest()
        {
            var configuration = new CustomSpectrogramConfig { NormalizeSignal = false };
            var samples = TestUtilities.GenerateRandomAudioSamples(new DefaultFingerprintConfiguration().SamplesPerFingerprint + configuration.WdftSize); // 8192 + 2048
            logUtility.Setup(utility => utility.GenerateLogFrequenciesRanges(SampleRate, configuration)).Returns(new int[33]);
            fftService.Setup(service => service.FFTForward(samples.Samples, It.IsAny<int>(), configuration.WdftSize))
                      .Returns(TestUtilities.GenerateRandomFloatArray(2048));

            var result = spectrumService.CreateLogSpectrogram(samples, configuration);

            logUtility.Verify(utility => utility.GenerateLogFrequenciesRanges(SampleRate, configuration), Times.Once());
            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(configuration.ImageLength, result[0].Image.Length);
        }
コード例 #4
0
        public void CustomSpectrumValuesInheritFromDefault()
        {
            SpectrogramConfig defaultConfiguration = SpectrogramConfig.Default;
            SpectrogramConfig customConfiguration = new CustomSpectrogramConfig();

            Assert.AreEqual(defaultConfiguration.ImageLength, customConfiguration.ImageLength);
            Assert.AreEqual(defaultConfiguration.LogBase, customConfiguration.LogBase);
            Assert.AreEqual(defaultConfiguration.LogBins, customConfiguration.LogBins);
            Assert.AreEqual(defaultConfiguration.FrequencyRange.Max, customConfiguration.FrequencyRange.Max);
            Assert.AreEqual(defaultConfiguration.FrequencyRange.Min, customConfiguration.FrequencyRange.Min);
            Assert.AreEqual(defaultConfiguration.UseDynamicLogBase, customConfiguration.UseDynamicLogBase);
            Assert.AreEqual(defaultConfiguration.WdftSize, customConfiguration.WdftSize);
            Assert.AreEqual(defaultConfiguration.Overlap, customConfiguration.Overlap);
        }
コード例 #5
0
        public void CustomSpectrumValuesInheritFromDefault()
        {
            SpectrogramConfig defaultConfiguration = new DefaultSpectrogramConfig();
            SpectrogramConfig customConfiguration  = new CustomSpectrogramConfig();

            Assert.AreEqual(defaultConfiguration.ImageLength, customConfiguration.ImageLength);
            Assert.AreEqual(defaultConfiguration.LogBase, customConfiguration.LogBase);
            Assert.AreEqual(defaultConfiguration.LogBins, customConfiguration.LogBins);
            Assert.AreEqual(defaultConfiguration.FrequencyRange.Max, customConfiguration.FrequencyRange.Max);
            Assert.AreEqual(defaultConfiguration.FrequencyRange.Min, customConfiguration.FrequencyRange.Min);
            Assert.AreEqual(defaultConfiguration.UseDynamicLogBase, customConfiguration.UseDynamicLogBase);
            Assert.AreEqual(defaultConfiguration.WdftSize, customConfiguration.WdftSize);
            Assert.AreEqual(defaultConfiguration.Overlap, customConfiguration.Overlap);
        }
コード例 #6
0
        public void CreateLogSpectrogramTest()
        {
            var configuration = new CustomSpectrogramConfig { ImageLength = 2048 };
            var samples = TestUtilities.GenerateRandomAudioSamples((configuration.Overlap * configuration.WdftSize) + configuration.WdftSize); // 64 * 2048
            logUtility.Setup(utility => utility.GenerateLogFrequenciesRanges(SampleRate, configuration)).Returns(new int[33]);
            fftService.Setup(service => service.FFTForward(samples.Samples, It.IsAny<int>(), configuration.WdftSize))
                      .Returns(TestUtilities.GenerateRandomFloatArray(2048));

            var result = spectrumService.CreateLogSpectrogram(samples, configuration);

            logUtility.Verify(utility => utility.GenerateLogFrequenciesRanges(SampleRate, configuration), Times.Once());
            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(configuration.WdftSize, result[0].Image.Length);
            Assert.AreEqual(32, result[0].Image[0].Length);
        }
コード例 #7
0
        public void CutLogarithmizedSpectrumTest()
        {
            var stride = new StaticStride(0, 0);
            var configuration = new CustomSpectrogramConfig { Stride = stride };
            const int LogSpectrumLength = 1024;
            var logSpectrum = GetLogSpectrum(LogSpectrumLength);

            var cutLogarithmizedSpectrum = spectrumService.CutLogarithmizedSpectrum(logSpectrum, SampleRate, configuration);
            
            Assert.AreEqual(8, cutLogarithmizedSpectrum.Count);
            double lengthOfOneFingerprint = (double)configuration.ImageLength * configuration.Overlap / SampleRate;
            for (int i = 0; i < cutLogarithmizedSpectrum.Count; i++)
            {
                Assert.IsTrue(
                    System.Math.Abs(cutLogarithmizedSpectrum[i].Timestamp - (i * lengthOfOneFingerprint)) < Epsilon);
            }
        }
コード例 #8
0
        public void CreateLogSpectrogramFromMinimalSamplesLengthTest()
        {
            var configuration = new CustomSpectrogramConfig {
                NormalizeSignal = false
            };
            var samples = TestUtilities.GenerateRandomAudioSamples(new DefaultFingerprintConfiguration().SamplesPerFingerprint + configuration.WdftSize); // 8192 + 2048

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

            var result = spectrumService.CreateLogSpectrogram(samples, configuration);

            logUtility.Verify(utility => utility.GenerateLogFrequenciesRanges(SampleRate, configuration), Times.Once());
            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(configuration.ImageLength, result[0].Image.Length);
        }
コード例 #9
0
        public void CreateLogSpectrogramTest()
        {
            var configuration = new CustomSpectrogramConfig {
                ImageLength = 2048
            };
            var samples = TestUtilities.GenerateRandomAudioSamples((configuration.Overlap * configuration.WdftSize) + configuration.WdftSize); // 64 * 2048

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

            var result = spectrumService.CreateLogSpectrogram(samples, configuration);

            logUtility.Verify(utility => utility.GenerateLogFrequenciesRanges(SampleRate, configuration), Times.Once());
            Assert.AreEqual(1, result.Count);
            Assert.AreEqual(configuration.WdftSize, result[0].Image.Length);
            Assert.AreEqual(32, result[0].Image[0].Length);
        }
コード例 #10
0
        public void CutLogarithmizedSpectrumWithAnIncrementalStaticStride()
        {
            var stride = new IncrementalStaticStride(new DefaultFingerprintConfiguration().SamplesPerFingerprint / 2, new DefaultFingerprintConfiguration().SamplesPerFingerprint, 0);
            var config = new CustomSpectrogramConfig {
                Stride = stride
            };
            int logSpectrumLength = (config.ImageLength * 24) + config.Overlap;
            var logSpectrum       = GetLogSpectrum(logSpectrumLength);

            var cutLogarithmizedSpectrum = spectrumService.CutLogarithmizedSpectrum(logSpectrum, SampleRate, config);

            Assert.AreEqual(48, cutLogarithmizedSpectrum.Count);
            double lengthOfOneFingerprint = (double)config.ImageLength * config.Overlap / SampleRate;

            for (int i = 0; i < cutLogarithmizedSpectrum.Count; i++)
            {
                Assert.IsTrue(System.Math.Abs(cutLogarithmizedSpectrum[i].Timestamp - (i * lengthOfOneFingerprint / 2)) < Epsilon);
            }
        }
コード例 #11
0
        public void GenerateLogFrequenciesRangesTest()
        {
            var defaultConfig = new CustomSpectrogramConfig { 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(defaultFingerprintConfiguration.SampleRate, defaultConfig);

            for (int i = 0; i < logSpacedFrequencies.Length; i++)
            {
                var logSpacedFrequency = logSpacedFrequencies[i];
                int index = logUtility.FrequencyToSpectrumIndex(logSpacedFrequency, defaultFingerprintConfiguration.SampleRate, defaultConfig.WdftSize);
                Assert.AreEqual(index, indexes[i]);
            }
        }
コード例 #12
0
        public void CutLogarithmizedSpectrumTest()
        {
            var stride        = new StaticStride(0, 0);
            var configuration = new CustomSpectrogramConfig {
                Stride = stride
            };
            const int LogSpectrumLength = 1024;
            var       logSpectrum       = GetLogSpectrum(LogSpectrumLength);

            var cutLogarithmizedSpectrum = spectrumService.CutLogarithmizedSpectrum(logSpectrum, SampleRate, configuration);

            Assert.AreEqual(8, cutLogarithmizedSpectrum.Count);
            double lengthOfOneFingerprint = (double)configuration.ImageLength * configuration.Overlap / SampleRate;

            for (int i = 0; i < cutLogarithmizedSpectrum.Count; i++)
            {
                Assert.IsTrue(
                    System.Math.Abs(cutLogarithmizedSpectrum[i].Timestamp - (i * lengthOfOneFingerprint)) < Epsilon);
            }
        }
コード例 #13
0
        public void CustomSpectrumValuesOverrideDefaults()
        {
            var customConfiguration = new CustomSpectrogramConfig
            {
                ImageLength = 256,
                LogBase = 4,
                LogBins = 46,
                FrequencyRange = new FrequencyRange { Min = 5512, Max = 22050 },
                Overlap = 32,
                UseDynamicLogBase = true,
                WdftSize = 4048
            };

            Assert.AreEqual(256, customConfiguration.ImageLength);
            Assert.AreEqual(4, customConfiguration.LogBase);
            Assert.AreEqual(46, customConfiguration.LogBins);
            Assert.AreEqual(22050, customConfiguration.FrequencyRange.Max);
            Assert.AreEqual(5512, customConfiguration.FrequencyRange.Min);
            Assert.AreEqual(32, customConfiguration.Overlap);
            Assert.IsTrue(customConfiguration.UseDynamicLogBase);
            Assert.AreEqual(4048, customConfiguration.WdftSize);
        }
コード例 #14
0
        public void GenerateLogFrequenciesRangesTest()
        {
            var defaultConfig = new CustomSpectrogramConfig {
                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(defaultFingerprintConfiguration.SampleRate, defaultConfig);

            for (int i = 0; i < logSpacedFrequencies.Length; i++)
            {
                var logSpacedFrequency = logSpacedFrequencies[i];
                int index = logUtility.FrequencyToSpectrumIndex(logSpacedFrequency, defaultFingerprintConfiguration.SampleRate, defaultConfig.WdftSize);
                Assert.AreEqual(index, indexes[i]);
            }
        }
コード例 #15
0
        public void CustomSpectrumValuesOverrideDefaults()
        {
            var customConfiguration = new CustomSpectrogramConfig
            {
                ImageLength    = 256,
                LogBase        = 4,
                LogBins        = 46,
                FrequencyRange = new FrequencyRange {
                    Min = 5512, Max = 22050
                },
                Overlap           = 32,
                UseDynamicLogBase = true,
                WdftSize          = 4048
            };

            Assert.AreEqual(256, customConfiguration.ImageLength);
            Assert.AreEqual(4, customConfiguration.LogBase);
            Assert.AreEqual(46, customConfiguration.LogBins);
            Assert.AreEqual(22050, customConfiguration.FrequencyRange.Max);
            Assert.AreEqual(5512, customConfiguration.FrequencyRange.Min);
            Assert.AreEqual(32, customConfiguration.Overlap);
            Assert.IsTrue(customConfiguration.UseDynamicLogBase);
            Assert.AreEqual(4048, customConfiguration.WdftSize);
        }
コード例 #16
0
 public CustomFingerprintConfiguration()
 {
     SpectrogramConfig = new CustomSpectrogramConfig();
     HashingConfig = new CustomHashingConfig();
 }
コード例 #17
0
 public CustomFingerprintConfiguration()
 {
     SpectrogramConfig = new CustomSpectrogramConfig();
     HashingConfig     = new CustomHashingConfig();
 }
コード例 #18
0
        public void InvalidFingerprintLengthTest()
        {
            var configuration = new CustomSpectrogramConfig { ImageLength = 0 };

            Assert.Fail();
        }
コード例 #19
0
        public void NegativeOverlapTest()
        {
            var configuration = new CustomSpectrogramConfig { Overlap = -1 };

            Assert.Fail();
        }
コード例 #20
0
        public void CutLogarithmizedSpectrumWithSpectrumWhichIsLessThanMinimalLengthOfOneFingerprintTest()
        {
            var stride = new StaticStride(0, 0);
            var config = new CustomSpectrogramConfig { Stride = stride };
            int logSpectrumLength = config.ImageLength - 1;
            var logSpectrum = GetLogSpectrum(logSpectrumLength);

            var cutLogarithmizedSpectrum = spectrumService.CutLogarithmizedSpectrum(logSpectrum, SampleRate, config);

            Assert.AreEqual(0, cutLogarithmizedSpectrum.Count);
        }
コード例 #21
0
        public void CutLogarithmizedSpectrumWithAnIncrementalStaticStride()
        {
            var stride = new IncrementalStaticStride(new DefaultFingerprintConfiguration().SamplesPerFingerprint / 2, new DefaultFingerprintConfiguration().SamplesPerFingerprint, 0);
            var config = new CustomSpectrogramConfig { Stride = stride };
            int logSpectrumLength = (config.ImageLength * 24) + config.Overlap;
            var logSpectrum = GetLogSpectrum(logSpectrumLength);

            var cutLogarithmizedSpectrum = spectrumService.CutLogarithmizedSpectrum(logSpectrum, SampleRate, config);
            
            Assert.AreEqual(48, cutLogarithmizedSpectrum.Count);
            double lengthOfOneFingerprint = (double)config.ImageLength * config.Overlap / SampleRate;
            for (int i = 0; i < cutLogarithmizedSpectrum.Count; i++)
            {
                Assert.IsTrue(System.Math.Abs(cutLogarithmizedSpectrum[i].Timestamp - (i * lengthOfOneFingerprint / 2)) < Epsilon);
            }
        }
コード例 #22
0
        public void CutLogarithmizedSpectrumOfJustOneFingerprintTest()
        {
            var stride = new StaticStride(0, 0);
            var configuration = new CustomSpectrogramConfig { Stride = stride };
            int logSpectrumLength = configuration.ImageLength; // 128
            var logSpectrum = GetLogSpectrum(logSpectrumLength);

            var cutLogarithmizedSpectrum = spectrumService.CutLogarithmizedSpectrum(logSpectrum, SampleRate, configuration);
            
            Assert.AreEqual(1, cutLogarithmizedSpectrum.Count);
        }
コード例 #23
0
        public void InvalidLogBinsTest()
        {
            var configuration = new CustomSpectrogramConfig { LogBins = 0 };

            Assert.Fail();
        }
コード例 #24
0
        public void InvalidWdftSizeTest()
        {
            var configuration = new CustomSpectrogramConfig { WdftSize = -1 };

            Assert.Fail();
        }