Skip to content

Commit

Permalink
Fix scales and add constants (#13)
Browse files Browse the repository at this point in the history
* Fixing deprecated linters and optional params

* Add constants and fix scalePatterns issue

* Apply dart formatting
  • Loading branch information
beattizzle committed Nov 25, 2023
1 parent a4d7fed commit 8eecb88
Show file tree
Hide file tree
Showing 13 changed files with 660 additions and 119 deletions.
3 changes: 1 addition & 2 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ linter:
- empty_statements
- hash_and_equals
- invariant_booleans
- iterable_contains_unrelated_type
- list_remove_unrelated_type
- collection_methods_unrelated_type
- literal_only_boolean_expressions
- test_types_in_equals
- throw_in_finally
Expand Down
6 changes: 6 additions & 0 deletions lib/constants/keywords.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class Keywords {
static const String name = 'name';
static const String intervals = 'intervals';
static const String modeNames = 'modeNames';
static const String parent = 'parent';
}
51 changes: 51 additions & 0 deletions lib/constants/note_names.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
part of tonic;

class NoteNames {
static const String aFlat = 'A♭';
static const String a = 'A';
static const String aSharp = 'A♯';
static const String bFlat = 'B♭';
static const String b = 'B';
static const String c = 'C';
static const String cSharp = 'C♯';
static const String dFlat = 'D♭';
static const String d = 'D';
static const String dSharp = 'D♯';
static const String eFlat = 'E♭';
static const String e = 'E';
static const String f = 'F';
static const String fSharp = 'F♯';
static const String gFlat = 'G♭';
static const String g = 'G';
static const String gSharp = 'G♯';

static List<String> sharpNoteNames() => [
c,
cSharp,
d,
dSharp,
e,
f,
fSharp,
g,
gSharp,
a,
aSharp,
b,
];

static List<String> flatNoteNames() => [
c,
dFlat,
d,
eFlat,
e,
f,
gFlat,
g,
aFlat,
a,
bFlat,
b,
];
}
103 changes: 103 additions & 0 deletions lib/constants/scale_pattern_names.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
part of tonic;

class ScalePatternNames {
//////////
//scales//
//////////
static const String diatonicMajor = 'Diatonic Major';
static const String naturalMinor = 'Natural Minor';
static const String majorPentatonic = 'Major Pentatonic';
static const String melodicMinor = 'Melodic Minor';
static const String harmonicMinor = 'Harmonic Minor';
static const String blues = 'Blues';
static const String freygish = 'Freygish';
static const String wholeTone = 'Whole Tone';
static const String octatonic = 'Octatonic';

/////////
//modes//
/////////
//diatonic major
static const String ionian = 'Ionian';
static const String dorian = 'Dorian';
static const String phrygian = 'Phrygian';
static const String lydian = 'Lydian';
static const String mixolydian = 'Mixolydian';
static const String aeolian = 'Aeolian';
static const String locrian = 'Locrian';

//major pentatonic
static const String majorPentatonicMode = majorPentatonic;
static const String suspendedPentatonic = 'Suspended Pentatonic';
static const String manGong = 'Man Gong';
static const String ritusen = 'Ritusen';
static const String minorPentatonic = 'Minor Pentatonic';

//melodic minor
static const String jazzMinor = 'Jazz Minor';
static const String dorianFlat2 = 'Dorian ♭2';
static const String lydianAugmented = 'Lydian Augmented';
static const String lydianDominant = 'Lydian Dominant';
static const String mixolydianFlat6 = 'Mixolydian ♭6';
static const String semilocrian = 'Semilocrian';
static const String superlocrian = 'Superlocrian';

//harmonic minor
static const String harmonicMinorMode = harmonicMinor;
static const String locrianSharp6 = 'Locrian ♯6';
static const String ionianAugmented = 'Ionian Augmented';
static const String romanian = 'Romanian';
static const String phrygianDominant = 'Phrygian Dominant';
static const String lydianSharp2 = 'Lydian ♯2';
static const String ultralocrian = 'Ultralocrian';

static List<String> scaleNames() => [
diatonicMajor,
naturalMinor,
majorPentatonic,
melodicMinor,
harmonicMinor,
blues,
freygish,
wholeTone,
octatonic,
];

static List<String> diatonicMajorModes() => [
ionian,
dorian,
phrygian,
lydian,
mixolydian,
aeolian,
locrian,
];

static List<String> majorPentatonicModes() => [
majorPentatonicMode,
suspendedPentatonic,
manGong,
ritusen,
minorPentatonic,
];

static List<String> melodicMinorModes() => [
jazzMinor,
dorianFlat2,
lydianAugmented,
lydianDominant,
mixolydianFlat6,
semilocrian,
superlocrian,
];

static List<String> harmonicMinorModes() => [
harmonicMinorMode,
locrianSharp6,
ionianAugmented,
romanian,
phrygianDominant,
lydianSharp2,
ultralocrian,
];
}
19 changes: 12 additions & 7 deletions lib/fretting.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,19 @@ class Fretting {
required this.chord,
required Iterable<FretPosition> positions,
}) : this.positions = List<FretPosition>.from(sortedBy(
positions, (FretPosition pos) => pos.stringIndex,
reverse: true)) {
positions,
(FretPosition pos) => pos.stringIndex,
reverse: true,
)) {
assert(positions.length ==
positions.map((position) => position.stringIndex).toSet().length);
}

static Fretting fromFretString(String fretString,
{required FrettedInstrument instrument, required Chord chord}) {
static Fretting fromFretString(
String fretString, {
required FrettedInstrument instrument,
required Chord chord,
}) {
if (fretString.length != instrument.stringIndices.length) {
throw new FormatException(
"fretString wrong length for $instrument: $fretString");
Expand Down Expand Up @@ -172,7 +177,7 @@ class FretPosition {
String get inspect => {
'string': stringIndex,
'fret': fretNumber,
'semitones': semitones
'semitones': semitones,
}.toString();
}

Expand All @@ -199,7 +204,7 @@ Set<FretPosition> chordFrets(
}

List<Fretting> chordFrettings(Chord chord, FrettedInstrument instrument,
{highestFret: 4}) {
{highestFret = 4}) {
final int minPitchClasses = chord.intervals.length;
Map<int, Set<FretPosition>> partitionFretsByString() {
final Set<FretPosition> positions =
Expand Down Expand Up @@ -376,7 +381,7 @@ List<Fretting> chordFrettings(Chord chord, FrettedInstrument instrument,
// {name: 'low finger count', key: reverseSortKey(getFingerCount)}
// ];

int Function(T, T) compareBy<T>(int Function(T) f, {bool reverse: false}) =>
int Function(T, T) compareBy<T>(int Function(T) f, {bool reverse = false}) =>
reverse ? (a, b) => f(a) - f(b) : (a, b) => f(b) - f(a);

List<Fretting> sortFrettings(Iterable<Fretting> frettingSet) {
Expand Down
40 changes: 7 additions & 33 deletions lib/pitch.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,11 @@ part of tonic;

/// Note names (e.g. C, C♯), indexed by half-steps above C. Notes that require
/// accidentals use sharps (♯).
final List<String> sharpNoteNames = [
'C',
'C♯',
'D',
'D♯',
'E',
'F',
'F♯',
'G',
'G♯',
'A',
'A♯',
'B'
];
final List<String> sharpNoteNames = NoteNames.sharpNoteNames();

/// Note names (e.g. C, D♭), indexed by half-steps above C. Notes that require
/// accidentals use flats (♭).
final List<String> flatNoteNames = [
'C',
'D♭',
'D',
'E♭',
'E',
'F',
'G♭',
'G',
'A♭',
'A',
'B♭',
'B'
];
final List<String> flatNoteNames = NoteNames.flatNoteNames();

/// Note names (e.g. C, C♯), indexed by half-steps above C. This has the same
/// value as sharpNoteNames.
Expand Down Expand Up @@ -126,8 +100,8 @@ class Pitch {
// chromaticIndex is in semitones but must index a diatonic pitch
factory Pitch(
{required int chromaticIndex,
int accidentalSemitones: 0,
int octave: -1}) {
int accidentalSemitones = 0,
int octave = -1}) {
octave += chromaticIndex ~/ 12;
chromaticIndex = chromaticIndex % 12;
if (noteNames[chromaticIndex].length > 1) {
Expand All @@ -144,8 +118,8 @@ class Pitch {

Pitch._internal({
required int chromaticIndex,
this.accidentalSemitones: 0,
int octave: -1,
this.accidentalSemitones = 0,
int octave = -1,
}) : diatonicSemitones = chromaticIndex + 12 * (octave + 1);

static Pitch parse(String pitchName) =>
Expand Down Expand Up @@ -271,6 +245,6 @@ class Pitch {
String get inspect => {
'letter': letterName,
'diatonicSemitones': diatonicSemitones,
'accidentals': accidentalSemitones
'accidentals': accidentalSemitones,
}.toString();
}
4 changes: 2 additions & 2 deletions lib/pitch_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ int normalizePitchClass(int pitchClass) => pitchClass % 12;

final pitchToPitchClass = normalizePitchClass;

String pitchClassToString(int pitch, {bool flat: false, bool sharp: false}) {
String pitchClassToString(int pitch, {bool flat = false, bool sharp = false}) {
final int pitchClass = pitchToPitchClass(pitch);
final String flatName = flatNoteNames[pitchClass];
final String sharpName = sharpNoteNames[pitchClass];
Expand Down Expand Up @@ -33,7 +33,7 @@ class PitchClass {

String get inspect => {'integer': integer}.toString();

Pitch toPitch({int octave: 0}) =>
Pitch toPitch({int octave = 0}) =>
new Pitch(chromaticIndex: integer, octave: octave);

PitchClass toPitchClass() => this;
Expand Down

0 comments on commit 8eecb88

Please sign in to comment.