Example #1
0
        public void Search(List <Audio> source, Audio referenceItem, object parameters = null)
        {
            SimilarityOptions Options = parameters as SimilarityOptions;

            if (Options == null)
            {
                throw new ArgumentException("Invalid options");
            }

            var ReferenceTempogram       = referenceItem.GetData <Tempogram>();
            var ReferenceVolumDescriptor = referenceItem.GetData <VolumeDescriptor>();

            foreach (var Item in source)
            {
                var Distance  = 0f;
                var Tempogram = Item.GetData <Tempogram>();
                if (Tempogram == null || ReferenceTempogram == null)
                {
                    Distance += 1;
                }
                else
                {
                    if (Options.LongRhythm)
                    {
                        Distance += ReferenceTempogram.LongTempogram.Distance(Tempogram.LongTempogram);
                    }
                    if (Options.ShortRhythm)
                    {
                        Distance += ReferenceTempogram.ShortTempogram.Distance(Tempogram.ShortTempogram) * 0.3f;
                    }
                    if (Options.Intensity)
                    {
                        Distance += Math.Abs(ReferenceTempogram.Intensity - Tempogram.Intensity) * 0.2f;
                    }
                }

                if (Options.VolumeDistr)
                {
                    var VolumeDescriptor = Item.GetData <VolumeDescriptor>();
                    if (VolumeDescriptor == null || ReferenceVolumDescriptor == null)
                    {
                        Distance += 1f;
                    }
                    else
                    {
                        Distance += ReferenceVolumDescriptor.Distance(VolumeDescriptor);
                    }
                }

                Item.Tag = Distance;
            }

            source.Sort((a1, a2) => a1.Tag.CompareTo(a2.Tag));
        }
Example #2
0
        public ActionResult Search(int id)
        {
            var trackList = new List<Track>();
            if (db.Tracks.Any())
            {
                trackList = db.Tracks.ToList();
            }

            if (id < 0 || id >= ShownItems.Count)
            {
                return View(new List<Track>());
            }

            SimilarityOptions Options = new SimilarityOptions()
            {
                AmpEnvelope = true,
                Intensity = true,
                LongRhythm = true,
                ShortRhythm = true,
                VolumeDistr = true
            };

            var searchItems = ShownItems.SearchBy<SearchBySimilarity>(id, Options);
            var showTrackList = new List<Track>();
            foreach (var shownItem in searchItems)
            {
                var track = trackList.FirstOrDefault(t => t.FileName.Contains(shownItem.ShortName));
                if (track != null)
                {
                    showTrackList.Add(track);
                }
            }
            return View(showTrackList);
        }
        private void findSimilarsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (selectedItemIndex < 0 || selectedItemIndex >= items.Count)
                return;
            try
            {
                if (findSimilarPropertiesForm.ShowDialog() != DialogResult.OK)
                    return;

                SimilarityOptions Options = new SimilarityOptions()
                    {
                        AmpEnvelope = findSimilarPropertiesForm.cbAmpEnvelope.Checked,
                        Intensity = findSimilarPropertiesForm.cbIntensity.Checked,
                        LongRhythm = findSimilarPropertiesForm.cbLongRhythm.Checked,
                        ShortRhythm = findSimilarPropertiesForm.cbShortRhythm.Checked,
                        VolumeDistr = findSimilarPropertiesForm.cbVolumeDistr.Checked
                    };

                items.SearchBy<SearchBySimilarity>(selectedItemIndex, Options);

                ScrollToTopLeft();
                selectedItemIndex = 0;
                Invalidate();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }