private int NoteFromScalePosition(ScalePosition pos) { int oct = Mathf.Clamp(5 + pos.octaveChange, 1, 10); int note = pos.noteNum + key + oct * 12; return(Mathf.Clamp(note, 0, 127)); }
private int GetSingleNote(int interval, NoteMode mode) { ScalePosition pos = new ScalePosition(); // Handle Static Mode if (mode == NoteMode.STATIC_MODE) { pos = Scales.GetNoteFromScale(interval, minOctave, maxOctave); } if (mode == NoteMode.RELATIVE_MODE) { currInterval += interval; int finalInterval = currInterval; // octave offset (middle c at 0 octave) pos = Scales.GetNoteFromScale(finalInterval, minOctave, maxOctave); octave = pos.octaveChange; // need to update octave if changed } // center around 4th octave (middle c) return(NoteFromScalePosition(pos)); }