Beispiel #1
0
        private string GetText(InternalNote?[] notes, int str, MarkTextOption markTextOption)
        {
            if (str < 0 || str >= notes.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(str));
            }

            string text = "";

            if (notes[str].HasValue)
            {
                switch (markTextOption)
                {
                case MarkTextOption.ShowNote_PreferFlats:
                    text = NoteUtils.ToString(notes[str].Value, InternalNoteStringStyle.PreferFlat);
                    break;

                case MarkTextOption.ShowNote_PreferSharps:
                    text = NoteUtils.ToString(notes[str].Value, InternalNoteStringStyle.PreferSharp);
                    break;

                case MarkTextOption.ShowNote_ShowBoth:
                    text = NoteUtils.ToString(notes[str].Value, InternalNoteStringStyle.ShowBoth);
                    break;
                }
            }

            return(text);
        }
Beispiel #2
0
        public void Set(string key, Note value)
        {
            if (StringUtils.IsNullOrWhiteSpace(key))
            {
                throw new ArgumentNullException(nameof(key));
            }

            Set(key, NoteUtils.ToString(value));
        }
Beispiel #3
0
        public static ObservableCollection <string> GetInternalNotes()
        {
            ObservableCollection <string> collection = new ObservableCollection <string>();

            for (int i = 0; i < Enum.GetValues(typeof(InternalNote)).Length; i++)
            {
                collection.Add(NoteUtils.ToString((InternalNote)i, InternalNoteStringStyle.ShowBoth));
            }

            return(collection);
        }
Beispiel #4
0
        public static ObservableCollection <string> GetNotes()
        {
            ObservableCollection <string> collection = new ObservableCollection <string>();

            for (int i = 0; i < Enum.GetValues(typeof(Note)).Length; i++)
            {
                collection.Add(NoteUtils.ToString((Note)i));
            }

            return(collection);
        }
Beispiel #5
0
        public void SetTarget(Note rootNote, IScale scale)
        {
            if (null == scale)
            {
                throw new ArgumentNullException(nameof(scale));
            }

            Settings[Prefix + "rootnote"] = NoteUtils.ToString(rootNote);
            Settings[Prefix + "scale"]    = scale.LongName;
            ScaleLevel = scale.Level;

            _cachedScale = scale;
        }
        public void SetTarget(Note rootNote, IChordQuality chordQuality)
        {
            if (null == chordQuality)
            {
                throw new ArgumentNullException(nameof(chordQuality));
            }

            Settings[Prefix + "rootnote"]     = NoteUtils.ToString(rootNote);
            Settings[Prefix + "chordquality"] = chordQuality.LongName;
            ChordQualityLevel = chordQuality.Level;

            _cachedChordQuality = chordQuality;
        }
Beispiel #7
0
        private void DisplayChordAccordingToNameClickEvent(object sender, RoutedEventArgs e)
        {
            Chord target  = GetChordByNameSet();
            var   bass    = target.BassNote;
            int   bassNum = ((int)bass + 1);

            ChordNoteNumTmp.Add(bassNum);
            string        bassTag  = "1-" + NoteUtils.ToString(bass) + "-" + bassNum.ToString();
            var           noteList = target.ToInternalNoteList().Where(n => n != null).Cast <InternalNote>().ToList();
            List <string> noteTags = new List <string>()
            {
                bassTag
            };

            noteList.ForEach(n =>
            {
                string level;
                string note = NoteUtils.ToString(n);
                string num;
                if ((int)n > (int)bass)
                {
                    level = "1";
                    num   = (bassNum + (int)n - (int)bass).ToString();
                }
                else if ((int)n == (int)bass)
                {
                    level = "2";
                    num   = (12 + bassNum).ToString();
                }
                else
                {
                    level = "2";
                    num   = (12 + bassNum - (int)bass + (int)n).ToString();
                }
                noteTags.Add($"{level}-{note}-{num}");
                ChordNoteNumTmp.Add(int.Parse(num));
            });
            DisplayKeyCore(noteTags);
            ArrowMode = "DisplayChord";
            ChordNoteNumTmp.Sort();
            CheckArrowVisibleState();
        }
Beispiel #8
0
        private void DisplayChordArpeggioEvent(object sender, RoutedEventArgs e)
        {
            Left.Visibility  = Visibility.Hidden;
            Right.Visibility = Visibility.Hidden;
            Chord target   = GetChordByNameSet();
            var   noteList = target.ToInternalNoteList().Where(n => n != null).Cast <InternalNote>().ToList();

            noteList.Add(target.BassNote);
            noteList.Distinct();
            foreach (var children in Pianokey.Children)
            {
                Image  img     = children as Image;
                string imgTag  = img.Tag as string;
                string noteStr = imgTag.Split('-')[1];
                if (noteList.Any(n => noteStr == NoteUtils.ToString(n)))
                {
                    ChangePianoKeyChooseStatus(img, status: "Choose");
                }
            }
        }
Beispiel #9
0
        public string GetText(MarkPosition mark, MarkTextOption markTextOption)
        {
            string text = "";

            switch (markTextOption)
            {
            case MarkTextOption.ShowNote_PreferFlats:
                text = NoteUtils.ToString(NoteAt(mark), InternalNoteStringStyle.PreferFlat);
                break;

            case MarkTextOption.ShowNote_PreferSharps:
                text = NoteUtils.ToString(NoteAt(mark), InternalNoteStringStyle.PreferSharp);
                break;

            case MarkTextOption.ShowNote_ShowBoth:
                text = NoteUtils.ToString(NoteAt(mark), InternalNoteStringStyle.ShowBoth);
                break;
            }
            return(text);
        }
Beispiel #10
0
 public override string ToString()
 {
     return(string.Format("{0}{1}", NoteUtils.ToString(Note), Octave));
 }
Beispiel #11
0
        public Diagram ToDiagram(ChordFinderStyle chordFinderStyle)
        {
            int[] marks = MarkUtils.AbsoluteToRelativeMarks(Marks, out int baseLine, Parent.ChordFinderOptions.NumFrets);

            InternalNote?[] notes    = MarkUtils.GetInternalNotes(Marks, Parent.ChordFinderOptions.Tuning);
            InternalNote    rootNote = NoteUtils.ToInternalNote(Parent.ChordFinderOptions.RootNote);

            if (chordFinderStyle.MirrorResults)
            {
                Array.Reverse(marks);
                Array.Reverse(notes);
            }

            int numStrings = marks.Length;

            int numFrets = Parent.ChordFinderOptions.NumFrets;

            Diagram d = new Diagram(chordFinderStyle.Style, numStrings, numFrets);

            if (chordFinderStyle.AddTitle)
            {
                d.Title = NoteUtils.ToString(Parent.ChordFinderOptions.RootNote) + Parent.ChordFinderOptions.ChordQuality.Abbreviation;
                d.Style.TitleLabelStyle = DiagramLabelStyle.ChordName;
            }

            // Add marks
            for (int i = 0; i < marks.Length; i++)
            {
                int @string = i + 1;

                int          fret = Math.Max(marks[i], 0);
                MarkPosition mp   = new MarkPosition(@string, fret);

                DiagramMark dm = d.NewMark(mp);

                // Set mark type
                if (marks[i] == -1) // Muted string
                {
                    dm.Type = DiagramMarkType.Muted;
                }
                else if (marks[i] == 0) // Open string
                {
                    dm.Type = DiagramMarkType.Open;
                }

                // Change to root if necessary
                if (chordFinderStyle.AddRootNotes && notes[i].HasValue && notes[i].Value == rootNote)
                {
                    dm.Type = (dm.Type == DiagramMarkType.Open) ? DiagramMarkType.OpenRoot : DiagramMarkType.Root;
                }

                // Add text
                if (chordFinderStyle.MarkTextOption != MarkTextOption.None)
                {
                    dm.Text = GetText(notes, i, chordFinderStyle.MarkTextOption);
                }

                // Add bottom marks
                if (chordFinderStyle.AddBottomMarks)
                {
                    MarkPosition bottomPosition = new MarkPosition(@string, numFrets + 1);
                    DiagramMark  bottomMark     = d.NewMark(bottomPosition);
                    bottomMark.Type = DiagramMarkType.Bottom;
                    bottomMark.Text = GetText(notes, i, chordFinderStyle.BottomMarkTextOption);
                }
            }

            // Add nut or fret label
            if (baseLine == 0)
            {
                d.Style.GridNutVisible = true;
            }
            else
            {
                d.Style.GridNutVisible = false;
                FretLabelPosition flp = new FretLabelPosition(chordFinderStyle.FretLabelSide, 1);
                d.NewFretLabel(flp, baseLine.ToString());
            }

            // Add barre
            BarrePosition bp = MarkUtils.AutoBarrePosition(marks, chordFinderStyle.BarreTypeOption, chordFinderStyle.MirrorResults);

            if (null != bp)
            {
                d.NewBarre(bp);
            }

            return(d);
        }
Beispiel #12
0
        public Diagram ToDiagram(ScaleFinderStyle scaleFinderStyle)
        {
            int numStrings = Parent.ScaleFinderOptions.Instrument.NumStrings;
            int numFrets   = Parent.ScaleFinderOptions.NumFrets;

            IEnumerable <MarkPosition> marks = MarkUtils.AbsoluteToRelativeMarks(Marks, out int baseLine, numFrets, numStrings);

            Diagram d = new Diagram(scaleFinderStyle.Style, numStrings, numFrets);

            if (scaleFinderStyle.AddTitle)
            {
                d.Title = NoteUtils.ToString(Parent.ScaleFinderOptions.RootNote) + " " + Parent.ScaleFinderOptions.Scale.Name;
                d.Style.TitleLabelStyle = DiagramLabelStyle.Regular;
            }

            int markPositionIndex = 0;

            // Add existing marks
            foreach (MarkPosition mark in marks)
            {
                int @string = mark.String;

                if (scaleFinderStyle.MirrorResults)
                {
                    @string = numStrings - (@string - 1);
                }

                int          fret = mark.Fret;
                MarkPosition mp   = new MarkPosition(@string, fret);

                DiagramMark dm = d.NewMark(mp);

                // Set mark type
                if (scaleFinderStyle.AddRootNotes && IsRoot(markPositionIndex))  // Use markPositionIndex, to get the correct roots in mirror mode
                {
                    dm.Type = DiagramMarkType.Root;
                }

                if (fret == 0) // Open string
                {
                    dm.Type = (dm.Type == DiagramMarkType.Root) ? DiagramMarkType.OpenRoot : DiagramMarkType.Open;
                }

                // Add text
                dm.Text = GetText(markPositionIndex, scaleFinderStyle.MarkTextOption);  // Use markPositionIndex, not mp, to get the correct text in mirror mode

                markPositionIndex++;
            }

            // Add nut or fret label
            if (baseLine == 0)
            {
                d.Style.GridNutVisible = true;
            }
            else
            {
                d.Style.GridNutVisible = false;
                FretLabelPosition flp = new FretLabelPosition(scaleFinderStyle.FretLabelSide, 1);
                d.NewFretLabel(flp, baseLine.ToString());
            }

            return(d);
        }