コード例 #1
0
        public void ShouldInsertAndReadSubFingerprints()
        {
            var       track              = new TrackInfo("isrc", "title", "artist");
            var       trackData          = trackDao.InsertTrack(track, 200);
            const int numberOfHashBins   = 100;
            var       genericHashBuckets = GenericHashBuckets();
            var       hashedFingerprints =
                Enumerable.Range(0, numberOfHashBins)
                .Select(
                    sequenceNumber =>
                    new HashedFingerprint(
                        genericHashBuckets,
                        (uint)sequenceNumber,
                        sequenceNumber * 0.928f,
                        Array.Empty <byte>()));

            InsertHashedFingerprintsForTrack(hashedFingerprints, trackData.TrackReference);

            var fingerprints = subFingerprintDao.ReadHashedFingerprintsByTrackReference(trackData.TrackReference)
                               .Select(ToHashedFingerprint()).ToList();

            numberOfHashBins.Should().Be(fingerprints.Count);
            foreach (var hashedFingerprint in fingerprints)
            {
                genericHashBuckets.Should().BeEquivalentTo(hashedFingerprint.HashBins);
            }
        }
コード例 #2
0
        public void ShouldInsertAndReadSubFingerprints()
        {
            var       track              = new TrackData("isrc", "artist", "title", "album", 1986, 200);
            var       trackReference     = trackDao.InsertTrack(track);
            const int NumberOfHashBins   = 100;
            var       genericHashBuckets = GenericHashBuckets();
            var       hashedFingerprints =
                Enumerable.Range(0, NumberOfHashBins)
                .Select(
                    sequenceNumber =>
                    new HashedFingerprint(
                        genericHashBuckets,
                        (uint)sequenceNumber,
                        sequenceNumber * 0.928f,
                        Enumerable.Empty <string>()));

            InsertHashedFingerprintsForTrack(hashedFingerprints, trackReference);

            var hashedFingerprintss = subFingerprintDao.ReadHashedFingerprintsByTrackReference(track.TrackReference);

            Assert.AreEqual(NumberOfHashBins, hashedFingerprintss.Count);
            foreach (var hashedFingerprint in hashedFingerprintss)
            {
                CollectionAssert.AreEqual(genericHashBuckets, hashedFingerprint.HashBins);
            }
        }
コード例 #3
0
        public void ShouldInsertAndReadSubFingerprints()
        {
            var       track              = new TrackInfo("id", "title", "artist");
            const int numberOfHashBins   = 100;
            var       trackReference     = trackDao.InsertTrack(track, 200).TrackReference;
            var       genericHashBuckets = GenericHashBuckets();
            var       hashedFingerprints = Enumerable
                                           .Range(0, numberOfHashBins)
                                           .Select(sequenceNumber => new HashedFingerprint(
                                                       genericHashBuckets,
                                                       (uint)sequenceNumber,
                                                       sequenceNumber * 0.928f));

            InsertHashedFingerprintsForTrack(hashedFingerprints, trackReference);

            var fingerprints = subFingerprintDao.ReadHashedFingerprintsByTrackReference(trackReference)
                               .Select(ToHashedFingerprint())
                               .ToList();

            Assert.AreEqual(numberOfHashBins, fingerprints.Count);
            foreach (var hashedFingerprint in fingerprints)
            {
                CollectionAssert.AreEqual(genericHashBuckets, hashedFingerprint.HashBins);
            }
        }
コード例 #4
0
        public void DeleteHashBinsAndSubfingerprintsOnTrackDelete()
        {
            TagInfo tagInfo        = GetTagInfo();
            int     releaseYear    = tagInfo.Year;
            var     track          = new TrackData(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration);
            var     trackReference = trackDao.InsertTrack(track);
            var     hashData       = FingerprintCommandBuilder.Instance
                                     .BuildFingerprintCommand()
                                     .From(GetAudioSamples())
                                     .WithFingerprintConfig(config =>
            {
                config.Stride = new StaticStride(0);
                return(config);
            })
                                     .UsingServices(audioService)
                                     .Hash()
                                     .Result;

            subFingerprintDao.InsertHashDataForTrack(hashData, trackReference);
            var actualTrack = trackDao.ReadTrackByISRC(tagInfo.ISRC);

            Assert.IsNotNull(actualTrack);
            AssertTracksAreEqual(track, actualTrack);

            // Act
            int modifiedRows = trackDao.DeleteTrack(trackReference);

            Assert.IsNull(trackDao.ReadTrackByISRC(tagInfo.ISRC));
            Assert.AreEqual(0, subFingerprintDao.ReadHashedFingerprintsByTrackReference(actualTrack.TrackReference).Count);
            Assert.AreEqual(1 + hashData.Count + (25 * hashData.Count), modifiedRows);
        }
コード例 #5
0
        public void DeleteHashBinsAndSubfingerprintsOnTrackDelete()
        {
            TagInfo tagInfo        = GetTagInfo(1);
            var     track          = new TrackInfo(tagInfo.ISRC, tagInfo.Title, tagInfo.Artist);
            var     trackReference = trackDao.InsertTrack(track, tagInfo.Duration).TrackReference;
            var     hashData       = FingerprintCommandBuilder.Instance
                                     .BuildFingerprintCommand()
                                     .From(GetAudioSamples())
                                     .WithFingerprintConfig(config =>
            {
                config.Stride = new StaticStride(0);
                return(config);
            })
                                     .UsingServices(audioService)
                                     .Hash()
                                     .Result;

            subFingerprintDao.InsertHashDataForTrack(hashData, trackReference);
            var actualTrack = trackDao.ReadTrackById(tagInfo.ISRC);

            actualTrack.Should().NotBeNull();
            AssertTracksAreEqual(track, actualTrack);

            // Act
            int modifiedRows = trackDao.DeleteTrack(trackReference) + subFingerprintDao.DeleteSubFingerprintsByTrackReference(trackReference);

            trackDao.ReadTrackById(tagInfo.ISRC).Should().BeNull();
            subFingerprintDao.ReadHashedFingerprintsByTrackReference(actualTrack.TrackReference).Should().BeEmpty();
            modifiedRows.Should().Be(1 + hashData.Count + (25 * hashData.Count));
        }
コード例 #6
0
        public async Task DeleteHashBinsAndSubFingerprintsOnTrackDelete()
        {
            var tagInfo        = GetTagInfo();
            var track          = new TrackInfo(tagInfo.ISRC, tagInfo.Title, tagInfo.Artist);
            var trackReference = trackDao.InsertTrack(track, tagInfo.Duration).TrackReference;
            var hashData       = await FingerprintCommandBuilder.Instance
                                 .BuildFingerprintCommand()
                                 .From(GetAudioSamples())
                                 .WithFingerprintConfig(config =>
            {
                config.Stride = new StaticStride(0);
                return(config);
            })
                                 .UsingServices(audioService)
                                 .Hash();

            subFingerprintDao.InsertHashDataForTrack(hashData, trackReference);
            var actualTrack = trackDao.ReadTrackById(tagInfo.ISRC);

            Assert.IsNotNull(actualTrack);

            // Act
            int modifiedRows = trackDao.DeleteTrack(trackReference) +
                               subFingerprintDao.DeleteSubFingerprintsByTrackReference(trackReference);

            Assert.IsNull(trackDao.ReadTrackById(tagInfo.ISRC));
            Assert.IsFalse(subFingerprintDao.ReadHashedFingerprintsByTrackReference(actualTrack.TrackReference).Any());
            Assert.AreEqual(1 + hashData.Count + 25 * hashData.Count, modifiedRows);
        }
コード例 #7
0
        public void DeleteHashBinsAndSubfingerprintsOnTrackDelete()
        {
            const int StaticStride     = 5115;
            const int SecondsToProcess = 20;
            const int StartAtSecond    = 30;

            var       tagInfo        = GetTagInfo();
            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, SecondsToProcess, StartAtSecond)
                                       .WithFingerprintConfig(config =>
            {
                config.Stride = new IncrementalStaticStride(StaticStride);
            })
                                       .UsingServices(audioService)
                                       .Hash()
                                       .Result;

            subFingerprintDao.InsertHashDataForTrack(hashData, trackReference);

            var actualTrack = trackDao.ReadTrackByISRC(tagInfo.ISRC);

            Assert.IsNotNull(actualTrack);
            AssertTracksAreEqual(track, actualTrack);

            // Act
            int modifiedRows = trackDao.DeleteTrack(trackReference);

            Assert.IsNull(trackDao.ReadTrackByISRC(tagInfo.ISRC));
            Assert.IsTrue(subFingerprintDao.ReadHashedFingerprintsByTrackReference(actualTrack.TrackReference).Count == 0);
            Assert.AreEqual(1 + hashData.Count, modifiedRows);
        }
コード例 #8
0
        public void ShouldInsertAndReadSubFingerprints()
        {
            var       track              = new TrackInfo("id", string.Empty, string.Empty);
            const int numberOfHashBins   = 100;
            var       genericHashBuckets = GenericHashBuckets();
            var       hashedFingerprints = Enumerable
                                           .Range(0, numberOfHashBins)
                                           .Select(sequenceNumber => new HashedFingerprint(
                                                       genericHashBuckets,
                                                       (uint)sequenceNumber,
                                                       sequenceNumber * 0.928f,
                                                       Array.Empty <byte>()));

            var trackData    = InsertTrackAndHashes(track, new Hashes(hashedFingerprints, (numberOfHashBins + 1) * 0.928f));
            var fingerprints = subFingerprintDao.ReadHashedFingerprintsByTrackReference(trackData.TrackReference)
                               .Select(ToHashedFingerprint())
                               .ToList();

            Assert.AreEqual(numberOfHashBins, fingerprints.Count);
            foreach (var hashedFingerprint in fingerprints)
            {
                CollectionAssert.AreEqual(genericHashBuckets, hashedFingerprint.HashBins);
            }
        }
コード例 #9
0
 public virtual IList <HashedFingerprint> ReadHashedFingerprintsByTrack(IModelReference trackReference)
 {
     return(subFingerprintDao.ReadHashedFingerprintsByTrackReference(trackReference));
 }