public void DeleteHashBinsAndSubfingerprintsOnTrackDelete()
        {
            const int StaticStride = 5115;
            const int SecondsToProcess = 20;
            const int StartAtSecond = 30;
            DefaultQueryConfiguration defaultQueryConfiguration = new DefaultQueryConfiguration();
            TagInfo tagInfo = tagService.GetTagInfo(PathToMp3);
            int releaseYear = tagInfo.Year;
            Track track = new Track(tagInfo.ISRC, tagInfo.Artist, tagInfo.Title, tagInfo.Album, releaseYear, (int)tagInfo.Duration);
            modelService.InsertTrack(track);

            var subFingerprints = fingerprintUnitBuilder.BuildAudioFingerprintingUnit()
                                            .From(PathToMp3, SecondsToProcess, StartAtSecond)
                                            .WithCustomAlgorithmConfiguration(config =>
                                            {
                                                config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint);
                                            })
                                            .FingerprintIt()
                                            .HashIt()
                                            .ForTrack(track.Id)
                                            .Result;

            modelService.InsertSubFingerprint(subFingerprints);
            var hashBins = new List<HashBinMinHash>();
            foreach (var subFingerprint in subFingerprints)
            {
                long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable);
                for (int i = 0; i < groupedSubFingerprint.Length; i++)
                {
                    int tableNumber = i + 1;
                    hashBins.Add(new HashBinMinHash(groupedSubFingerprint[i], tableNumber, subFingerprint.Id));
                }
            }

            modelService.InsertHashBin(hashBins);
            var actualTrack = modelService.ReadTrackByISRC(tagInfo.ISRC);
            Assert.IsNotNull(actualTrack);
            AssertTracksAreEqual(track, actualTrack);
            foreach (var subFingerprint in subFingerprints)
            {
                long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable);
                var result = modelService.ReadSubFingerprintsByHashBucketsHavingThreshold(groupedSubFingerprint, defaultQueryConfiguration.NumberOfLSHTables);
                var tupple = result.First();
                Assert.AreEqual(defaultQueryConfiguration.NumberOfLSHTables, tupple.Item2);
                var actualSufingerprint = tupple.Item1;
                AssertSubFingerprintsAreEqual(subFingerprint, actualSufingerprint);
            }

            // Act
            modelService.DeleteTrack(track);

            Assert.IsNull(modelService.ReadTrackByISRC(tagInfo.ISRC));
            foreach (var subFingerprint in subFingerprints)
            {
                long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable);
                var result = modelService.ReadSubFingerprintsByHashBucketsHavingThreshold(groupedSubFingerprint, defaultQueryConfiguration.NumberOfLSHTables);
                Assert.IsTrue(!result.Any());
            }
        }
 public void DeleteOneTrackTest()
 {
     string name = MethodBase.GetCurrentMethod().Name;
     Album album = new Album(0, name, 1986);
     modelService.InsertAlbum(album);
     Track track = new Track(0, name, name, album.Id);
     modelService.InsertTrack(track);
     modelService.DeleteTrack(track);
     Assert.AreEqual(null, modelService.ReadAlbumById(album.Id));
     Assert.AreEqual(null, modelService.ReadTrackById(track.Id));
 }
 public void DeleteCollectionOfTracksIdTest()
 {
     string name = MethodBase.GetCurrentMethod().Name;
     Album album = new Album(int.MinValue, name, 1986);
     modelService.InsertAlbum(album);
     Assert.AreNotEqual(int.MinValue, album.Id);
     Track track = new Track(int.MinValue, name, name, album.Id);
     modelService.InsertTrack(track);
     Assert.AreNotEqual(int.MinValue, track.Id);
     modelService.DeleteTrack(track.Id);
     Assert.AreEqual(null, modelService.ReadAlbumById(album.Id));
     Assert.AreEqual(null, modelService.ReadTrackById(track.Id));
 }
        public void InsertReadFingerprintTest()
        {
            string name = MethodBase.GetCurrentMethod().Name;
            Album album = new Album(0, name, 1986);
            modelService.InsertAlbum(album);
            Track track = new Track(0, name, name, album.Id, 360);
            modelService.InsertTrack(track);
            Fingerprint f = new Fingerprint(0, GenericFingerprint, track.Id, 0);
            modelService.InsertFingerprint(f);
            var allFingerprints = modelService.ReadFingerprints();
            List<int> fingerprintIds = allFingerprints.Select(temp => temp.Id).ToList();

            Assert.AreEqual(true, fingerprintIds.Contains(f.Id));

            List<Fingerprint> addList = new List<Fingerprint>();
            for (int i = 0; i < 10; i++)
            {
                addList.Add(new Fingerprint(0, GenericFingerprint, track.Id, 0));
            }

            modelService.InsertFingerprint(addList);
            allFingerprints = modelService.ReadFingerprints();
            fingerprintIds.Clear();
            fingerprintIds.AddRange(allFingerprints.Select(temp => temp.Id));

            foreach (Fingerprint finger in addList)
            {
                Assert.AreEqual(true, fingerprintIds.Contains(finger.Id));
            }
        }
Пример #5
0
 public int DeleteTrack(Track track)
 {
     return DeleteTrack(track.Id);
 }
 private Track InsertTrack()
 {
     Track track = new Track("ISRC", "Artist", "Title", "Album", 1986, 360);
     modelService.InsertTrack(track);
     return track;
 }
 public void DeleteTrackFalseTest1()
 {
     Track track = new Track();
     const int Expected = 0;
     int actual = modelService.DeleteTrack(track);
     Assert.AreEqual(Expected, actual);
 }
Пример #8
0
        /// <summary>
        ///   Actual synchronous insert in the database
        /// </summary>
        /// <param name = "start">Start index</param>
        /// <param name = "end">End index</param>
        private void InsertInDatabase(int start, int end)
        {
            int topWavelets = (int)_nudTopWav.Value;
            IStride stride = null;
            Invoke(
                new Action(
                    () =>
                        {
                            stride = WinUtils.GetStride(
                                (StrideType)_cmbStrideType.SelectedIndex,
                                // Get stride according to the underlying combo box selection
                                (int)_nudStride.Value,
                                0,
                                new DefaultFingerprintingConfiguration().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 are null
                    badFiles++;
                    Invoke(actionAddItems, new object[] { "TAGS ARE NULL", fileList[i], 0, 0 }, Color.Red);
                    continue;
                }

                string artist = tags.Artist; // Artist
                string title = tags.Title; // Title
                double duration = tags.Duration; // Duration

                // Check whether the duration is OK
                if (duration < MinTrackLength || duration > MaxTrackLength)
                {
                    // Duration too small
                    badFiles++;
                    Invoke(actionAddItems, new object[] { "BAD DURATION", fileList[i], 0, 0 }, Color.Red);
                    continue;
                }

                // Check whether the tags are properly defined
                if (string.IsNullOrEmpty(artist) || string.IsNullOrEmpty(title))
                {
                    // Title or Artist tag is null
                    badFiles++;
                    Invoke(actionAddItems, new object[] { "TAGS MISSING", fileList[i], 0, 0 }, Color.Red);
                    continue;
                }

                Album album = GetCoresspondingAlbum(tags); // Get Album (whether new or unknown or aborted)

                if (album == null)
                {
                    return;
                }

                Track track;
                try
                {
                    lock (this)
                    {
                        // Check if this file is already in the database
                        if (modelService.ReadTrackByArtistAndTitleName(artist, title) != null)
                        {
                            duplicates++; // There is such file in the database
                            continue;
                        }

                        track = new Track(artist, title, album.Id, (int)duration);
                        modelService.InsertTrack(track); // Insert new Track in the database
                    }
                }
                catch (Exception e)
                {
                    // catch any exception and abort the insertion
                    MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                int count;
                try
                {
                    List<byte[]> subFingerprints = fingerprintUnitBuilder.BuildFingerprints().On(fileList[i]).WithCustomConfiguration(
                        config =>
                            {
                                config.TopWavelets = topWavelets;
                                config.Stride = stride;
                            }).RunAlgorithmWithHashing().Result; // Create SubFingerprints

                    List<SubFingerprint> subFingerprintsToTrack = AssociateSubFingerprintsToTrack(subFingerprints, track.Id);
                    modelService.InsertSubFingerprint(subFingerprintsToTrack);
                    count = subFingerprintsToTrack.Count;

                    switch (hashAlgorithm)
                    {
                            // Hash if there is a need in doing so
                        case HashAlgorithm.LSH: // LSH + Min Hash has been chosen
                            HashSubFingerprintsUsingMinHash(subFingerprintsToTrack);
                            break;
                        case HashAlgorithm.NeuralHasher:
                            throw new NotImplementedException();
                        case HashAlgorithm.None:
                            break;
                    }
                }
                catch (Exception e)
                {
                    // catch any exception and abort the insertion
                    MessageBox.Show(e.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                Invoke(actionAddItems, new object[] { artist, title, album.Name, duration, count }, Color.Empty);
                left--;
                processed++;

                Invoke(actionInterface);
            }
        }
        public void ReadFingerprintByMultipleTrackIdTest1()
        {
            string name = MethodBase.GetCurrentMethod().Name;

            Album album = new Album(0, name, 1986);
            modelService.InsertAlbum(album);
            const int NumberOfTracks = 1153;
            const int NumberOfFingerprintsPerTrack = 10;

            List<Track> listTrack = new List<Track>();
            List<Fingerprint> listOfFingerprints = new List<Fingerprint>();
            for (int i = 0; i < NumberOfTracks; i++)
            {
                Track track0 = new Track(0, name, name, album.Id, 360);
                listTrack.Add(track0);
                modelService.InsertTrack(track0);
                for (int j = 0; j < NumberOfFingerprintsPerTrack; j++)
                {
                    Fingerprint f0 = new Fingerprint(0, GenericFingerprint, track0.Id, 0);
                    listOfFingerprints.Add(f0);
                }
            }

            modelService.InsertFingerprint(listOfFingerprints);

            var dict = modelService.ReadFingerprintsByMultipleTrackId(listTrack, 0);

            Assert.AreNotEqual(null, dict);
            Assert.AreEqual(NumberOfTracks, dict.Keys.Count);
            foreach (Track track in listTrack)
            {
                Assert.AreEqual(true, dict.ContainsKey(track.Id));
                Assert.AreEqual(NumberOfFingerprintsPerTrack, dict[track.Id].Count);
            }
        }
        public void ReadFingerprintByMultipleTrackIdTest()
        {
            string name = MethodBase.GetCurrentMethod().Name;
            Album album = new Album(0, name, 1986);
            modelService.InsertAlbum(album);
            Track track0 = new Track(0, name, name, album.Id, 360);
            modelService.InsertTrack(track0);
            Track track1 = new Track(0, name, name, album.Id, 360);
            modelService.InsertTrack(track1);
            Track track2 = new Track(0, name, name, album.Id, 360);
            modelService.InsertTrack(track2);

            Fingerprint f0 = new Fingerprint(0, GenericFingerprint, track0.Id, 0);
            modelService.InsertFingerprint(f0);
            Fingerprint f1 = new Fingerprint(0, GenericFingerprint, track0.Id, 1);
            modelService.InsertFingerprint(f1);
            Fingerprint f2 = new Fingerprint(0, GenericFingerprint, track1.Id, 2);
            modelService.InsertFingerprint(f2);
            Fingerprint f3 = new Fingerprint(0, GenericFingerprint, track1.Id, 3);
            modelService.InsertFingerprint(f3);
            Fingerprint f4 = new Fingerprint(0, GenericFingerprint, track2.Id, 4);
            modelService.InsertFingerprint(f4);
            Fingerprint f5 = new Fingerprint(0, GenericFingerprint, track2.Id, 5);
            modelService.InsertFingerprint(f5);
            Fingerprint f6 = new Fingerprint(0, GenericFingerprint, track0.Id, 6);
            modelService.InsertFingerprint(f6);
            Fingerprint f7 = new Fingerprint(0, GenericFingerprint, track1.Id, 7);
            modelService.InsertFingerprint(f7);
            Fingerprint f8 = new Fingerprint(0, GenericFingerprint, track2.Id, 8);
            modelService.InsertFingerprint(f8);

            var dict =
                modelService.ReadFingerprintsByMultipleTrackId(new List<Track> { track0, track1, track2 }, 0);

            Assert.AreNotEqual(null, dict);
            Assert.AreEqual(3, dict.Keys.Count);
            foreach (var item in dict)
            {
                Assert.AreEqual(3, item.Value.Count);
            }

            Assert.AreEqual(true, dict.ContainsKey(track0.Id));
            Assert.AreEqual(true, dict.ContainsKey(track1.Id));
            Assert.AreEqual(true, dict.ContainsKey(track2.Id));

            foreach (var pair in dict)
            {
                Assert.AreEqual(3, pair.Value.Count);
            }
        }
        public void ReadFingerprintByIdTest()
        {
            string name = MethodBase.GetCurrentMethod().Name;

            const int fakeId = int.MinValue;
            Album album = new Album(fakeId, name, 1986);
            modelService.InsertAlbum(album);
            Assert.AreNotEqual(fakeId, album);
            Track track = new Track(fakeId, name, name, album.Id, 360);
            modelService.InsertTrack(track);
            Assert.AreNotEqual(fakeId, track.Id);
            Fingerprint f = new Fingerprint(fakeId, GenericFingerprint, track.Id, 0);
            modelService.InsertFingerprint(f);
            Assert.AreNotEqual(fakeId, f.Id);
            Fingerprint readF = modelService.ReadFingerprintById(f.Id);
            Assert.AreEqual(f.Id, readF.Id);
            Assert.AreEqual(f.Signature.Length, readF.Signature.Length);
            for (int i = 0; i < f.Signature.Length; i++)
            {
                Assert.AreEqual(f.Signature[i], readF.Signature[i]);
            }

            Assert.AreEqual(f.TrackId, readF.TrackId);
        }
        public void InsertTrackWithBadAlbumIdForeignKeyReference()
        {
            string name = MethodBase.GetCurrentMethod().Name;

            Album a = new Album(int.MinValue, name, 1990);
            Track track = new Track(int.MinValue, name, name, a.Id);
            modelService.InsertTrack(track);
        }
        public void InsertReadTrackTest()
        {
            string name = MethodBase.GetCurrentMethod().Name;
            Album album = new Album(int.MinValue, name, 1986);
            modelService.InsertAlbum(album);
            Assert.AreNotEqual(int.MinValue, album.Id);
            Track track = new Track(int.MinValue, name, name, album.Id, 360);
            modelService.InsertTrack(track);
            Assert.AreNotEqual(int.MinValue, track.Id);
            var listOfTracks = modelService.ReadTracks();
            bool found = false;
            foreach (Track temp in listOfTracks)
            {
                Assert.IsTrue(temp.Id > 0);
                if (temp.Id == track.Id)
                {
                    found = true;
                    break;
                }
            }
            Assert.AreEqual(true, found);
            Track t = modelService.ReadTrackById(track.Id);
            Assert.AreEqual(track.Id, t.Id);
            Assert.AreEqual(track.AlbumId, t.AlbumId);
            Assert.AreEqual(track.Artist, t.Artist);
            Assert.AreEqual(track.Title, t.Title);
            Assert.AreEqual(track.TrackLengthSec, t.TrackLengthSec);
            List<Album> listAlbums = new List<Album>();
            for (int i = 0; i < 10; i++)
            {
                Album a = new Album(int.MinValue, name + i, i + 1986);
                listAlbums.Add(a);
            }
            modelService.InsertAlbum(listAlbums);
            foreach (Album a in listAlbums)
            {
                Assert.AreNotEqual(int.MinValue, a.Id);
            }

            List<Track> listTracks = new List<Track>();
            List<int> lId = new List<int>();
            for (int i = 0; i < 10; i++)
            {
                Track a = new Track(int.MinValue, name + i, name + i, listAlbums[i].Id);
                listTracks.Add(a);
            }

            modelService.InsertTrack(listTracks);
            foreach (Track item in listTracks)
            {
                Assert.AreNotEqual(int.MinValue, item.Id);
            }

            var readTracks = modelService.ReadTracks();
            List<int> readIds = readTracks.Select(a => a.Id).ToList();
            foreach (int i in lId)
            {
                Assert.AreEqual(true, readIds.Contains(i));
            }
        }
        private List<Track> GetRandomListOfTracks(Album album, int count)
        {
            var tracks = new List<Track>();

            for (int i = 0; i < count; i++)
            {
                Track a = new Track(int.MinValue, album.Name, album.Name, album.Id);
                tracks.Add(a);
            }

            return tracks;
        }
        public void ReadFingerprintByTrackIdTest()
        {
            string name = MethodBase.GetCurrentMethod().Name;

            Album album = new Album(0, name, 1986);
            modelService.InsertAlbum(album);
            Track track = new Track(0, name, name, album.Id, 360);
            modelService.InsertTrack(track);
            Fingerprint f = new Fingerprint(0, GenericFingerprint, track.Id, 0);
            modelService.InsertFingerprint(f);

            var list = modelService.ReadFingerprintsByTrackId(track.Id, 0);
            Fingerprint readF = list.FirstOrDefault(temp => temp.Id == f.Id);
            Assert.AreNotEqual(null, readF);
            Assert.AreEqual(f.Id, readF.Id);
            Assert.AreEqual(f.Signature.Length, readF.Signature.Length);
            for (int i = 0; i < f.Signature.Length; i++)
            {
                Assert.AreEqual(f.Signature[i], readF.Signature[i]);
            }

            Assert.AreEqual(f.TrackId, readF.TrackId);
        }
Пример #16
0
 public void Insert(Track track)
 {
     track.Id = PrepareStoredProcedure(SpInsertTrack).WithParametersFromModel(track).Execute().AsScalar<int>();
 }
        public void ReadFingerprintsByMultipleIdsTest()
        {
            string name = MethodBase.GetCurrentMethod().Name;

            List<Fingerprint> listOfFingers = new List<Fingerprint>();
            Album album = modelService.ReadUnknownAlbum();
            Track track = new Track(0, name, name, album.Id);
            modelService.InsertTrack(track);
            const int Count = 100;
            List<int> listOfGuids = new List<int>();
            const int FakeId = int.MinValue;
            for (int i = 0; i < Count; i++)
            {
                listOfFingers.Add(new Fingerprint(FakeId, GenericFingerprint, track.Id, 0));
            }
            modelService.InsertFingerprint(listOfFingers);
            listOfGuids.AddRange(listOfFingers.Select((f) => f.Id));
            var readFingers = modelService.ReadFingerprintById(listOfGuids);
            Assert.AreEqual(readFingers.Count, listOfFingers.Count);
        }
 private Track InsertTrack()
 {
     Album album = new Album(0, "Track");
     modelService.InsertAlbum(album);
     Track track = new Track(0, "Random", "Random", album.Id);
     modelService.InsertTrack(track);
     return track;
 }
 public void ReadFingerprintsTest()
 {
     string name = MethodBase.GetCurrentMethod().Name;
     Album album = modelService.ReadUnknownAlbum();
     Track t = new Track(0, name, name, album.Id);
     modelService.InsertTrack(t);
     Fingerprint f = new Fingerprint(0, GenericFingerprint, t.Id, 10);
     modelService.InsertFingerprint(f);
     var actual = modelService.ReadFingerprints();
     Assert.IsTrue(actual.Count >= 1);
 }
Пример #20
0
 private void AssertTracksAreEqual(Track expectedTrack, Track actualTrack)
 {
     Assert.AreEqual(expectedTrack.Id, actualTrack.Id);
     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);
 }
 public void ReadTrackByArtistAndTitle()
 {
     string name = MethodBase.GetCurrentMethod().Name;
     Album album = modelService.ReadUnknownAlbum();
     string artistName = name;
     string titleName = name;
     const int FakeId = int.MinValue;
     Track track = new Track(FakeId, artistName, titleName, album.Id);
     modelService.InsertTrack(track);
     Assert.AreNotEqual(FakeId, track.Id);
     Track readTrack = modelService.ReadTrackByArtistAndTitleName(artistName, titleName);
     Assert.IsNotNull(readTrack);
     Assert.AreEqual(artistName, readTrack.Artist);
     Assert.AreEqual(titleName, readTrack.Title);
 }
        public void CreateFingerprintsInsertThenQueryAndGetTheRightResult()
        {
            const int StaticStride = 5115;
            const int SecondsToProcess = 10;
            const int StartAtSecond = 30;
            DefaultQueryConfiguration defaultQueryConfiguration = new DefaultQueryConfiguration();
            QueryFingerprintService queryFingerprintService = new QueryFingerprintService(new CombinedHashingAlgorithm(), modelService);
            ITagService tagService = new BassAudioService();
            TagInfo info = tagService.GetTagInfo(PathToMp3);
            int releaseYear = info.Year;
            Track track = new Track(info.ISRC, info.Artist, info.Title, info.Album, releaseYear, (int)info.Duration);

            modelService.InsertTrack(track);

            var fingerprinter = fingerprintUnitBuilderWithBass.BuildAudioFingerprintingUnit()
                                            .From(PathToMp3, SecondsToProcess, StartAtSecond)
                                            .WithCustomAlgorithmConfiguration(config =>
                                            {
                                                config.Stride = new IncrementalStaticStride(StaticStride, config.SamplesPerFingerprint);
                                            })
                                            .FingerprintIt();

            var fingerprints = fingerprinter.AsIs().Result;
            var subFingerprints = fingerprinter.HashIt().ForTrack(track.Id).Result;

            modelService.InsertSubFingerprint(subFingerprints);

            List<HashBinMinHash> hashBins = new List<HashBinMinHash>();
            foreach (SubFingerprint subFingerprint in subFingerprints)
            {
                long[] groupedSubFingerprint = lshService.Hash(subFingerprint.Signature, defaultQueryConfiguration.NumberOfLSHTables, defaultQueryConfiguration.NumberOfMinHashesPerTable);
                for (int i = 0; i < groupedSubFingerprint.Length; i++)
                {
                    int tableNumber = i + 1;
                    hashBins.Add(new HashBinMinHash(groupedSubFingerprint[i], tableNumber, subFingerprint.Id));
                }
            }

            modelService.InsertHashBin(hashBins);

            QueryResult result = queryFingerprintService.Query(fingerprints, defaultQueryConfiguration);

            Assert.IsTrue(result.IsSuccessful);
            Assert.AreEqual(track.Id, result.Results[0].Track.Id);
        }
 public void ReadTrackByFingerprintInexistantIdTest()
 {
     string name = MethodBase.GetCurrentMethod().Name;
     Album album = new Album(int.MinValue, name, 1986);
     modelService.InsertAlbum(album);
     Track track = new Track(int.MinValue, name, name, album.Id, 360);
     modelService.InsertTrack(track);
     Assert.AreEqual(0,  modelService.ReadTrackByFingerprint(int.MinValue).Count);
 }
Пример #24
0
 public void InsertTrack(Track track)
 {
     trackDao.Insert(track);
 }
 public void ReadTrackByFingerprintTest()
 {
     string name = MethodBase.GetCurrentMethod().Name;
     Album album = new Album(int.MinValue, name, 1986);
     modelService.InsertAlbum(album);
     Track track = new Track(int.MinValue, name, name, album.Id, 360);
     modelService.InsertTrack(track);
     const int FakeId = int.MinValue;
     Fingerprint f = new Fingerprint(FakeId, GenericFingerprint, track.Id, int.MinValue);
     modelService.InsertFingerprint(f);
     Assert.AreNotEqual(FakeId, f.Id);
     var list = modelService.ReadTrackByFingerprint(f.Id);
     Track readT = list.FirstOrDefault(temp => temp.Id == track.Id);
     Assert.AreNotEqual(null, readT);
     Assert.AreEqual(track.Id, readT.Id);
     Assert.AreEqual(track.AlbumId, readT.AlbumId);
     Assert.AreEqual(track.Artist, readT.Artist);
     Assert.AreEqual(track.Title, readT.Title);
     Assert.AreEqual(track.TrackLengthSec, readT.TrackLengthSec);
 }
Пример #26
0
        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 DefaultFingerprintingConfiguration().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;
                }

                Track track;
                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;
                        }

                        track = new Track(isrc, artist, title, album, releaseYear, (int)duration);
                        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
                {
                    List<SubFingerprint> subFingerprintsToTrack =
                        fingerprintUnitBuilder
                                        .BuildAudioFingerprintingUnit()
                                        .From(fileList[i])
                                        .WithCustomAlgorithmConfiguration(
                                            config =>
                                                {
                                                    config.TopWavelets = topWavelets;
                                                    config.Stride = stride;
                                                })
                                         .FingerprintIt()
                                         .HashIt()
                                         .ForTrack(track.Id)
                                         .Result; // Create SubFingerprints

                    modelService.InsertSubFingerprint(subFingerprintsToTrack);
                    count = subFingerprintsToTrack.Count;
                    HashSubFingerprintsUsingMinHash(subFingerprintsToTrack);
                }
                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 InsertFingerprintWithBadTrackIdForeignKeyreference()
 {
     string name = MethodBase.GetCurrentMethod().Name;
     Album a = new Album(0, name, 1990);
     Track track = new Track(0, name, name, a.Id);
     Fingerprint f = new Fingerprint(0, GenericFingerprint, track.Id, 0);
     modelService.InsertFingerprint(f);
 }