Exemplo n.º 1
0
        public IEnumerable <ChordsItemViewModel> GetChords(NoteName name)
        {
            string s = @"IV
E|---|---|-x-|---|
B|---|---|---|---|
G|---|---|-x-|---|
D|-x-|---|---|---|
A|---|---|-x-|---|
E|---|---|---|---|";



            var fingering = Fingering.Parse(s);

            Func <string, ChordsItemViewModel> createChord = str => new ChordsItemViewModel(new Chord
            {
                RootNote   = name,
                Name       = name.Name + str,
                Fingerings = new[]
                {
                    fingering
                    ,
                    fingering
                    ,
                    fingering
                    ,
                }
            });

            return(new[]
            {
                createChord(""), createChord("m"), createChord("7"), createChord("m7"), createChord("9"),
                createChord("6"), createChord("sus4")
            });
        }
Exemplo n.º 2
0
        public void Fingering_Along_Single_String_Scores_Lower_Than_Across_Three_Strings()
        {
            var oneString = new Fingering();

            // do they all fit under one hand position.
            // one fret per finger
            oneString.Add(new FingerPosition(0, 1));
            oneString.Add(new FingerPosition(1, 1));
            oneString.Add(new FingerPosition(2, 1));
            oneString.Add(new FingerPosition(3, 1));
            oneString.Add(new FingerPosition(4, 1));
            oneString.Add(new FingerPosition(5, 1));

            var spread = new Fingering();

            spread.Add(new FingerPosition(10, 3));
            spread.Add(new FingerPosition(11, 3));
            spread.Add(new FingerPosition(12, 3));
            spread.Add(new FingerPosition(8, 2));
            spread.Add(new FingerPosition(9, 2));
            spread.Add(new FingerPosition(10, 2));

            var scorer = new FingeringScorer();

            Assert.True(scorer.Score(oneString) < scorer.Score(spread));
        }
 public ChordDiagram()
 {
     FretOfBarres = new int[5];
     BarreStarts = new int[5];
     BarreEnds = new int[5];
     Fingering = new Fingering[7];
     Frets = new int[7];
 }
 public ChordDiagram()
 {
     FretOfBarres = new int[5];
     BarreStarts  = new int[5];
     BarreEnds    = new int[5];
     Fingering    = new Fingering[7];
     Frets        = new int[7];
 }
Exemplo n.º 5
0
        public void Fingering_In_Single_Area_Is_One_Hand_Position()
        {
            var f = new Fingering();

            f.Add(new FingerPosition(1, 1));
            f.Add(new FingerPosition(2, 1));
            f.Add(new FingerPosition(3, 1));

            Assert.Single(f.HandPositions());
        }
Exemplo n.º 6
0
        public void Fingering_Of_Octave_Is_Three_Hand_Positions()
        {
            var f = new Fingering();

            foreach (int fret in Enumerable.Range(1, 12))
            {
                f.Add(new FingerPosition(fret, 1));
            }

            Assert.Equal(3, f.HandPositions().Count);
        }
Exemplo n.º 7
0
        private Chord ParseChord(XElement chordElement)
        {
            var chordName = chordElement.Attribute("name").Value;

            return(new Chord
            {
                Name = chordName,
                RootNote = GetRootNoteFromChordName(chordName),
                Fingerings = chordElement.Elements("fingering")
                             .Select(e => Fingering.Parse(e.Value))
                             .ToArray()
            });
        }
Exemplo n.º 8
0
        public void Fingering_Repeated_Notes_Are_Included_In_Hand_Positions()
        {
            var f = new Fingering();

            foreach (int fret in Enumerable.Range(1, 12))
            {
                foreach (int @string in Enumerable.Range(1, 6))
                {
                    f.Add(new FingerPosition(fret, @string));
                }
            }

            Assert.Equal(3, f.HandPositions().Count);
        }
Exemplo n.º 9
0
        public void Parse_Fingering2()
        {
            string s = @"IV
E|---|---|-x-|---|
B|---|---|---|---|
G|---|---|-x-|---|
D|-x-|---|---|---|
A|---|---|-x-|---|
E|---|---|---|---|";

            var fingering = Fingering.Parse(s);

            fingering.ToString().Should().Be(s);
        }
Exemplo n.º 10
0
        public void Fingering_In_High_Then_Low_Area_Is_Two_Hand_Positions()
        {
            var f = new Fingering();

            f.Add(new FingerPosition(10, 1));
            f.Add(new FingerPosition(11, 1));
            f.Add(new FingerPosition(12, 1));

            f.Add(new FingerPosition(1, 1));
            f.Add(new FingerPosition(2, 1));
            f.Add(new FingerPosition(3, 1));

            Assert.Equal(2, f.HandPositions().Count);
        }
Exemplo n.º 11
0
        public static Fingering CreateFingeringFor(this FingerboardInstrument instrument, Melody piece, ISelectValue randomness)
        {
            var notes = piece.Notes;

            var fingering = new Fingering();

            foreach (Note p in notes)
            {
                var possibleAlternatives = instrument.PositionsFor(p);

                int            randomIndex = randomness.BetweenZeroAnd(possibleAlternatives.Count - 1);
                FingerPosition selected    = possibleAlternatives[randomIndex];

                fingering.Add(new FingerPosition(selected.Fret, selected.String));
            }

            return(fingering);
        }
Exemplo n.º 12
0
        public static void GetFingering(HtmlDocument doc, int id)
        {
            var repeaters = doc.DocumentNode.SelectNodes("//div[@id='song_chords']/img");

            if (repeaters != null)
            {
                foreach (var repeater in repeaters)
                {
                    if (repeater != null)
                    {
                        string name = repeater.Attributes["alt"].Value;
                        name = name.Substring(7, name.Length - 7);
                        using (var context = new ApplicationDbContext())
                        {
                            if (!context.Fingerings.Any(p => p.Name == name))
                            {
                                string     picture    = "http:" + repeater.Attributes["src"].Value;
                                SuiteСhord suiteChord = context.SuiteСhords.First(p => p.SuiteСhordId == id);
                                Fingering  fingering  = context.Fingerings.Add(new Fingering(name, picture, suiteChord));
                                context.SaveChanges();
                                context.Entry(suiteChord).State = EntityState.Modified;
                                suiteChord.Fingerings.Add(fingering);
                                context.SaveChanges();
                            }
                            else
                            {
                                //string picture = "http:" + repeater.SelectSingleNode(".//img[@src]").Attributes["src"].Value;
                                Fingering  fingering  = context.Fingerings.First(p => p.Name == name);
                                SuiteСhord suiteChord = context.SuiteСhords.First(p => p.SuiteСhordId == id);
                                context.Entry(suiteChord).State = EntityState.Modified;
                                context.Entry(fingering).State  = EntityState.Modified;
                                suiteChord.Fingerings.Add(fingering);
                                fingering.SuiteСhords.Add(suiteChord);
                                context.SaveChanges();
                            }
                            context.SaveChanges();
                        }
                    }
                }
            }
        }
Exemplo n.º 13
0
        public void Parse_Fingering3()
        {
            string s0 = @"VIII
E|-x-|---|---|---|
B|-x-|---|---|---|
G|-x-|-x-|---|---|
D|-x-|---|-x-|---|
A|-x-|---|-x-|---|
E|-x-|---|---|---|";
            string s1 = @"VIII
E|-x-|---|---|---|
B|-x-|---|---|---|
G|---|-x-|---|---|
D|---|---|-x-|---|
A|---|---|-x-|---|
E|-x-|---|---|---|";

            var fingering = Fingering.Parse(s0);

            fingering.ToString().Should().Be(s1);
        }
        public IEnumerable <Chord> GetChords(NoteName name)
        {
            string s = @"IV
E|---|---|-x-|---|
B|---|---|---|---|
G|---|---|-x-|---|
D|-x-|---|---|---|
A|---|---|-x-|---|
E|---|---|---|---|";

            var fingering = Fingering.Parse(s);
            var chord1    = new Chord
            {
                RootNote   = name,
                Name       = name.Name,
                Fingerings = new Fingering[]
                {
                    fingering,
                    fingering,
                    fingering,
                }
            };

            var chord2 = new Chord
            {
                RootNote   = name,
                Name       = name.Name + "m",
                Fingerings = new Fingering[]
                {
                    fingering,
                    fingering,
                    fingering,
                }
            };

            return(new[] { chord1, chord2 });
        }
Exemplo n.º 15
0
        static void Main(string[] args)
        {
            var instrument = new SixStringGuitarInstrument();

            // create a simple melody.
            var walkingBassFingering = new Fingering();

            walkingBassFingering.Add(new FingerPosition(0, 1));
            walkingBassFingering.Add(new FingerPosition(1, 1));
            walkingBassFingering.Add(new FingerPosition(2, 1));
            walkingBassFingering.Add(new FingerPosition(3, 1));

            Console.WriteLine(FingeringPrinter.Print(walkingBassFingering, instrument));

            // build the list of notes
            var melody = walkingBassFingering.ToMelody(instrument);

            // can we build the simples reconstruction ?
            var roundTripFingering = FingeringCreator.CreateFingeringFor(instrument, melody, new FixedValueSelector());

            Console.WriteLine(FingeringPrinter.Print(roundTripFingering, instrument));

            Console.ReadKey();
        }
Exemplo n.º 16
0
    public void run()
    {
        if (MidiSeq.Count == 0)
        {
            Debug.LogWarning("MIDI no track found.");
            return;
        }

        if (!HandConfigLib)
        {
            HandConfigLib = GetComponent <HandConfigLibrary>();
        }

        if (!HandConfigLib)
        {
            Debug.LogError("HandConfigLibrary is null.");
        }

        var trackMap = HandTracksMap;

        Fingering[] results     = new Fingering[trackMap.Count];
        int         resultIndex = 0;

        foreach (var pair in trackMap)
        {
            if (pair.Key >= Hands.Length)
            {
                Debug.LogErrorFormat("Hand index {0} out of hand config range.", pair.Key);
                return;
            }

            Hand hand = Hands[pair.Key];

            int[] trackList = pair.Value;

            NotationTrack[] tracks = new NotationTrack[trackList.Length];
            for (int track = 0; track < trackList.Length; ++track)
            {
                tracks[track] = Notation[trackList[track]];
            }

            Navigator.Track                   = NotationTrack.merge(tracks);
            Navigator.Config                  = HandConfigLib.getConfig(hand.Config);
            Navigator.KeepConstraints         = KeepConstraints;
            Navigator.MinStepCount            = StepCountMin;
            Navigator.MaxStepCount            = StepCountMax;
            Navigator.BubbleLength            = BubbleLength;
            Navigator.EstimationStepIncrement = EstimationStepIncrement;

            if (Navigator.Config == null)
            {
                Debug.LogErrorFormat("Hand config of {0} is null.", hand.Config);
                return;
            }

            Navigator.HandType      = hand.Type;
            Navigator.AdaptionSpeed = hand.AdaptionSpeed;

            results[resultIndex++] = Navigator.run();

            if (DumpTree)
            {
#if UNITY_EDITOR
                UnityEditor.EditorUtility.DisplayProgressBar("FingeringGenerator", "DumpTree ...", 0);
#endif

                FileStream file = new FileStream(Application.dataPath + "/Editor/Log/FingeringNavigatorTreeDump" + pair.Key.ToString() + ".txt", FileMode.Create);

                byte[] bytes = System.Text.Encoding.Default.GetBytes(Navigator.getTreeJsonDump());
#if UNITY_EDITOR
                UnityEditor.EditorUtility.DisplayProgressBar("FingeringGenerator", string.Format("DumpTree {0:n} bytes...", bytes.Length), 0);
#endif
                file.Write(bytes, 0, bytes.Length);

                file.Close();

#if UNITY_EDITOR
                UnityEditor.EditorUtility.ClearProgressBar();
#endif
            }

            /*// dump leaf nodes
             * {
             *      FileStream file = new FileStream(Application.dataPath + "/Editor/Log/leaves.txt", FileMode.Create);
             *
             *      file.WriteByte((byte)'[');
             *      List<FingeringNavigator.TreeNode> leaves = Navigator.TreeLeaves;
             *      leaves.Sort(delegate(FingeringNavigator.TreeNode node1, FingeringNavigator.TreeNode node2)
             *      {
             *              double cost1 = node1.CommittedCost;
             *              double cost2 = node2.CommittedCost;
             *
             *              return cost1.CompareTo(cost2);
             *      });
             *      foreach(var leaf in leaves)
             *      {
             *              byte[] bytes = System.Text.Encoding.Default.GetBytes(leaf.JsonDump);
             *              file.Write(bytes, 0, bytes.Length);
             *              file.WriteByte((byte)',');
             *      }
             *      file.WriteByte((byte)'{');
             *      file.WriteByte((byte)'}');
             *      file.WriteByte((byte)']');
             *
             *      file.Close();
             * }*/
        }

        NotationUtils.appendFingeringToMidiFile(MidiSeq, results);
    }
Exemplo n.º 17
0
        private void DrawTab()
        {
            ImageBrush One = new ImageBrush
            {
                ImageSource =
                    new BitmapImage(
                        new Uri(@"pack://*****:*****@"pack://application:,,,/Images/ChordBG.png", UriKind.RelativeOrAbsolute)
                            )
                };

                tbl.CellSpacing = 2;

                tbl.Margin = new Thickness(0, 10, 0, 0);
                // tbl.Background = new Brush("Images/ChordBG.png");
                for (int x = 0; x < 7; x++)
                {
                    tbl.Columns.Add(new TableColumn());
                    tbl.Columns[tbl.Columns.Count - 1].Width = new GridLength(23);
                }
                tbl.Columns[0].Width = new GridLength(18);
                // Create and add an empty TableRowGroup to hold the table's Rows.
                tbl.RowGroups.Add(new TableRowGroup());
                // Add the first (title) row.
                for (int i = 0; i < 7; i++)
                {
                    TableRow currentRow = new TableRow();
                    tbl.RowGroups[0].Rows.Add(currentRow);

                    for (int j = 0; j < 7; j++)
                    {
                        TableCell cell = new TableCell();
                        currentRow.Cells.Add(cell);
                        cell.BorderThickness = new Thickness(0);
                        cell.Padding         = new Thickness(0, 0, 0, 0);
                    }
                }

                // Fill table with fingering values
                string[] vals     = Fingering.Split('/');
                string   b        = vals.Where(a => !a.Contains("-1") && a.Split(',')[0] != "0").Last();
                int      MinFrett = Convert.ToInt32(b.Split(',')[0]);

                // Showing the starting Frett
                Paragraph paragraph2 = new Paragraph();
                paragraph2.Inlines.Add(new Run(MinFrett.ToString()));
                tbl.RowGroups[0].Rows[1].Cells[0].Blocks.Add(paragraph2);

                // Showing finger positions
                foreach (string val in vals)
                {
                    string[] points = val.Split(',');
                    if (points.Length == 2)
                    {
                        int ColumnIndex = Math.Abs(Convert.ToInt32(points[1]) - 6);
                        if (points[0] == "-1")
                        {
                            Paragraph paragraph = new Paragraph();
                            paragraph.Inlines.Add(new Run("X"));
                            tbl.RowGroups[0].Rows[0].Cells[ColumnIndex].Blocks.Add(paragraph);
                        }
                        else
                        {
                            Paragraph paragraph = new Paragraph();
                            paragraph.Inlines.Add(new Run("O"));
                            tbl.RowGroups[0].Rows[0].Cells[ColumnIndex].Blocks.Add(paragraph);
                        }
                    }
                    else
                    {
                        int RowIndex    = Convert.ToInt32(points[0]) - MinFrett + 1;
                        int ColumnIndex = Math.Abs(Convert.ToInt32(points[1]) - 6);

                        Paragraph paragraph = new Paragraph();
                        paragraph.Inlines.Add(new Run(points[2]));
                        tbl.RowGroups[0].Rows[RowIndex].Cells[ColumnIndex].Blocks.Add(paragraph);
                    }
                }

                fig.Blocks.Add(tbl);
                Paragraph MainParag = new Paragraph(fig);
                doc1.Blocks.Add(MainParag);
            }
        }
Exemplo n.º 18
0
 void Awake()
 {
     fingering = new Fingering(player);
 }