adding packages

This commit is contained in:
2026-01-15 14:38:46 -08:00
parent ef86e3ab6a
commit 6869cf47e5
5253 changed files with 726695 additions and 34 deletions
@@ -0,0 +1,24 @@
import 'package:tonic/tonic.dart';
enum PitchType { c, d, f, g, a, b }
enum PitchTune { sharp, flat, natural }
class PitchInfo {
final PitchType? type;
final PitchTune? tune;
PitchInfo({this.tune, this.type});
PitchInfo.parse(Pitch pitch)
: type = null,
tune = _getTune(pitch.accidentalsString);
static PitchTune _getTune(String pitch) {
if (pitch.contains("#")) return PitchTune.sharp;
if (pitch.contains("")) return PitchTune.sharp;
if (pitch.contains("b")) return PitchTune.flat;
if (pitch.contains("")) return PitchTune.flat;
return PitchTune.natural;
}
}
@@ -0,0 +1,130 @@
import 'package:tonic/tonic.dart';
enum PossibleScales {
cMajor,
gMajor,
dMajor,
aMajor,
eMajor,
bMajor,
fSMajor,
cSMajor,
fMajor,
bbMajor,
ebMajor,
abMajor,
dbMajor,
gbMajor,
cbMajor,
}
class ScaleInfo {
final PossibleScales? scale;
final String? name, pattern, note;
ScaleInfo({this.scale, this.name, this.pattern, this.note});
ScaleInfo.parse(String name)
: scale = _getScale(name),
pattern = _getPattern(name),
note = _getNote(name),
name = name.toString();
static String _getNote(String name) {
if (name.isEmpty) return "";
String _note = name;
_note = _note.replaceAll(" ", "");
_note = _note.toLowerCase().replaceAll("major", "");
_note = _note.toLowerCase().replaceAll("minor", "");
_note = _note.toUpperCase();
return _note.trim() + "4";
}
static String _getPattern(String name) {
if (name.toLowerCase().contains('major')) return 'Diatonic Major';
if (name.toLowerCase().contains('minor')) return 'Harmonic Minor';
return 'Diatonic Major';
}
static PossibleScales _getScale(String name) {
switch (name) {
case "C Major":
case "A Minor":
return PossibleScales.cMajor;
case "G Major":
case "E Minor":
return PossibleScales.gMajor;
case "D Major":
case "B Minor":
return PossibleScales.dMajor;
case "A Major":
case "F# Minor":
case "F♯ Minor":
return PossibleScales.aMajor;
case "E Major":
case "C# Minor":
case "C♯ Minor":
return PossibleScales.eMajor;
case "B Major":
case "G# Minor":
case "G♯ Minor":
return PossibleScales.bMajor;
case "F# Major":
case "F♯ Major":
case "D# Minor":
case "D♯ Minor":
return PossibleScales.fSMajor;
case "C# Major":
case "C♯ Major":
case "A# Minor":
case "A♯ Minor":
return PossibleScales.cSMajor;
case "F Major":
case "D Minor":
return PossibleScales.fMajor;
case "Bb Major":
case "B♭ Major":
case "G Minor":
return PossibleScales.bbMajor;
case "Eb Major":
case "E♭ Major":
case "C Minor":
return PossibleScales.ebMajor;
case "Ab Major":
case "A♭ Major":
case "F Minor":
return PossibleScales.abMajor;
case "Db Major":
case "D♭ Major":
case "B♭ Minor":
case "Bb Minor":
return PossibleScales.dbMajor;
case "Gb Major":
case "G♭ Major":
case "E♭ Minor":
case "Eb Minor":
return PossibleScales.gbMajor;
case "Cb Major":
case "C♭ Major":
case "A♭ Minor":
case "Ab Minor":
return PossibleScales.cbMajor;
}
return PossibleScales.cMajor;
}
}
Pitch? getScaleRoot(String scaleName) {
final Pitch _root = Chord.parse(scaleName).root;
final String _newRoot =
_root.toString().replaceAllMapped(new RegExp(r'[0-9]'), (Match match) {
return '4'; // Default Octave
}).trim();
final String scaleRoot = _newRoot.toString();
try {
return Pitch.parse(scaleRoot);
} catch (e) {
print("$scaleRoot => $e");
return null;
}
}
+286
View File
@@ -0,0 +1,286 @@
import 'scale.dart';
enum Step { DO, RE, MI, FA, SOL, LA, TI }
Step updateStep(String scale, String pitch) {
// print("Scale: $scale, Pitch: $pitch");
if (pitch == null) return Step.DO;
if (scale == null) return Step.DO;
final PossibleScales? _scale = ScaleInfo.parse(scale).scale;
switch (_scale) {
case PossibleScales.cMajor:
//C Major
if (pitch.contains("C")) {
return Step.DO;
} else if (pitch.contains("D")) {
return Step.RE;
} else if (pitch.contains("E")) {
return Step.MI;
} else if (pitch.contains("F")) {
return Step.FA;
} else if (pitch.contains("G")) {
return Step.SOL;
} else if (pitch.contains("A")) {
return Step.LA;
} else if (pitch.contains("B")) {
return Step.TI;
}
break;
case PossibleScales.gMajor:
//G Major
if (pitch.contains("C")) {
return Step.FA;
} else if (pitch.contains("D")) {
return Step.SOL;
} else if (pitch.contains("E")) {
return Step.LA;
} else if (pitch.contains("F")) {
return Step.TI;
} else if (pitch.contains("G")) {
return Step.DO;
} else if (pitch.contains("A")) {
return Step.RE;
} else if (pitch.contains("B")) {
return Step.MI;
}
break;
case PossibleScales.dMajor:
//D Major
if (pitch.contains("C")) {
return Step.TI;
} else if (pitch.contains("D")) {
return Step.DO;
} else if (pitch.contains("E")) {
return Step.RE;
} else if (pitch.contains("F")) {
return Step.MI;
} else if (pitch.contains("G")) {
return Step.FA;
} else if (pitch.contains("A")) {
return Step.SOL;
} else if (pitch.contains("B")) {
return Step.LA;
}
break;
case PossibleScales.aMajor:
//A Major
if (pitch.contains("C")) {
return Step.MI;
} else if (pitch.contains("D")) {
return Step.FA;
} else if (pitch.contains("E")) {
return Step.SOL;
} else if (pitch.contains("F")) {
return Step.LA;
} else if (pitch.contains("G")) {
return Step.TI;
} else if (pitch.contains("A")) {
return Step.DO;
} else if (pitch.contains("B")) {
return Step.RE;
}
break;
case PossibleScales.eMajor:
//E Major
if (pitch.contains("C")) {
return Step.LA;
} else if (pitch.contains("D")) {
return Step.TI;
} else if (pitch.contains("E")) {
return Step.DO;
} else if (pitch.contains("F")) {
return Step.RE;
} else if (pitch.contains("G")) {
return Step.MI;
} else if (pitch.contains("A")) {
return Step.FA;
} else if (pitch.contains("B")) {
return Step.SOL;
}
break;
case PossibleScales.bMajor:
//B Major
if (pitch.contains("C")) {
return Step.RE;
} else if (pitch.contains("D")) {
return Step.MI;
} else if (pitch.contains("E")) {
return Step.FA;
} else if (pitch.contains("F")) {
return Step.SOL;
} else if (pitch.contains("G")) {
return Step.LA;
} else if (pitch.contains("A")) {
return Step.TI;
} else if (pitch.contains("B")) {
return Step.DO;
}
break;
case PossibleScales.fSMajor:
//F# Major
if (pitch.contains("C")) {
return Step.SOL;
} else if (pitch.contains("D")) {
return Step.LA;
} else if (pitch.contains("E")) {
return Step.TI;
} else if (pitch.contains("F")) {
return Step.DO;
} else if (pitch.contains("G")) {
return Step.RE;
} else if (pitch.contains("A")) {
return Step.MI;
} else if (pitch.contains("B")) {
return Step.FA;
}
break;
case PossibleScales.cSMajor:
//C# Major
if (pitch.contains("C")) {
return Step.DO;
} else if (pitch.contains("D")) {
return Step.RE;
} else if (pitch.contains("E")) {
return Step.MI;
} else if (pitch.contains("F")) {
return Step.FA;
} else if (pitch.contains("G")) {
return Step.SOL;
} else if (pitch.contains("A")) {
return Step.LA;
} else if (pitch.contains("B")) {
return Step.TI;
}
break;
case PossibleScales.fMajor:
//F Major
if (pitch.contains("C")) {
return Step.SOL;
} else if (pitch.contains("D")) {
return Step.LA;
} else if (pitch.contains("E")) {
return Step.TI;
} else if (pitch.contains("F")) {
return Step.DO;
} else if (pitch.contains("G")) {
return Step.RE;
} else if (pitch.contains("A")) {
return Step.MI;
} else if (pitch.contains("B")) {
return Step.FA;
}
break;
case PossibleScales.bbMajor:
//Bb Major
if (pitch.contains("C")) {
return Step.RE;
} else if (pitch.contains("D")) {
return Step.MI;
} else if (pitch.contains("E")) {
return Step.FA;
} else if (pitch.contains("F")) {
return Step.SOL;
} else if (pitch.contains("G")) {
return Step.LA;
} else if (pitch.contains("A")) {
return Step.TI;
} else if (pitch.contains("B")) {
return Step.DO;
}
break;
case PossibleScales.ebMajor:
//Eb Major
if (pitch.contains("C")) {
return Step.LA;
} else if (pitch.contains("D")) {
return Step.TI;
} else if (pitch.contains("E")) {
return Step.DO;
} else if (pitch.contains("F")) {
return Step.RE;
} else if (pitch.contains("G")) {
return Step.MI;
} else if (pitch.contains("A")) {
return Step.FA;
} else if (pitch.contains("B")) {
return Step.SOL;
}
break;
case PossibleScales.abMajor:
//Ab Major
if (pitch.contains("C")) {
return Step.MI;
} else if (pitch.contains("D")) {
return Step.FA;
} else if (pitch.contains("E")) {
return Step.SOL;
} else if (pitch.contains("F")) {
return Step.LA;
} else if (pitch.contains("G")) {
return Step.TI;
} else if (pitch.contains("A")) {
return Step.DO;
} else if (pitch.contains("B")) {
return Step.RE;
}
break;
case PossibleScales.dbMajor:
//Db Major
if (pitch.contains("C")) {
return Step.TI;
} else if (pitch.contains("D")) {
return Step.DO;
} else if (pitch.contains("E")) {
return Step.RE;
} else if (pitch.contains("F")) {
return Step.MI;
} else if (pitch.contains("G")) {
return Step.FA;
} else if (pitch.contains("A")) {
return Step.SOL;
} else if (pitch.contains("B")) {
return Step.LA;
}
break;
case PossibleScales.gbMajor:
//Gb Major
if (pitch.contains("C")) {
return Step.FA;
} else if (pitch.contains("D")) {
return Step.SOL;
} else if (pitch.contains("E")) {
return Step.LA;
} else if (pitch.contains("F")) {
return Step.TI;
} else if (pitch.contains("G")) {
return Step.DO;
} else if (pitch.contains("A")) {
return Step.RE;
} else if (pitch.contains("B")) {
return Step.MI;
}
break;
case PossibleScales.cbMajor:
//Cb Major
if (pitch.contains("C")) {
return Step.DO;
} else if (pitch.contains("D")) {
return Step.RE;
} else if (pitch.contains("E")) {
return Step.MI;
} else if (pitch.contains("F")) {
return Step.FA;
} else if (pitch.contains("G")) {
return Step.SOL;
} else if (pitch.contains("A")) {
return Step.LA;
} else if (pitch.contains("B")) {
return Step.TI;
}
break;
}
return Step.DO;
}