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); } }
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); } }
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); } }
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); }
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)); }
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); }
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); }
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); } }
public virtual IList <HashedFingerprint> ReadHashedFingerprintsByTrack(IModelReference trackReference) { return(subFingerprintDao.ReadHashedFingerprintsByTrackReference(trackReference)); }