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()); }
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; }