コード例 #1
0
        public void ReadByTrackGroupIdWorksAsExpectedTest()
        {
            const int StaticStride = 5115;
            TagInfo   tagInfo      = GetTagInfo();
            TrackData firstTrack   = new TrackData(tagInfo);
            TrackData secondTrack  = new TrackData(tagInfo);

            var firstTrackReference  = trackDao.InsertTrack(firstTrack);
            var secondTrackReference = trackDao.InsertTrack(secondTrack);

            var hashedFingerprintsForFirstTrack = fcb
                                                  .BuildFingerprintCommand()
                                                  .From(PathToMp3, 20, 0)
                                                  .WithFingerprintConfig(config =>
            {
                config.Stride   = new IncrementalStaticStride(StaticStride);
                config.Clusters = new[] { "first-group-id" };
            }).UsingServices(audioService)
                                                  .Hash()
                                                  .Result;

            InsertHashedFingerprintsForTrack(hashedFingerprintsForFirstTrack, firstTrackReference);

            var hashedFingerprintsForSecondTrack = fcb
                                                   .BuildFingerprintCommand()
                                                   .From(PathToMp3, 20, 0)
                                                   .WithFingerprintConfig(config =>
            {
                config.Stride   = new IncrementalStaticStride(StaticStride);
                config.Clusters = new[] { "second-group-id" };
            }).UsingServices(audioService)
                                                   .Hash()
                                                   .Result;

            InsertHashedFingerprintsForTrack(hashedFingerprintsForSecondTrack, secondTrackReference);

            const int ThresholdVotes = 25;

            foreach (var hashedFingerprint in hashedFingerprintsForFirstTrack)
            {
                var subFingerprintData =
                    subFingerprintDao.ReadSubFingerprints(
                        hashedFingerprint.HashBins, ThresholdVotes, new[] { "first-group-id" }).ToList();

                Assert.IsTrue(subFingerprintData.Count == 1);
                Assert.AreEqual(firstTrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData =
                    subFingerprintDao.ReadSubFingerprints(
                        hashedFingerprint.HashBins, ThresholdVotes, new[] { "second-group-id" }).ToList();

                Assert.IsTrue(subFingerprintData.Count == 1);
                Assert.AreEqual(secondTrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao.ReadSubFingerprints(hashedFingerprint.HashBins, ThresholdVotes, Enumerable.Empty <string>()).ToList();
                Assert.AreEqual(2, subFingerprintData.Count);
            }
        }
コード例 #2
0
        public void ReadByTrackGroupIdWorksAsExpectedTest()
        {
            TagInfo   tagInfo     = GetTagInfo();
            TrackData firstTrack  = new TrackData(tagInfo);
            TrackData secondTrack = new TrackData(tagInfo);

            var firstTrackReference  = trackDao.InsertTrack(firstTrack);
            var secondTrackReference = trackDao.InsertTrack(secondTrack);

            var hashedFingerprintsForFirstTrack = fingerprintCommandBuilder
                                                  .BuildFingerprintCommand()
                                                  .From(GetAudioSamples())
                                                  .WithFingerprintConfig(config =>
            {
                config.Clusters = new[] { "first-group-id" };
                return(config);
            })
                                                  .UsingServices(audioService)
                                                  .Hash()
                                                  .Result;

            InsertHashedFingerprintsForTrack(hashedFingerprintsForFirstTrack, firstTrackReference);

            var hashedFingerprintsForSecondTrack = fingerprintCommandBuilder
                                                   .BuildFingerprintCommand()
                                                   .From(GetAudioSamples())
                                                   .WithFingerprintConfig(config =>
            {
                config.Clusters = new[] { "second-group-id" };
                return(config);
            })
                                                   .UsingServices(audioService)
                                                   .Hash()
                                                   .Result;

            InsertHashedFingerprintsForTrack(hashedFingerprintsForSecondTrack, secondTrackReference);

            const int ThresholdVotes = 25;

            foreach (var hashedFingerprint in hashedFingerprintsForFirstTrack)
            {
                var subFingerprintData = subFingerprintDao.ReadSubFingerprints(
                    hashedFingerprint.HashBins, ThresholdVotes, new[] { "first-group-id" }).ToList();

                Assert.AreEqual(1, subFingerprintData.Count);
                Assert.AreEqual(firstTrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao.ReadSubFingerprints(
                    hashedFingerprint.HashBins, ThresholdVotes, new[] { "second-group-id" }).ToList();

                Assert.AreEqual(1, subFingerprintData.Count);
                Assert.AreEqual(secondTrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao.ReadSubFingerprints(hashedFingerprint.HashBins, ThresholdVotes, Enumerable.Empty <string>()).ToList();
                Assert.AreEqual(2, subFingerprintData.Count);
            }
        }
コード例 #3
0
        public async Task ReadByTrackGroupIdWorksAsExpectedTest()
        {
            var modelReferenceTracker = new UIntModelReferenceTracker();
            var firstTrack            = new TrackInfo("id-1", string.Empty, string.Empty, new Dictionary <string, string> {
                { "group-id", "first-group-id" }
            }, MediaType.Audio);
            var hashedFingerprintsForFirstTrack = await GetHashedFingerprints();

            var firstTrackData = InsertTrackAndHashes(firstTrack, hashedFingerprintsForFirstTrack, modelReferenceTracker);

            var secondTrack = new TrackInfo("id-2", string.Empty, string.Empty, new Dictionary <string, string> {
                { "group-id", "second-group-id" }
            }, MediaType.Audio);
            var hashedFingerprintsForSecondTrack = await GetHashedFingerprints();

            var secondTrackData = InsertTrackAndHashes(secondTrack, hashedFingerprintsForSecondTrack, modelReferenceTracker);

            const int thresholdVotes = 25;
            var       queryConfigWithFirstGroupId = new DefaultQueryConfiguration
            {
                ThresholdVotes   = thresholdVotes,
                MetaFieldsFilter = new Dictionary <string, string> {
                    { "group-id", "first-group-id" }
                }
            };

            var queryConfigWithSecondGroupId = new DefaultQueryConfiguration
            {
                ThresholdVotes   = thresholdVotes,
                MetaFieldsFilter = new Dictionary <string, string> {
                    { "group-id", "second-group-id" }
                }
            };

            foreach (var hashedFingerprint in hashedFingerprintsForFirstTrack)
            {
                var subFingerprintData = subFingerprintDao.ReadSubFingerprints(new[] { hashedFingerprint.HashBins }, queryConfigWithFirstGroupId).ToList();
                Assert.AreEqual(1, subFingerprintData.Count);
                Assert.AreEqual(firstTrackData.TrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao.ReadSubFingerprints(new[] { hashedFingerprint.HashBins }, queryConfigWithSecondGroupId).ToList();
                Assert.AreEqual(1, subFingerprintData.Count);
                Assert.AreEqual(secondTrackData.TrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao
                                     .ReadSubFingerprints(new[] { hashedFingerprint.HashBins }, new DefaultQueryConfiguration {
                    ThresholdVotes = thresholdVotes
                })
                                     .ToList();

                Assert.AreEqual(2, subFingerprintData.Count);
            }
        }
コード例 #4
0
 public virtual IList <SubFingerprintData> ReadSubFingerprints(long[] hashBins, QueryConfiguration config)
 {
     return(subFingerprintDao.ReadSubFingerprints(hashBins, config.ThresholdVotes, config.Clusters).ToList());
 }
コード例 #5
0
        public void ReadByTrackGroupIdWorksAsExpectedTest()
        {
            var firstTrack = new TrackInfo("isrc1", "title", "artist",
                                           new Dictionary <string, string> {
                { "group-id", "first-group-id" }
            });
            var secondTrack = new TrackInfo("isrc2", "title", "artist",
                                            new Dictionary <string, string> {
                { "group-id", "second-group-id" }
            });

            var firstTrackData  = trackDao.InsertTrack(firstTrack, 120d);
            var secondTrackData = trackDao.InsertTrack(secondTrack, 120d);

            var hashedFingerprintsForFirstTrack = fingerprintCommandBuilder
                                                  .BuildFingerprintCommand()
                                                  .From(GetAudioSamples())
                                                  .UsingServices(audioService)
                                                  .Hash()
                                                  .Result;

            //.OrderBy(e => e.StartsAt);

            InsertHashedFingerprintsForTrack(hashedFingerprintsForFirstTrack, firstTrackData.TrackReference);

            var hashedFingerprintsForSecondTrack = fingerprintCommandBuilder
                                                   .BuildFingerprintCommand()
                                                   .From(GetAudioSamples())
                                                   .UsingServices(audioService)
                                                   .Hash()
                                                   .Result;

            //.OrderBy(e => e.StartsAt);
            InsertHashedFingerprintsForTrack(hashedFingerprintsForSecondTrack, secondTrackData.TrackReference);

            const int thresholdVotes = 25;

            foreach (var hashedFingerprint in hashedFingerprintsForFirstTrack)
            {
                var subFingerprintData = subFingerprintDao.ReadSubFingerprints(
                    new[] { hashedFingerprint.HashBins }, new DefaultQueryConfiguration
                {
                    ThresholdVotes   = thresholdVotes,
                    MetaFieldsFilter = firstTrack.MetaFields
                }).ToList();

                subFingerprintData.Count.Should().Be(1);
                firstTrackData.TrackReference.Should().BeEquivalentTo(subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao.ReadSubFingerprints(
                    new[] { hashedFingerprint.HashBins }, new DefaultQueryConfiguration
                {
                    ThresholdVotes   = thresholdVotes,
                    MetaFieldsFilter = secondTrack.MetaFields
                }).ToList();

                subFingerprintData.Count.Should().Be(1);
                secondTrackData.TrackReference.Should().BeEquivalentTo(subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao.ReadSubFingerprints(
                    new[] { hashedFingerprint.HashBins }, new DefaultQueryConfiguration
                {
                    ThresholdVotes = thresholdVotes
                }).ToList();
                subFingerprintData.Count.Should().Be(2);
            }
        }
コード例 #6
0
        public async Task ReadByTrackGroupIdWorksAsExpectedTest()
        {
            var firstTrack = new TrackInfo("id", "title", "artist", new Dictionary <string, string> {
                { "group-id", "first-group-id" }
            });
            var secondTrack = new TrackInfo("id", "title", "artist", new Dictionary <string, string> {
                { "group-id", "second-group-id" }
            });

            var firstTrackReference  = trackDao.InsertTrack(firstTrack, 120).TrackReference;
            var secondTrackReference = trackDao.InsertTrack(secondTrack, 120).TrackReference;

            var hashedFingerprintsForFirstTrack = await FingerprintCommandBuilder.Instance
                                                  .BuildFingerprintCommand()
                                                  .From(GetAudioSamples())
                                                  .UsingServices(audioService)
                                                  .Hash();

            InsertHashedFingerprintsForTrack(hashedFingerprintsForFirstTrack, firstTrackReference);

            var hashedFingerprintsForSecondTrack = await FingerprintCommandBuilder.Instance
                                                   .BuildFingerprintCommand()
                                                   .From(GetAudioSamples())
                                                   .UsingServices(audioService)
                                                   .Hash();

            InsertHashedFingerprintsForTrack(hashedFingerprintsForSecondTrack, secondTrackReference);

            const int thresholdVotes = 25;

            foreach (var hashedFingerprint in hashedFingerprintsForFirstTrack)
            {
                var subFingerprintData = subFingerprintDao.ReadSubFingerprints(
                    new[] { hashedFingerprint.HashBins },
                    new DefaultQueryConfiguration
                {
                    ThresholdVotes   = thresholdVotes,
                    MetaFieldsFilter = new Dictionary <string, string> {
                        { "group-id", "first-group-id" }
                    }
                }).ToList();

                Assert.AreEqual(1, subFingerprintData.Count);
                Assert.AreEqual(firstTrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao.ReadSubFingerprints(
                    new[] { hashedFingerprint.HashBins },
                    new DefaultQueryConfiguration
                {
                    ThresholdVotes   = thresholdVotes,
                    MetaFieldsFilter = new Dictionary <string, string> {
                        { "group-id", "second-group-id" }
                    }
                }).ToList();

                Assert.AreEqual(1, subFingerprintData.Count);
                Assert.AreEqual(secondTrackReference, subFingerprintData[0].TrackReference);

                subFingerprintData = subFingerprintDao
                                     .ReadSubFingerprints(new[] { hashedFingerprint.HashBins }, new DefaultQueryConfiguration {
                    ThresholdVotes = thresholdVotes
                })
                                     .ToList();

                Assert.AreEqual(2, subFingerprintData.Count);
            }
        }