private void AlterOctave(string value) { var name = Regex.Replace(value, @"[\d',.]", string.Empty)[0]; switch (_previous.Name) { case Names.C when name == 'g' || name == 'a' || name == 'b': case Names.D when name == 'a' || name == 'b': case Names.E when name == 'b': _relativeOctave--; break; case Names.G when name == 'c': case Names.A when name == 'c' || name == 'd': case Names.B when name == 'c' || name == 'd' || name == 'e': _relativeOctave++; break; } var higher = value.ToCharArray().Count(a => a == '\''); if (higher > 0) { _relativeOctave += higher; } var lower = value.ToCharArray().Count(c => c == ','); if (lower > 0) { _relativeOctave -= lower; } }
public TokenScoreBuilder() { _lastTimeSignature = new TimeSignature { Beat = Durations.Quarter, Ticks = 4 }; _currentGroup = new SymbolGroup(); _currentGroup.Meter = _lastTimeSignature; _score = new Score { SymbolGroups = { _currentGroup } }; _relativeOctave = Octaves.Three; _previous = new Common.Models.Note(Names.C, _relativeOctave); }