コード例 #1
0
        public void CreateFingerprintsTest()
        {
            float[] samples = TestUtilities.GenerateRandomFloatArray(5512 * 10);
            var configuration = new DefaultFingerprintingConfiguration();
            float[][] logarithmizedSpectrum = new[]
                                     {
                                         TestUtilities.GenerateRandomFloatArray(2048),
                                         TestUtilities.GenerateRandomFloatArray(2048),
                                         TestUtilities.GenerateRandomFloatArray(2048)
                                     };
            List<float[][]> dividedLogSpectrum = new List<float[][]>
                                                     {
                                                         new[] { TestUtilities.GenerateRandomFloatArray(2048) },
                                                         new[] { TestUtilities.GenerateRandomFloatArray(2048) },
                                                         new[] { TestUtilities.GenerateRandomFloatArray(2048) }
                                                     };
            spectrumService.Setup(service => service.CreateLogSpectrogram(samples, configuration)).Returns(logarithmizedSpectrum);
            spectrumService.Setup(service => service.CutLogarithmizedSpectrum(logarithmizedSpectrum, configuration.Stride, configuration.FingerprintLength, configuration.Overlap))
                           .Returns(dividedLogSpectrum);
            waveletService.Setup(service => service.ApplyWaveletTransformInPlace(dividedLogSpectrum));
            fingerprintDescriptor.Setup(descriptor => descriptor.ExtractTopWavelets(It.IsAny<float[][]>(), configuration.TopWavelets)).Returns(GenericFingerprint);

            List<bool[]> rawFingerprints = fingerprintService.CreateFingerprints(samples, configuration);

            Assert.AreEqual(3, rawFingerprints.Count);
            foreach (bool[] fingerprint in rawFingerprints)
            {
                Assert.AreEqual(GenericFingerprint, fingerprint);
            }
        }
 public CustomFingerprintingConfiguration()
 {
     DefaultFingerprintingConfiguration defaultFingerprinting = new DefaultFingerprintingConfiguration();
     SamplesPerFingerprint = defaultFingerprinting.SamplesPerFingerprint;
     Overlap = defaultFingerprinting.Overlap;
     WdftSize = defaultFingerprinting.WdftSize;
     MinFrequency = defaultFingerprinting.MinFrequency;
     MaxFrequency = defaultFingerprinting.MaxFrequency;
     TopWavelets = defaultFingerprinting.TopWavelets;
     SampleRate = defaultFingerprinting.SampleRate;
     LogBase = defaultFingerprinting.LogBase;
     FingerprintLength = defaultFingerprinting.FingerprintLength;
     Stride = defaultFingerprinting.Stride;
     LogBins = defaultFingerprinting.LogBins;
     NormalizeSignal = defaultFingerprinting.NormalizeSignal;
     UseDynamicLogBase = defaultFingerprinting.UseDynamicLogBase;
 }
コード例 #3
0
        private void BtnStartClick(object sender, EventArgs e)
        {
            DefaultFingerprintingConfiguration configuration = new DefaultFingerprintingConfiguration();
            switch (hashAlgorithm)
            {
                case HashAlgorithm.LSH:
                    if (!fileList.Any())
                    {
                        MessageBox.Show(Resources.SelectFolderWithSongs, Resources.Songs, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        break;
                    }

                    WinQueryResults winQueryResults = new WinQueryResults(
                        (int)_nudNumberOfFingerprints.Value,
                        (int)_numStaratSeconds.Value,
                        (int)_nudHashtables.Value,
                        (int)_nudKeys.Value,
                        Convert.ToInt32(_nudThreshold.Value),
                        WinUtils.GetStride((StrideType)_cmbStrideType.SelectedIndex, (int)_nudQueryStrideMax.Value, (int)_nudQueryStrideMin.Value, configuration.SamplesPerFingerprint),
                        tagService,
                        modelService,
                        queryBuilder);
                    winQueryResults.Show();
                    winQueryResults.Refresh();
                    winQueryResults.ExtractCandidatesWithMinHashAlgorithm(fileList);
                    break;
                case HashAlgorithm.NeuralHasher:
                    throw new NotImplementedException();
                case HashAlgorithm.None:
                    throw new NotImplementedException();
            }
        }
コード例 #4
0
 private void BtnQueryFromMicrophoneClick(object sender, EventArgs e)
 {
     DefaultFingerprintingConfiguration configuration = new DefaultFingerprintingConfiguration();
     int secondsToRecord = (int)_nudSecondsToRecord.Value;
     int sampleRate = (int)_nudSampleRate.Value;
     string pathToFile = "mic_" + DateTime.Now.Ticks + ".wav";
     _gbQueryMicrophoneBox.Enabled = false;
     Task<float[]>.Factory.StartNew(() => audioService.RecordFromMicrophoneToFile(pathToFile, sampleRate, secondsToRecord)).ContinueWith(
         task =>
             {
                 _gbQueryMicrophoneBox.Enabled = true;
                 WinQueryResults winQueryResults = new WinQueryResults(
                     secondsToRecord,
                     0,
                     (int)_nudHashtables.Value,
                     (int)_nudKeys.Value,
                     (int)_nudThreshold.Value,
                     WinUtils.GetStride((StrideType)_cmbStrideType.SelectedIndex, (int)_nudQueryStrideMax.Value, (int)_nudQueryStrideMin.Value, configuration.SamplesPerFingerprint),
                     tagService,
                     modelService,
                     queryBuilder);
                 winQueryResults.Show();
                 winQueryResults.Refresh();
                 winQueryResults.ExtractCandidatesUsingSamples(task.Result);
             },
         TaskScheduler.FromCurrentSynchronizationContext());
 }