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") }); }
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 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()); }
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); }
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() }); }
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); }
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); }
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); }
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); }
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(); } } } } }
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 }); }
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(); }
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); }
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); } }
void Awake() { fingering = new Fingering(player); }