public IModelReference InsertTrack(TrackData track) { int id = PrepareStoredProcedure(SpInsertTrack) .WithParametersFromModel(track) .Execute() .AsScalar<int>(); return track.TrackReference = new ModelReference<int>(id); }
public void InsertTrackTest() { TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = ModelService.InsertTrack(track); AssertModelReferenceIsInitialized(trackReference); }
public float[] GetTrackSamples(TrackData track, int sampleRate, int secondsToRead, int startAtSecond) { if (track == null || track.Album == null) { return null; } return audioService.ReadMonoSamplesFromFile(track.Album, sampleRate, secondsToRead, startAtSecond); }
public void InsertTest() { TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = TrackDao.InsertTrack(track); var fingerprintReference = FingerprintDao.InsertFingerprint(new FingerprintData(GenericFingerprint, trackReference)); AssertModelReferenceIsInitialized(fingerprintReference); }
public void InsertTest() { TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = TrackDao.InsertTrack(track); var subFingerprintReference = SubFingerprintDao.InsertSubFingerprint(GenericSignature, trackReference); AssertModelReferenceIsInitialized(subFingerprintReference); }
public void ReadTest() { TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = TrackDao.InsertTrack(track); var subFingerprintReference = SubFingerprintDao.InsertSubFingerprint(GenericSignature, trackReference); SubFingerprintData actual = SubFingerprintDao.ReadSubFingerprint(subFingerprintReference); AsserSubFingerprintsAreEqual(new SubFingerprintData(GenericSignature, subFingerprintReference, trackReference), actual); }
protected void AssertTracksAreEqual(TrackData expectedTrack, TrackData actualTrack) { Assert.AreEqual(expectedTrack.TrackReference, actualTrack.TrackReference); Assert.AreEqual(expectedTrack.Album, actualTrack.Album); Assert.AreEqual(expectedTrack.Artist, actualTrack.Artist); Assert.AreEqual(expectedTrack.Title, actualTrack.Title); Assert.AreEqual(expectedTrack.TrackLengthSec, actualTrack.TrackLengthSec); Assert.AreEqual(expectedTrack.ISRC, actualTrack.ISRC); Assert.AreEqual(expectedTrack.GroupId, actualTrack.GroupId); }
public void MultipleFingerprintsInsertTest() { const int NumberOfFingerprints = 100; for (int i = 0; i < NumberOfFingerprints; i++) { var trackData = new TrackData("isrc" + i, "artist", "title", "album", 2012, 200); var trackReference = TrackDao.InsertTrack(trackData); var fingerprintReference = FingerprintDao.InsertFingerprint(new FingerprintData(GenericFingerprint, trackReference)); AssertModelReferenceIsInitialized(fingerprintReference); } }
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 DeleteTrackTest() { const int Threshold = 5; TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = ModelService.InsertTrack(track); var hashData = new HashData(GenericSignature, GenericHashBuckets); ModelService.InsertHashDataForTrack(new[] { hashData }, trackReference); ModelService.DeleteTrack(trackReference); var subFingerprints = ModelService.ReadSubFingerprintDataByHashBucketsWithThreshold(GenericHashBuckets, Threshold); Assert.IsTrue(subFingerprints.Any() == false); TrackData actualTrack = ModelService.ReadTrackByReference(trackReference); Assert.IsNull(actualTrack); }
public IModelReference InsertTrack(TrackData trackData) { var track = new Track { Album = trackData.Album, Artist = trackData.Artist, GroupId = trackData.GroupId, ISRC = trackData.ISRC, ReleaseYear = trackData.ReleaseYear, Title = trackData.Title, TrackLengthSec = trackData.TrackLengthSec }; GetCollection<Track>(Tracks).Insert(track); return trackData.TrackReference = new MongoModelReference(track.Id); }
public void ReadFingerprintsByTrackReferenceTest() { TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = ModelService.InsertTrack(track); FingerprintData fingerprint = new FingerprintData(GenericFingerprint, trackReference); ModelService.InsertFingerprint(fingerprint); var fingerprints = ModelService.ReadFingerprintsByTrackReference(trackReference); Assert.IsTrue(fingerprints.Count == 1); Assert.AreEqual(fingerprint.FingerprintReference, fingerprints[0].FingerprintReference); Assert.AreEqual(trackReference, fingerprints[0].TrackReference); for (int i = 0; i < GenericFingerprint.Length; i++) { Assert.AreEqual(GenericFingerprint[i], fingerprints[0].Signature[i]); } }
public void DeleteHashBinsAndSubfingerprintsOnTrackDelete() { const int StaticStride = 5115; const int SecondsToProcess = 20; const int StartAtSecond = 30; 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, SecondsToProcess, StartAtSecond) .WithFingerprintConfig(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .UsingServices(audioService) .Hash() .Result; var subFingerprintReferences = new List<IModelReference>(); foreach (var hash in hashData) { var subFingerprintReference = SubFingerprintDao.InsertSubFingerprint(hash.SubFingerprint, trackReference); HashBinDao.InsertHashBins(hash.HashBins, subFingerprintReference, trackReference); subFingerprintReferences.Add(subFingerprintReference); } var actualTrack = TrackDao.ReadTrackByISRC(tagInfo.ISRC); Assert.IsNotNull(actualTrack); AssertTracksAreEqual(track, actualTrack); // Act int modifiedRows = TrackDao.DeleteTrack(trackReference); Assert.IsNull(TrackDao.ReadTrackByISRC(tagInfo.ISRC)); foreach (var id in subFingerprintReferences) { Assert.IsTrue(id.GetHashCode() != 0); Assert.IsNull(SubFingerprintDao.ReadSubFingerprint(id)); } Assert.IsTrue(HashBinDao.ReadHashDataByTrackReference(actualTrack.TrackReference).Count == 0); Assert.AreEqual(1 + hashData.Count + (25 * hashData.Count), modifiedRows); }
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" }; var firstTrackReference = TrackDao.InsertTrack(firstTrack); var secondTrackReference = TrackDao.InsertTrack(secondTrack); var firstHashData = fingerprintCommandBuilder .BuildFingerprintCommand() .From(PathToMp3, 20, 0) .WithFingerprintConfig(config => { config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint); }) .UsingServices(audioService) .Hash() .Result; InsertHashDataForTrack(firstHashData, firstTrackReference); InsertHashDataForTrack(firstHashData, secondTrackReference); const int ThresholdVotes = 25; foreach (var hashData in firstHashData) { var subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashData.HashBins, ThresholdVotes, "first-group-id").ToList(); Assert.IsTrue(subFingerprintData.Count == 1); Assert.AreEqual(firstTrackReference, subFingerprintData[0].TrackReference); subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(hashData.HashBins, ThresholdVotes, "second-group-id").ToList(); Assert.IsTrue(subFingerprintData.Count == 1); Assert.AreEqual(secondTrackReference, subFingerprintData[0].TrackReference); subFingerprintData = HashBinDao.ReadSubFingerprintDataByHashBucketsWithThreshold(hashData.HashBins, ThresholdVotes).ToList(); Assert.AreEqual(2, subFingerprintData.Count); } }
public void InsertHashDataTest() { const int Threshold = 5; TrackData expectedTrack = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = ModelService.InsertTrack(expectedTrack); var hashData = new HashData(GenericSignature, GenericHashBuckets); ModelService.InsertHashDataForTrack(new[] { hashData }, trackReference); var subFingerprints = ModelService.ReadSubFingerprintDataByHashBucketsWithThreshold(GenericHashBuckets, Threshold); Assert.IsTrue(subFingerprints.Count == 1); Assert.AreEqual(trackReference, subFingerprints[0].TrackReference); Assert.IsFalse(subFingerprints[0].SubFingerprintReference.GetHashCode() == 0); for (int i = 0; i < GenericSignature.Length; i++) { Assert.AreEqual(GenericSignature[i], subFingerprints[0].Signature[i]); } }
/// <summary> /// Create fingerprints out of down sampled samples /// </summary> /// <param name = "samples">Down sampled to 5512 samples</param> /// <param name = "track">Track</param> public void CreateInsertFingerprints(float[] samples, TrackData track) { if (track == null) { return; /*track is not eligible*/ } var trackReference = modelService.InsertTrack(track); /*Create fingerprints that will be used as initial fingerprints to be queried*/ var hashes = fingerprintCommandBuilder.BuildFingerprintCommand() .From(samples) .WithFingerprintConfig(config => config.Stride = createStride) .UsingServices(audioService) .Hash() .Result; modelService.InsertHashDataForTrack(hashes, trackReference); }
public void ReadTest() { const int NumberOfFingerprints = 100; TrackData track = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = TrackDao.InsertTrack(track); for (int i = 0; i < NumberOfFingerprints; i++) { FingerprintDao.InsertFingerprint(new FingerprintData(GenericFingerprint, trackReference)); } var fingerprints = FingerprintDao.ReadFingerprintsByTrackReference(trackReference); Assert.IsTrue(fingerprints.Count == NumberOfFingerprints); foreach (var fingerprint in fingerprints) { Assert.IsTrue(GenericFingerprint.Length == fingerprint.Signature.Length); for (var i = 0; i < GenericFingerprint.Length; i++) { Assert.AreEqual(GenericFingerprint[i], fingerprint.Signature[i]); } } }
public ResultItem(int setId, TrackData track) { SetId = setId; this.track = track; }
public void ReadTrackByTrackReferenceTest() { TrackData expectedTrack = new TrackData("isrc", "artist", "title", "album", 1986, 200); var trackReference = ModelService.InsertTrack(expectedTrack); var actualTrack = ModelService.ReadTrackByReference(trackReference); AssertTracksAreEqual(expectedTrack, actualTrack); }
private void InsertInDatabase(int start, int end) { int topWavelets = (int)_nudTopWav.Value; IStride stride = null; Invoke( new Action( () => { stride = WinUtils.GetStride( (StrideType)_cmbStrideType.SelectedIndex, (int)_nudStride.Value, 0, new DefaultFingerprintConfiguration().SamplesPerFingerprint); }), null); Action actionInterface = () => { _pbTotalSongs.PerformStep(); _nudProcessed.Value = processed; _nudLeft.Value = left; _nudBadFiles.Value = badFiles; _nudDetectedDuplicates.Value = duplicates; }; Action<object[], Color> actionAddItems = (parameters, color) => { int index = _dgvFillDatabase.Rows.Add(parameters); _dgvFillDatabase.FirstDisplayedScrollingRowIndex = index; if (color != Color.Empty) { _dgvFillDatabase.Rows[index].DefaultCellStyle.BackColor = color; } }; for (int i = start; i < end; i++) { // Process the corresponding files if (stopFlag) { return; } TagInfo tags = tagService.GetTagInfo(fileList[i]); // Get Tags from file if (tags == null || tags.IsEmpty) { badFiles++; processed++; left--; Invoke(actionAddItems, new object[] { "TAGS ARE NULL", fileList[i], 0, 0 }, Color.Red); Invoke(actionInterface); continue; } string isrc = tags.ISRC; string artist = tags.Artist; // Artist string title = tags.Title; // Title int releaseYear = tags.Year; string album = tags.Album; double duration = tags.Duration; // Duration // Check whether the duration is OK if (duration < MinTrackLength || duration > MaxTrackLength) { // Duration too small badFiles++; processed++; left--; Invoke(actionAddItems, new object[] { "Bad duration", fileList[i], 0, 0 }, Color.Red); Invoke(actionInterface); continue; } // Check whether the tags are properly defined if (string.IsNullOrEmpty(isrc) && (string.IsNullOrEmpty(artist) || string.IsNullOrEmpty(title))) { badFiles++; processed++; left--; Invoke( actionAddItems, new object[] { "ISRC Tag is missing. Skipping file...", fileList[i], 0, 0 }, Color.Red); Invoke(actionInterface); continue; } IModelReference trackReference; try { lock (this) { // Check if this file is already in the database if (IsDuplicateFile(isrc, artist, title)) { duplicates++; // There is such file in the database processed++; left--; Invoke(actionInterface); continue; } var track = new TrackData(isrc, artist, title, album, releaseYear, (int)duration); trackReference = modelService.InsertTrack(track); // Insert new Track in the database } } catch (Exception e) { // catch any exception and abort the insertion processed++; left--; badFiles++; MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); Invoke(actionInterface); return; } int count; try { var hashDatas = fingerprintCommandBuilder .BuildFingerprintCommand() .From(fileList[i]) .WithFingerprintConfig( config => { config.TopWavelets = topWavelets; config.Stride = stride; }) .UsingServices(audioService) .Hash() .Result; // Create SubFingerprints modelService.InsertHashDataForTrack(hashDatas, trackReference); count = hashDatas.Count; } catch (Exception e) { // catch any exception and abort the insertion MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); badFiles++; processed++; left--; Invoke(actionInterface); return; } Invoke(actionAddItems, new object[] { artist, title, isrc, duration, count }, Color.Empty); left--; processed++; Invoke(actionInterface); } }
public void ReadSubFingerprintsByHashBucketsHavingThresholdWithGroupIdTest() { const int Threshold = 5; TrackData firstTrack = new TrackData("isrc1", "artist", "title", "album", 1986, 200) { GroupId = "first-group-id" }; var firstTrackReference = ModelService.InsertTrack(firstTrack); TrackData secondTrack = new TrackData("isrc2", "artist", "title", "album", 1986, 200) { GroupId = "second-group-id" }; var secondTrackReference = ModelService.InsertTrack(secondTrack); Assert.IsFalse(firstTrackReference.Equals(secondTrackReference)); long[] firstTrackBuckets = new long[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; long[] secondTrackBuckets = new long[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; var firstHashData = new HashData(GenericSignature, firstTrackBuckets); var secondHashData = new HashData(GenericSignature, secondTrackBuckets); ModelService.InsertHashDataForTrack(new[] { firstHashData }, firstTrackReference); ModelService.InsertHashDataForTrack(new[] { secondHashData }, secondTrackReference); // query buckets are similar with 5 elements from first track and 4 elements from second track long[] queryBuckets = new long[] { 3, 2, 5, 6, 7, 8, 7, 10, 11, 12, 13, 14, 15, 14, 17, 18, 19, 20, 21, 20, 23, 24, 25, 26, 25 }; var subFingerprints = ModelService.ReadSubFingerprintDataByHashBucketsThresholdWithGroupId(queryBuckets, Threshold, "first-group-id"); Assert.IsTrue(subFingerprints.Count == 1); Assert.AreEqual(firstTrackReference, subFingerprints[0].TrackReference); }
public void InserTrackShouldAcceptEmptyEntriesCodes() { TrackData track = new TrackData(string.Empty, string.Empty, string.Empty, string.Empty, 1986, 200); var trackReference = TrackDao.InsertTrack(track); var actualTrack = TrackDao.ReadTrack(trackReference); AssertModelReferenceIsInitialized(trackReference); AssertTracksAreEqual(track, actualTrack); }
public IModelReference InsertTrack(TrackData track) { return trackDao.InsertTrack(track); }
public void ReadByIdTest() { var track = new TrackData("isrc", "artist", "title", "album", 2012, 200) { GroupId = "group-id" }; var trackReference = TrackDao.InsertTrack(track); AssertTracksAreEqual(track, TrackDao.ReadTrack(trackReference)); }
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); } }
public void ReadTrackByISRCTest() { const string ISRC = "isrc"; TrackData expectedTrack = new TrackData(ISRC, "artist", "title", "album", 1986, 200); ModelService.InsertTrack(expectedTrack); var actualTrack = ModelService.ReadTrackByISRC(ISRC); AssertTracksAreEqual(expectedTrack, actualTrack); }
public void ReadMultipleTracksTest() { const int NumberOfTracks = 100; var allTracks = new HashSet<TrackData>(); for (int i = 0; i < NumberOfTracks; i++) { TrackData track = new TrackData("isrc" + i, "artist", "title", "album", 1986, 200); ModelService.InsertTrack(track); if (!allTracks.Add(track)) { Assert.Fail("Same primary key identifier was returned after inserting a track to the collection."); } } var actualTracks = ModelService.ReadAllTracks(); Assert.IsTrue(actualTracks.Count == NumberOfTracks); }
public void ReadTrackByArtistAndTitleTest() { const string Artist = "artist"; const string Title = "title"; TrackData expectedTrack = new TrackData("isrc", Artist, Title, "album", 1986, 200); ModelService.InsertTrack(expectedTrack); var actualTracks = ModelService.ReadTrackByArtistAndTitleName(Artist, Title); Assert.IsTrue(actualTracks.Count == 1); AssertTracksAreEqual(expectedTrack, actualTracks[0]); }
public IModelReference InsertTrack(TrackData track) { var trackReference = new ModelReference<int>(Interlocked.Increment(ref counter)); storage.Tracks[trackReference] = track; return track.TrackReference = trackReference; }
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); }