public void QueryIsBuiltFromFileCorrectly()
        {
            const string PathToFile = "path-to-file";
            QueryResult dummyResult = new QueryResult
                { IsSuccessful = true, ResultEntries = It.IsAny<List<ResultEntry>>() };
            List<HashedFingerprint> hashedFingerprints =
                new List<HashedFingerprint>(
                    new[]
                        {
                            new HashedFingerprint(GenericSignature, GenericHashBuckets, 0, 0),
                            new HashedFingerprint(GenericSignature, GenericHashBuckets, 1, 0.928),
                            new HashedFingerprint(GenericSignature, GenericHashBuckets, 2, 0.928 * 2)
                        });

            fingerprintCommandBuilder.Setup(builder => builder.BuildFingerprintCommand()).Returns(fingerprintingSource.Object);
            fingerprintingSource.Setup(source => source.From(PathToFile)).Returns(withAlgorithConfiguration.Object);
            withAlgorithConfiguration.Setup(config => config.WithFingerprintConfig(It.IsAny<DefaultFingerprintConfiguration>())).Returns(usingFingerprintServices.Object);
            usingFingerprintServices.Setup(u => u.UsingServices(audioService.Object)).Returns(fingerprintCommand.Object);
            fingerprintCommand.Setup(command => command.Hash()).Returns(Task.Factory.StartNew(() => hashedFingerprints));
            queryFingerprintService.Setup(service => service.Query(modelService.Object, hashedFingerprints, It.IsAny<DefaultQueryConfiguration>())).Returns(dummyResult);

            QueryResult queryResult = queryCommandBuilder.BuildQueryCommand()
                                   .From(PathToFile)
                                   .UsingServices(modelService.Object, audioService.Object)
                                   .Query()
                                   .Result;

            Assert.AreSame(dummyResult, queryResult);
        }
        public void QueryIsBuiltFromFileCorrectly()
        {
            const string PathToFile = "path-to-file";
            QueryResult dummyResult = new QueryResult { IsSuccessful = true, Results = It.IsAny<List<ResultData>>() };
            List<bool[]> rawFingerprints = new List<bool[]>(new[] { GenericFingerprint, GenericFingerprint, GenericFingerprint });
            fingerprintUnitBuilder.Setup(builder => builder.BuildAudioFingerprintingUnit()).Returns(fingerprintingSource.Object);
            fingerprintingSource.Setup(source => source.From(PathToFile)).Returns(withAlgorithConfiguration.Object);
            withAlgorithConfiguration.Setup(config => config.WithDefaultAlgorithmConfiguration()).Returns(audioFingerprintingUnit.Object);
            audioFingerprintingUnit.Setup(fingerprintingUnit => fingerprintingUnit.FingerprintIt()).Returns(fingerprinter.Object);
            fingerprinter.Setup(finger => finger.AsIs()).Returns(Task<List<bool[]>>.Factory.StartNew(() => rawFingerprints));
            queryFingerprintService.Setup(service => service.Query(rawFingerprints, It.IsAny<DefaultQueryConfiguration>())).Returns(dummyResult);

            QueryResult queryResult = fingerprintQueryBuilder.BuildQuery()
                                   .From(PathToFile)
                                   .WithDefaultConfigurations()
                                   .Query()
                                   .Result;

            Assert.AreEqual(dummyResult, queryResult);
        }
        public void QueryIsBuiltFromFileStartingAtAtSpecificSecondCorrectly()
        {
            const string PathToFile = "path-to-file";
            const int StartAtSecond = 120;
            const int SecondsToQuery = 20;
            QueryResult dummyResult = new QueryResult { IsSuccessful = true, ResultEntries = It.IsAny<List<ResultEntry>>() };
            List<HashedFingerprint> hashDatas = new List<HashedFingerprint>(new[] { new HashedFingerprint(GenericSignature, GenericHashBuckets, 0, 0), new HashedFingerprint(GenericSignature, GenericHashBuckets, 1, 0.928), new HashedFingerprint(GenericSignature, GenericHashBuckets, 2, 0.928 * 2) });
            fingerprintCommandBuilder.Setup(builder => builder.BuildFingerprintCommand()).Returns(fingerprintingSource.Object);
            fingerprintingSource.Setup(source => source.From(PathToFile, SecondsToQuery, StartAtSecond)).Returns(withAlgorithConfiguration.Object);
            withAlgorithConfiguration.Setup(config => config.WithFingerprintConfig(It.IsAny<DefaultFingerprintConfiguration>())).Returns(usingFingerprintServices.Object);
            usingFingerprintServices.Setup(u => u.UsingServices(audioService.Object)).Returns(fingerprintCommand.Object);
            fingerprintCommand.Setup(fingerprintingUnit => fingerprintingUnit.Hash()).Returns(Task.Factory.StartNew(() => hashDatas));
            queryFingerprintService.Setup(service => service.Query(modelService.Object, hashDatas, It.IsAny<DefaultQueryConfiguration>())).Returns(dummyResult);

            QueryResult queryResult = queryCommandBuilder.BuildQueryCommand()
                                   .From(PathToFile, SecondsToQuery, StartAtSecond)
                                   .WithConfigs(
                                    config =>
                                       {
                                           config.SpectrogramConfig.LogBase = 64;
                                       },
                                    config =>
                                       {
                                           config.ThresholdVotes = 20;
                                       })
                                   .UsingServices(modelService.Object, audioService.Object)
                                   .Query()
                                   .Result;

            Assert.AreSame(dummyResult, queryResult);
            fingerprintingSource.Verify(source => source.From(PathToFile, SecondsToQuery, StartAtSecond), Times.Once());
        }
Ejemplo n.º 4
0
 private object[] GetFoundLine(string actualTrack, TrackData recognizedTrack, bool isSuccessful, QueryResult queryResult)
 {
     var bestMatch = queryResult.BestMatch;
     return new object[]
         {
             actualTrack, ToTrackString(recognizedTrack), isSuccessful,
             bestMatch.HammingSimilaritySum, bestMatch.Confidence,
             bestMatch.Coverage,
             bestMatch.QueryMatchLength, bestMatch.TrackStartsAt
         };
 }
        public QueryResult QueryWithTimeSequenceInformation(IModelService modelService, IEnumerable<HashedFingerprint> hashedFingerprints, QueryConfiguration queryConfiguration)
        {
            var allCandidates = GetAllCandidates(modelService, hashedFingerprints, queryConfiguration);
            if (!allCandidates.Any())
            {
                return NoResult;
            }

            var entries = this.GetCandidatesSortedByLCS(allCandidates);

            var resultEntries = entries
                   .Take(queryConfiguration.MaximumNumberOfTracksToReturnAsResult)
                   .Select(datas => new ResultEntry
                    {
                        Track = modelService.ReadTrackByReference(datas.First().TrackReference),
                        Similarity = datas.Count(),
                        SequenceStart = datas.First().SequenceAt,
                        SequenceLength = datas.Last().SequenceAt - datas.First().SequenceAt + 1.48d // TODO 1.48 because of default fingerprint config. For other configurations there is going to be equal to Overlap * ImageLength / SampleRate 
                    })
                    .ToList();

            var returnresult = new QueryResult
                {
                    IsSuccessful = true,
                    ResultEntries = resultEntries,
                    AnalyzedCandidatesCount = allCandidates.Count
                };

            return returnresult;
        }