Skip to content

Commit

Permalink
refactor(notes): rename notes using the English convention
Browse files Browse the repository at this point in the history
  • Loading branch information
albertms10 committed Apr 7, 2023
1 parent 69678ef commit b2fe716
Show file tree
Hide file tree
Showing 9 changed files with 124 additions and 140 deletions.
14 changes: 7 additions & 7 deletions lib/src/classes/enharmonic_note.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ class EnharmonicNote extends Enharmonic<Note> {

@override
Set<Note> get items {
final note = NotesValues.fromValue(semitones);
final note = Notes.fromValue(semitones);

if (note != null) {
final noteBelow = NotesValues.fromOrdinal(Notes.values.indexOf(note));
final noteAbove = NotesValues.fromOrdinal(Notes.values.indexOf(note) + 2);
final noteBelow = Notes.fromOrdinal(Notes.values.indexOf(note));
final noteAbove = Notes.fromOrdinal(Notes.values.indexOf(note) + 2);

return SplayTreeSet<Note>.from({
Note(
Expand All @@ -39,11 +39,11 @@ class EnharmonicNote extends Enharmonic<Note> {

return SplayTreeSet<Note>.from({
Note(
NotesValues.fromValue(semitones - 1)!,
Notes.fromValue(semitones - 1)!,
Accidental.sharp,
),
Note(
NotesValues.fromValue(semitones + 1)!,
Notes.fromValue(semitones + 1)!,
Accidental.flat,
),
});
Expand All @@ -53,9 +53,9 @@ class EnharmonicNote extends Enharmonic<Note> {
///
/// Examples:
/// ```dart
/// EnharmonicNote.e.note() == const Note(Notes.mi)
/// EnharmonicNote.e.note() == const Note(Notes.e)
/// EnharmonicNote.dSharp.note(Accidental.flat)
/// == const Note(Notes.mi, Accidental.flat)
/// == const Note(Notes.e, Accidental.flat)
/// ```
Note note([Accidental preferredAccidental = Accidental.natural]) {
final enharmonicNotes = EnharmonicNote(semitones).items;
Expand Down
4 changes: 2 additions & 2 deletions lib/src/classes/key_signature.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ class KeySignature {
/// ```dart
/// const KeySignature(2, Accidental.flat).tonalities
/// == RelativeTonalities({
/// const Tonality(Note(Notes.si, Accidental.flat), Modes.major),
/// const Tonality(Note(Notes.sol), Modes.minor),
/// const Tonality(Note(Notes.b, Accidental.flat), Modes.major),
/// const Tonality(Note(Notes.g), Modes.minor),
/// })
/// ```
RelativeTonalities get tonalities => RelativeTonalities({
Expand Down
6 changes: 3 additions & 3 deletions lib/src/classes/relative_tonalities.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ class RelativeTonalities implements Comparable<RelativeTonalities> {
/// Example:
/// ```dart
/// RelativeTonalities({
/// const Tonality(Note(Notes.re), Modes.major),
/// const Tonality(Note(Notes.si), Modes.minor),
/// const Tonality(Note(Notes.d), Modes.major),
/// const Tonality(Note(Notes.b), Modes.minor),
/// }).accidentals == 2
/// ```
int get accidentals => _itemsAccidentals(tonalities);
Expand All @@ -43,7 +43,7 @@ class RelativeTonalities implements Comparable<RelativeTonalities> {
/// Example:
/// ```dart
/// RelativeTonalities({
/// const Tonality(Note(Notes.mi, Accidental.flat), Modes.major),
/// const Tonality(Note(Notes.e, Accidental.flat), Modes.major),
/// const Tonality(Note(Notes.ut), Modes.minor),
/// }).accidental == Accidental.flat
/// ```
Expand Down
18 changes: 9 additions & 9 deletions lib/src/classes/tonality.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ class Tonality implements Comparable<Tonality> {
///
/// Examples:
/// ```dart
/// const Tonality(Note(Notes.si), Modes.major).accidentals == 5
/// const Tonality(Note(Notes.sol), Modes.minor).accidentals == 2
/// const Tonality(Note(Notes.b), Modes.major).accidentals == 5
/// const Tonality(Note(Notes.g), Modes.minor).accidentals == 2
/// ```
int get accidentals => exactFifthsDistance(
Tonality.fromAccidentals(0, mode).note,
Expand All @@ -33,10 +33,10 @@ class Tonality implements Comparable<Tonality> {
///
/// Examples:
/// ```dart
/// const Tonality(Note(Notes.mi), Modes.major).accidental
/// const Tonality(Note(Notes.e), Modes.major).accidental
/// == Accidental.sharp
///
/// const Tonality(Note(Notes.fa), Modes.minor).accidental
/// const Tonality(Note(Notes.f), Modes.minor).accidental
/// == Accidental.flat
/// ```
Accidental get accidental => exactFifthsDistance(
Expand All @@ -52,11 +52,11 @@ class Tonality implements Comparable<Tonality> {
///
/// Examples:
/// ```dart
/// const Tonality(Note(Notes.re), Modes.minor).relative
/// == const Tonality(Note(Notes.fa), Modes.major)
/// const Tonality(Note(Notes.d), Modes.minor).relative
/// == const Tonality(Note(Notes.f), Modes.major)
///
/// const Tonality(Note(Notes.si, Accidental.flat), Modes.major).relative
/// == const Tonality(Note(Notes.sol), Modes.minor)
/// const Tonality(Note(Notes.b, Accidental.flat), Modes.major).relative
/// == const Tonality(Note(Notes.g), Modes.minor)
/// ```
Tonality get relative => Tonality(
EnharmonicNote(note.semitones)
Expand All @@ -75,7 +75,7 @@ class Tonality implements Comparable<Tonality> {
///
/// Example:
/// ```dart
/// const Tonality(Note(Notes.la), Modes.major).keySignature
/// const Tonality(Note(Notes.a), Modes.major).keySignature
/// == const KeySignature(3, Accidental.sharp)
/// ```
KeySignature get keySignature => KeySignature.fromDistance(
Expand Down
74 changes: 32 additions & 42 deletions lib/src/enums/notes.dart
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
part of '../../music_notes.dart';

enum Notes { ut, re, mi, fa, sol, la, si }
enum Notes {
c(1),
d(3),
e(5),
f(6),
g(8),
a(10),
b(12);

extension NotesValues on Notes {
static const notesValues = {
Notes.ut: 1,
Notes.re: 3,
Notes.mi: 5,
Notes.fa: 6,
Notes.sol: 8,
Notes.la: 10,
Notes.si: 12,
};
final int value;

const Notes(this.value);

/// Returns a [Notes] enum item that matches [value]
/// as in [notesValues], otherwise returns `null`.
/// as in [Notes], otherwise returns `null`.
///
/// Examples:
/// ```dart
/// NotesValues.fromValue(3) == Notes.re
/// NotesValues.fromValue(8) == Notes.sol
/// NotesValues.fromValue(11) == null
/// Notes.fromValue(3) == Notes.d
/// Notes.fromValue(8) == Notes.g
/// Notes.fromValue(11) == null
/// ```
static Notes? fromValue(int value) => notesValues.keys.firstWhereOrNull(
(note) => chromaticModExcludeZero(value) == notesValues[note],
static Notes? fromValue(int value) => values.firstWhereOrNull(
(note) => chromaticModExcludeZero(value) == note.value,
);

/// Returns a [Notes] enum item that matches [ordinal].
///
/// Examples:
/// ```dart
/// NotesValues.fromOrdinal(3) == Notes.mi
/// NotesValues.fromOrdinal(7) == Notes.si
/// NotesValues.fromOrdinal(10) == Notes.mi
/// Notes.fromOrdinal(3) == Notes.e
/// Notes.fromOrdinal(7) == Notes.b
/// Notes.fromOrdinal(10) == Notes.e
/// ```
static Notes fromOrdinal(int ordinal) =>
Notes.values[nModExcludeZero(ordinal, Notes.values.length) - 1];

/// Returns `true` if a [Notes] enum item needs and accidental
/// to be represented—that is, it cannot be found in [notesValues].
/// to be represented—that is, it cannot be found in [Notes].
///
/// Examples:
/// ```dart
/// NotesValues.needsAccidental(4) == true
/// NotesValues.needsAccidental(6) == false
/// Notes.needsAccidental(4) == true
/// Notes.needsAccidental(6) == false
/// ```
static bool needsAccidental(int value) => fromValue(value) == null;

Expand All @@ -52,35 +52,25 @@ extension NotesValues on Notes {
/// Examples:
/// ```dart
/// Notes.ut.ordinal == 1
/// Notes.fa.ordinal == 4
/// Notes.f.ordinal == 4
/// ```
int get ordinal => Notes.values.indexOf(this) + 1;

/// Returns the value of this [Notes] enum item as in [notesValues].
///
/// Examples:
/// ```dart
/// Notes.ut.value == 1
/// Notes.sol.value == 8
/// Notes.si.value == 12
/// ```
int get value => notesValues[this]!;

/// Returns an [Intervals] enum item that conforms an interval
/// between this [Notes] enum item and [note] in ascending manner by default.
///
/// Examples:
/// ```dart
/// Notes.re.interval(Notes.fa) == Intervals.third
/// Notes.la.interval(Notes.mi) == Intervals.fifth
/// Notes.la.interval(Notes.mi, descending: true) == Intervals.fourth
/// Notes.d.interval(Notes.f) == Intervals.third
/// Notes.a.interval(Notes.e) == Intervals.fifth
/// Notes.a.interval(Notes.e, descending: true) == Intervals.fourth
/// ```
Intervals interval(Notes note, {bool descending = false}) {
final noteOrdinal1 = ordinal;
var noteOrdinal2 = note.ordinal;

if (!descending && noteOrdinal1 > noteOrdinal2) {
noteOrdinal2 += notesValues.length;
noteOrdinal2 += values.length;
}

return IntervalsValues.fromOrdinal(
Expand All @@ -93,12 +83,12 @@ extension NotesValues on Notes {
///
/// Examples:
/// ```dart
/// Notes.ut.transpose(Intervals.fifth) == Notes.sol
/// Notes.fa.transpose(Intervals.third, descending: true) == Notes.re
/// Notes.la.transpose(Intervals.fourth) == Notes.re
/// Notes.ut.transpose(Intervals.fifth) == Notes.g
/// Notes.f.transpose(Intervals.third, descending: true) == Notes.d
/// Notes.a.transpose(Intervals.fourth) == Notes.d
/// ```
Notes transpose(Intervals interval, {bool descending = false}) =>
NotesValues.fromOrdinal(
Notes.fromOrdinal(
ordinal + (interval.ordinal - 1) * (descending ? -1 : 1),
);
}
22 changes: 11 additions & 11 deletions lib/src/note/note.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ class Note implements MusicItem, Comparable<Note> {
/// Examples:
/// ```dart
/// Note.fromTonalityAccidentals(2, Modes.major, Accidental.sharp)
/// == const Note(Notes.re)
/// == const Note(Notes.d)
///
/// Note.fromTonalityAccidentals(0, Modes.minor)
/// == const Note(Notes.la)
/// == const Note(Notes.a)
/// ```
factory Note.fromTonalityAccidentals(
int accidentals,
Expand All @@ -41,10 +41,10 @@ class Note implements MusicItem, Comparable<Note> {
/// Examples:
/// ```dart
/// Note.fromRawAccidentals(2, Accidental.sharp)
/// == const Note(Notes.re)
/// == const Note(Notes.d)
///
/// Note.fromRawAccidentals(0)
/// == const Note(Notes.la)
/// == const Note(Notes.a)
/// ```
factory Note.fromRawAccidentals(
int accidentals, [
Expand All @@ -66,12 +66,12 @@ class Note implements MusicItem, Comparable<Note> {
);

/// Returns the number of semitones that correspond to this [Note]
/// from [Notes.ut].
/// from [Notes.c].
///
/// Examples:
/// ```dart
/// const Note(Notes.re).semitones == 3
/// const Note(Notes.fa, Accidental.sharp).semitones == 7
/// const Note(Notes.d).semitones == 3
/// const Note(Notes.f, Accidental.sharp).semitones == 7
/// ```
@override
int get semitones => chromaticModExcludeZero(note.value + accidental.value);
Expand All @@ -85,7 +85,7 @@ class Note implements MusicItem, Comparable<Note> {
/// Example:
/// ```dart
/// const Note(Notes.ut).intervalDistance(
/// const Note(Notes.re),
/// const Note(Notes.d),
/// const Interval(Intervals.fifth, Qualities.perfect),
/// ) == 2
/// ```
Expand Down Expand Up @@ -133,11 +133,11 @@ class Note implements MusicItem, Comparable<Note> {
///
/// Examples:
/// ```dart
/// const Note(Notes.ut).exactInterval(const Note(Notes.re))
/// const Note(Notes.ut).exactInterval(const Note(Notes.d))
/// == const Interval(Intervals.second, Qualities.minor)
///
/// const Note(Notes.re)
/// .exactInterval(const Note(Notes.la, Accidental.flat)) ==
/// const Note(Notes.d)
/// .exactInterval(const Note(Notes.a, Accidental.flat)) ==
/// const Interval(Intervals.fifth, Qualities.diminished)
/// ```
Interval exactInterval(Note other) {
Expand Down
6 changes: 3 additions & 3 deletions lib/src/utils/music.dart
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ int shortestFifthsDistance(
/// Examples:
/// ```dart
/// exactFifthsDistance(
/// const Note(Notes.la, Accidental.flat),
/// const Note(Notes.a, Accidental.flat),
/// const Note(Notes.ut, Accidental.sharp),
/// ) == 11
///
/// exactFifthsDistance(
/// const Note(Notes.la, Accidental.flat),
/// const Note(Notes.re, Accidental.flat),
/// const Note(Notes.a, Accidental.flat),
/// const Note(Notes.d, Accidental.flat),
/// ) == -1
/// ```
int exactFifthsDistance(Note note1, Note note2) => note1.intervalDistance(
Expand Down
Loading

0 comments on commit b2fe716

Please sign in to comment.