public void SameNumberOfHashBinsIsInsertedInAllTablesWhenFingerprintingEntireSongTest()
        {
            const int StaticStride = 5115;
            TagInfo   tagInfo      = tagService.GetTagInfo(PathToMp3);
            int       releaseYear  = tagInfo.Year;
            TrackData track        = new TrackData(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration);
            int       trackId      = TrackDao.Insert(track);
            var       hashData     = fingerprintCommandBuilder
                                     .BuildFingerprintCommand()
                                     .From(PathToMp3)
                                     .WithFingerprintConfig(config =>
            {
                config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint);
            })
                                     .Hash()
                                     .Result;

            foreach (var hash in hashData)
            {
                long subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, trackId);
                HashBinDao.Insert(hash.HashBins, subFingerprintId);
            }

            for (int hashTable = 1; hashTable <= 25; hashTable++)
            {
                var hashBins = HashBinDao.ReadHashBinsByHashTable(hashTable);
                Assert.AreEqual(hashData.Count, hashBins.Count);
            }
        }
        public void SameNumberOfHashBinsIsInsertedInAllTablesWhenFingerprintingEntireSongTest()
        {
            const int StaticStride   = 5115;
            TagInfo   tagInfo        = tagService.GetTagInfo(PathToMp3);
            int       releaseYear    = tagInfo.Year;
            TrackData track          = new TrackData(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration);
            var       trackReference = TrackDao.InsertTrack(track);
            var       hashData       = fingerprintCommandBuilder
                                       .BuildFingerprintCommand()
                                       .From(PathToMp3)
                                       .WithFingerprintConfig(config =>
            {
                config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint);
            })
                                       .UsingServices(audioService)
                                       .Hash()
                                       .Result;

            InsertHashDataForTrack(hashData, trackReference);

            var hashes = HashBinDao.ReadHashDataByTrackReference(track.TrackReference);

            Assert.AreEqual(hashData.Count, hashes.Count);
            foreach (var data in hashes)
            {
                Assert.AreEqual(25, data.HashBins.Length);
            }
        }
 private void InsertHashDataForTrack(IEnumerable <HashData> hashData, IModelReference trackReference)
 {
     foreach (var hash in hashData)
     {
         var subFingerprintId = SubFingerprintDao.InsertSubFingerprint(hash.SubFingerprint, trackReference);
         HashBinDao.InsertHashBins(hash.HashBins, subFingerprintId, trackReference);
     }
 }
 private void InsertHashedFingerprintsForTrack(IEnumerable <HashedFingerprint> hashedFingerprints, IModelReference trackReference)
 {
     foreach (var hashedFingerprint in hashedFingerprints)
     {
         var subFingerprintId = SubFingerprintDao.InsertSubFingerprint(hashedFingerprint.SubFingerprint, hashedFingerprint.SequenceNumber, hashedFingerprint.Timestamp, trackReference);
         HashBinDao.InsertHashBins(hashedFingerprint.HashBins, subFingerprintId, trackReference);
     }
 }
Exemplo n.º 5
0
        public void SetUp()
        {
            var ramStorage = new RAMStorage(NumberOfHashTables);

            HashBinDao        = new HashBinDao(ramStorage);
            TrackDao          = new TrackDao(ramStorage);
            SubFingerprintDao = new SubFingerprintDao(ramStorage);
        }
        public void ReadByTrackGroupIdWorksAsExpectedTest()
        {
            const int StaticStride = 5115;
            TagInfo   tagInfo      = tagService.GetTagInfo(PathToMp3);
            int       releaseYear  = tagInfo.Year;
            TrackData firstTrack   = new TrackData(
                tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration)
            {
                GroupId = "first-group-id"
            };
            TrackData secondTrack = new TrackData(
                tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration)
            {
                GroupId = "second-group-id"
            };

            int firstTrackId  = TrackDao.Insert(firstTrack);
            int secondTrackId = TrackDao.Insert(secondTrack);
            var firstHashData = fingerprintCommandBuilder
                                .BuildFingerprintCommand()
                                .From(PathToMp3, 20, 0)
                                .WithFingerprintConfig(config =>
            {
                config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint);
            })
                                .Hash()
                                .Result;

            foreach (var hash in firstHashData)
            {
                long subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, firstTrackId);
                HashBinDao.Insert(hash.HashBins, subFingerprintId);

                subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, secondTrackId);
                HashBinDao.Insert(hash.HashBins, subFingerprintId);
            }

            foreach (var hashData in firstHashData)
            {
                var subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashData.HashBins, 25, "first-group-id").ToList();

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

                subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashData.HashBins, 25, "second-group-id").ToList();

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

                subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsWithThreshold(hashData.HashBins, 25).ToList();
                Assert.AreEqual(2, subFingerprintData.Count);
            }
        }
        public void InsertReadTest()
        {
            TrackData track            = new TrackData("isrc", "artist", "title", "album", 1986, 200);
            var       trackReference   = TrackDao.InsertTrack(track);
            const int NumberOfHashBins = 100;
            var       hashData         = Enumerable.Range(0, NumberOfHashBins).Select(i => new HashData(GenericSignature, GenericHashBuckets));

            InsertHashDataForTrack(hashData, trackReference);

            var hashDatas = HashBinDao.ReadHashDataByTrackReference(track.TrackReference);

            Assert.AreEqual(NumberOfHashBins, hashDatas.Count);
        }
        public void ReadByTrackGroupIdWorksAsExpectedTest()
        {
            const int StaticStride = 5115;
            TagInfo   tagInfo      = this.GetTagInfo();
            int       releaseYear  = tagInfo.Year;
            TrackData firstTrack   = new TrackData(
                tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration)
            {
                GroupId = "first-group-id"
            };
            TrackData secondTrack = new TrackData(
                tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration)
            {
                GroupId = "second-group-id"
            };

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

            var hashedFingerprints = fingerprintCommandBuilder
                                     .BuildFingerprintCommand()
                                     .From(PathToMp3, 20, 0)
                                     .WithFingerprintConfig(config =>
            {
                config.SpectrogramConfig.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint);
            })
                                     .UsingServices(audioService)
                                     .Hash()
                                     .Result;

            InsertHashedFingerprintsForTrack(hashedFingerprints, firstTrackReference);
            InsertHashedFingerprintsForTrack(hashedFingerprints, secondTrackReference);

            const int ThresholdVotes = 25;

            foreach (var hashedFingerprint in hashedFingerprints)
            {
                var subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashedFingerprint.HashBins, ThresholdVotes, "first-group-id").ToList();

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

                subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashedFingerprint.HashBins, ThresholdVotes, "second-group-id").ToList();

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

                subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsWithThreshold(hashedFingerprint.HashBins, ThresholdVotes).ToList();
                Assert.AreEqual(2, subFingerprintData.Count);
            }
        }
        public void InsertReadTest()
        {
            TrackData track   = new TrackData("isrc", "artist", "title", "album", 1986, 200);
            int       trackId = TrackDao.Insert(track);

            for (int i = 0; i < 100; i++)
            {
                long subFingerprintId = SubFingerprintDao.Insert(GenericSignature, trackId);
                HashBinDao.Insert(GenericHashBuckets, subFingerprintId);
            }

            for (int hashTable = 1; hashTable <= GenericHashBuckets.Length; hashTable++)
            {
                var hashBins = HashBinDao.ReadHashBinsByHashTable(hashTable);
                Assert.AreEqual(100, hashBins.Count);
                Assert.AreEqual(GenericHashBuckets[hashTable - 1], hashBins[0].HashBin);
            }
        }
        public void ReadHashDataByTrackTest()
        {
            TrackData firstTrack = new TrackData("isrc", "artist", "title", "album", 2012, 200);

            int firstTrackId = TrackDao.Insert(firstTrack);

            var firstHashData = fingerprintCommandBuilder
                                .BuildFingerprintCommand()
                                .From(PathToMp3, 10, 0)
                                .WithDefaultFingerprintConfig()
                                .Hash()
                                .Result;

            foreach (var hash in firstHashData)
            {
                long subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, firstTrackId);
                HashBinDao.Insert(hash.HashBins, subFingerprintId);
            }

            TrackData secondTrack = new TrackData("isrc", "artist", "title", "album", 2012, 200);

            int secondTrackId = TrackDao.Insert(secondTrack);

            var secondHashData = fingerprintCommandBuilder
                                 .BuildFingerprintCommand()
                                 .From(PathToMp3, 20, 10)
                                 .WithDefaultFingerprintConfig()
                                 .Hash()
                                 .Result;

            foreach (var hash in secondHashData)
            {
                long subFingerprintId = SubFingerprintDao.Insert(hash.SubFingerprint, secondTrackId);
                HashBinDao.Insert(hash.HashBins, subFingerprintId);
            }

            var resultFirstHashData = HashBinDao.ReadHashDataByTrackId(firstTrackId);

            AssertHashDatasAreTheSame(firstHashData, resultFirstHashData);

            IList <HashData> resultSecondHashData = HashBinDao.ReadHashDataByTrackId(secondTrackId);

            AssertHashDatasAreTheSame(secondHashData, resultSecondHashData);
        }
        public void ReadHashDataByTrackTest()
        {
            TrackData firstTrack = new TrackData("isrc", "artist", "title", "album", 2012, 200);

            var firstTrackReference = TrackDao.InsertTrack(firstTrack);

            var firstHashData = fingerprintCommandBuilder
                                .BuildFingerprintCommand()
                                .From(PathToMp3, 10, 0)
                                .WithDefaultFingerprintConfig()
                                .UsingServices(audioService)
                                .Hash()
                                .Result;

            InsertHashDataForTrack(firstHashData, firstTrackReference);

            TrackData secondTrack = new TrackData("isrc", "artist", "title", "album", 2012, 200);

            var secondTrackReference = TrackDao.InsertTrack(secondTrack);

            var secondHashData = fingerprintCommandBuilder
                                 .BuildFingerprintCommand()
                                 .From(PathToMp3, 20, 10)
                                 .WithDefaultFingerprintConfig()
                                 .UsingServices(audioService)
                                 .Hash()
                                 .Result;

            InsertHashDataForTrack(secondHashData, secondTrackReference);

            var resultFirstHashData = HashBinDao.ReadHashDataByTrackReference(firstTrackReference);

            AssertHashDatasAreTheSame(firstHashData, resultFirstHashData);

            IList <HashData> resultSecondHashData = HashBinDao.ReadHashDataByTrackReference(secondTrackReference);

            AssertHashDatasAreTheSame(secondHashData, resultSecondHashData);
        }
Exemplo n.º 12
0
 public HashBinDaoTest()
 {
     HashBinDao = new HashBinDao();
     TrackDao = new TrackDao();
     SubFingerprintDao = new SubFingerprintDao();
 }
Exemplo n.º 13
0
 public TrackDaoTest()
 {
     TrackDao          = new TrackDao();
     SubFingerprintDao = new SubFingerprintDao();
     HashBinDao        = new HashBinDao();
 }