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;
}
+191
View File
@@ -0,0 +1,191 @@
library sheet_music;
import 'package:flutter/material.dart';
import 'util/clef_asset.dart';
import 'util/pitch_asset.dart';
import 'util/scale_asset.dart';
const String sheetMusicPackageName = "sheet_music";
/// Transparent Sheet Music View with [black] color.
class SheetMusic extends StatelessWidget {
final bool? trebleClef;
final String? pitch, scale;
/// Hide the Sheet Music View.
final bool? hide;
/// Color of the [background], everything else will be [black].
/// Defaults to [transparent].
final Color? backgroundColor;
/// Called when the [clef] section is tapped.
final VoidCallback? clefTap;
/// Called when the [scale] section is tapped.
final VoidCallback? scaleTap;
/// Called when the [note] section is tapped.
final VoidCallback? pitchTap;
/// Specify a [height] and [width] for the view. Default [197x100].
final double? width, height;
SheetMusic({
required this.trebleClef,
required this.scale,
required this.pitch,
this.pitchTap,
this.clefTap,
this.scaleTap,
this.backgroundColor,
this.hide,
this.width,
this.height,
});
Widget _buildClef(
{required double width, double? height, bool dark = false}) {
final double _width = width * 0.1979;
if (dark) {
return Container(
child: InkWell(
onTap: clefTap,
child: SizedBox(
height: height,
width: _width,
child: Image.asset(
getClefAsset(trebleClef ?? true),
package: sheetMusicPackageName,
fit: BoxFit.fitWidth,
colorBlendMode: BlendMode.srcATop,
color: Colors.white,
),
),
),
);
}
return Container(
child: InkWell(
onTap: clefTap,
child: SizedBox(
height: height,
width: _width,
child: Image.asset(
getClefAsset(trebleClef ?? true),
package: sheetMusicPackageName,
fit: BoxFit.fitWidth,
colorBlendMode: BlendMode.srcATop,
color: Colors.black,
),
),
),
);
}
Widget _buildScale(
{required double width, double? height, bool dark = false}) {
final double _width = width * 0.5076;
if (dark) {
return Container(
child: InkWell(
onTap: scaleTap,
child: SizedBox(
height: height,
width: _width,
child: Image.asset(
getScaleAsset(scale ?? "C Major", trebleClef: trebleClef),
package: sheetMusicPackageName,
fit: BoxFit.fitWidth,
colorBlendMode: BlendMode.srcATop,
color: Colors.white,
),
),
),
);
}
return Container(
child: InkWell(
onTap: scaleTap,
child: SizedBox(
height: height,
width: _width,
child: Image.asset(
getScaleAsset(scale ?? "C Major", trebleClef: trebleClef),
package: sheetMusicPackageName,
fit: BoxFit.fitWidth,
colorBlendMode: BlendMode.srcATop,
color: Colors.black,
),
),
),
);
}
Widget _buildPitch(
{required double width, double? height, bool dark = false}) {
final double _width = width * 0.2944;
if (dark) {
return Container(
child: InkWell(
onTap: pitchTap,
child: SizedBox(
height: height,
width: _width,
child: Image.asset(
getPitchAsset(pitch ?? "C4", trebleClef: trebleClef),
package: sheetMusicPackageName,
fit: BoxFit.fitWidth,
colorBlendMode: BlendMode.srcATop,
color: Colors.white,
),
),
),
);
}
return Container(
child: InkWell(
onTap: pitchTap,
child: SizedBox(
height: height,
width: _width,
child: Image.asset(
getPitchAsset(pitch ?? "C4", trebleClef: trebleClef),
package: sheetMusicPackageName,
fit: BoxFit.fitWidth,
colorBlendMode: BlendMode.srcATop,
color: Colors.black,
),
),
),
);
}
@override
Widget build(BuildContext context) {
if (hide != null && hide!) return Container();
final double _width = ((height ?? 100.0) * 197.0) / 100.0;
final double _height = ((width ?? 197.0) * 100.0) / 197.0;
final bool dark = Theme.of(context).brightness == Brightness.dark;
return Material(
child: SizedBox(
width: _width,
height: _height,
child: Container(
color: backgroundColor,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
_buildClef(width: _width, height: _height, dark: dark),
_buildScale(width: _width, height: _height, dark: dark),
_buildPitch(width: _width, height: _height, dark: dark),
]),
),
),
);
}
}
@@ -0,0 +1,85 @@
const String _assetPath = "assets/images";
const String _clef_path = "$_assetPath/clef";
const String _scale_path = "$_assetPath/scale";
const String _note_path = "$_assetPath/note";
const String _treble_path = "treble";
const String _bass_path = "bass";
// Clef
const String trebleClef_asset = "$_clef_path/treble_clef.png";
const String bassClef_asset = "$_clef_path/bass_clef.png";
// Scales
const String cmajor_treble_asset = "$_scale_path/$_treble_path/c_major.png";
const String cmajor_bass_asset = "$_scale_path/$_bass_path/c_major.png";
const String gmajor_treble_asset = "$_scale_path/$_treble_path/g_major.png";
const String gmajor_bass_asset = "$_scale_path/$_bass_path/g_major.png";
const String dmajor_treble_asset = "$_scale_path/$_treble_path/d_major.png";
const String dmajor_bass_asset = "$_scale_path/$_bass_path/d_major.png";
const String amajor_treble_asset = "$_scale_path/$_treble_path/a_major.png";
const String amajor_bass_asset = "$_scale_path/$_bass_path/a_major.png";
const String emajor_treble_asset = "$_scale_path/$_treble_path/e_major.png";
const String emajor_bass_asset = "$_scale_path/$_bass_path/e_major.png";
const String bmajor_treble_asset = "$_scale_path/$_treble_path/b_major.png";
const String bmajor_bass_asset = "$_scale_path/$_bass_path/b_major.png";
const String fsmajor_treble_asset = "$_scale_path/$_treble_path/fs_major.png";
const String fsmajor_bass_asset = "$_scale_path/$_bass_path/fs_major.png";
const String csmajor_treble_asset = "$_scale_path/$_treble_path/cs_major.png";
const String csmajor_bass_asset = "$_scale_path/$_bass_path/cs_major.png";
const String fmajor_treble_asset = "$_scale_path/$_treble_path/f_major.png";
const String fmajor_bass_asset = "$_scale_path/$_bass_path/f_major.png";
const String bbmajor_treble_asset = "$_scale_path/$_treble_path/bb_major.png";
const String bbmajor_bass_asset = "$_scale_path/$_bass_path/bb_major.png";
const String ebmajor_treble_asset = "$_scale_path/$_treble_path/eb_major.png";
const String ebmajor_bass_asset = "$_scale_path/$_bass_path/eb_major.png";
const String abmajor_treble_asset = "$_scale_path/$_treble_path/ab_major.png";
const String abmajor_bass_asset = "$_scale_path/$_bass_path/ab_major.png";
const String dbmajor_treble_asset = "$_scale_path/$_treble_path/db_major.png";
const String dbmajor_bass_asset = "$_scale_path/$_bass_path/db_major.png";
const String gbmajor_treble_asset = "$_scale_path/$_treble_path/gb_major.png";
const String gbmajor_bass_asset = "$_scale_path/$_bass_path/gb_major.png";
const String cbmajor_treble_asset = "$_scale_path/$_treble_path/cb_major.png";
const String cbmajor_bass_asset = "$_scale_path/$_bass_path/cb_major.png";
// Notes
const String none_asset = "$_note_path/none.png";
const String b1_bass_asset = "$_note_path/$_bass_path/b1.png";
const String c2_bass_asset = "$_note_path/$_bass_path/c2.png";
const String d2_bass_asset = "$_note_path/$_bass_path/d2.png";
const String e2_bass_asset = "$_note_path/$_bass_path/e2.png";
const String f2_bass_asset = "$_note_path/$_bass_path/f2.png";
const String g2_bass_asset = "$_note_path/$_bass_path/g2.png";
const String a2_bass_asset = "$_note_path/$_bass_path/a2.png";
const String b2_bass_asset = "$_note_path/$_bass_path/b2.png";
const String c3_bass_asset = "$_note_path/$_bass_path/c3.png";
const String d3_bass_asset = "$_note_path/$_bass_path/d3.png";
const String e3_bass_asset = "$_note_path/$_bass_path/e3.png";
const String f3_bass_asset = "$_note_path/$_bass_path/f3.png";
const String g3_bass_asset = "$_note_path/$_bass_path/g3.png";
const String a3_bass_asset = "$_note_path/$_bass_path/a3.png";
const String b3_bass_asset = "$_note_path/$_bass_path/b3.png";
const String c4_bass_asset = "$_note_path/$_bass_path/c4.png";
const String d4_bass_asset = "$_note_path/$_bass_path/d4.png";
const String e4_bass_asset = "$_note_path/$_bass_path/e4.png";
const String f4_bass_asset = "$_note_path/$_bass_path/f4.png";
const String g3_treble_asset = "$_note_path/$_treble_path/g3.png";
const String a3_treble_asset = "$_note_path/$_treble_path/a3.png";
const String b3_treble_asset = "$_note_path/$_treble_path/b3.png";
const String c4_treble_asset = "$_note_path/$_treble_path/c4.png";
const String d4_treble_asset = "$_note_path/$_treble_path/d4.png";
const String e4_treble_asset = "$_note_path/$_treble_path/e4.png";
const String f4_treble_asset = "$_note_path/$_treble_path/f4.png";
const String g4_treble_asset = "$_note_path/$_treble_path/g4.png";
const String a4_treble_asset = "$_note_path/$_treble_path/a4.png";
const String b4_treble_asset = "$_note_path/$_treble_path/b4.png";
const String c5_treble_asset = "$_note_path/$_treble_path/c5.png";
const String d5_treble_asset = "$_note_path/$_treble_path/d5.png";
const String e5_treble_asset = "$_note_path/$_treble_path/e5.png";
const String f5_treble_asset = "$_note_path/$_treble_path/f5.png";
const String g5_treble_asset = "$_note_path/$_treble_path/g5.png";
const String a5_treble_asset = "$_note_path/$_treble_path/a5.png";
const String b5_treble_asset = "$_note_path/$_treble_path/b5.png";
const String c6_treble_asset = "$_note_path/$_treble_path/c6.png";
const String d6_treble_asset = "$_note_path/$_treble_path/d6.png";
@@ -0,0 +1,6 @@
import 'assets.dart';
String getClefAsset(bool trebleClef) {
if (trebleClef) return trebleClef_asset;
return bassClef_asset;
}
@@ -0,0 +1,43 @@
const List<String> pitchesTreble = <String>[
"G3",
"A3",
"B3",
"C4",
"D4",
"E4",
"F4",
"G4",
"A4",
"B4",
"C5",
"D5",
"E5",
"F5",
"G5",
"A5",
"B5",
"C6",
"D6"
];
const List<String> pitchesBass = <String>[
"B1",
"C2",
"D2",
"E2",
"F2",
"G2",
"A2",
"B2",
"C3",
"D3",
"E3",
"F3",
"G3",
"A3",
"B3",
"C4",
"D4",
"E4",
"F4"
];
@@ -0,0 +1,207 @@
import 'package:flutter/material.dart';
import '../models/scale.dart';
import 'assets.dart';
String getPitchAsset(String name, {bool? trebleClef}) {
final String pitch = name
.replaceAll("", "")
.replaceAll("#", "")
.replaceAll("b", "")
.replaceAll("", "");
if (trebleClef != null && trebleClef) {
switch (pitch) {
case "G3":
return g3_treble_asset;
case "A3":
return a3_treble_asset;
case "B3":
return b3_treble_asset;
case "C4":
return c4_treble_asset;
case "D4":
return d4_treble_asset;
case "E4":
return e4_treble_asset;
case "F4":
return f4_treble_asset;
case "G4":
return g4_treble_asset;
case "A4":
return a4_treble_asset;
case "B4":
return b4_treble_asset;
case "C5":
return c5_treble_asset;
case "D5":
return d5_treble_asset;
case "E5":
return e5_treble_asset;
case "F5":
return f5_treble_asset;
case "G5":
return g5_treble_asset;
case "A5":
return a5_treble_asset;
case "B5":
return b5_treble_asset;
case "C6":
return c6_treble_asset;
case "D6":
return d6_treble_asset;
default:
return none_asset;
}
}
switch (pitch) {
case "B1":
return b1_bass_asset;
case "C2":
return c2_bass_asset;
case "D2":
return d2_bass_asset;
case "E2":
return e2_bass_asset;
case "F2":
return f2_bass_asset;
case "G2":
return g2_bass_asset;
case "A2":
return a2_bass_asset;
case "B2":
return b2_bass_asset;
case "C3":
return c3_bass_asset;
case "D3":
return d3_bass_asset;
case "E3":
return e3_bass_asset;
case "F3":
return f3_bass_asset;
case "G3":
return g3_bass_asset;
case "A3":
return a3_bass_asset;
case "B3":
return b3_bass_asset;
case "C4":
return c4_bass_asset;
case "D4":
return d4_bass_asset;
case "E4":
return e4_bass_asset;
case "F4":
return f4_bass_asset;
default:
return none_asset;
}
}
String getPitchName({String? scale, required String pitch}) {
final PossibleScales? _scale = ScaleInfo.parse(scale ?? "C Major").scale;
switch (_scale) {
case PossibleScales.cMajor:
//C Major
break;
case PossibleScales.gMajor:
//G Major
if (pitch.contains("F")) return pitch.replaceAll("F", "F#");
break;
case PossibleScales.dMajor:
//D Major
if (pitch.contains("F")) return pitch.replaceAll("F", "F#");
if (pitch.contains("C")) return pitch.replaceAll("C", "C#");
break;
case PossibleScales.aMajor:
//A Major
if (pitch.contains("F")) return pitch.replaceAll("F", "F#");
if (pitch.contains("C")) return pitch.replaceAll("C", "C#");
if (pitch.contains("G")) return pitch.replaceAll("G", "G#");
break;
case PossibleScales.eMajor:
//E Major
if (pitch.contains("F")) return pitch.replaceAll("F", "F#");
if (pitch.contains("C")) return pitch.replaceAll("C", "C#");
if (pitch.contains("G")) return pitch.replaceAll("G", "G#");
if (pitch.contains("D")) return pitch.replaceAll("D", "D#");
break;
case PossibleScales.bMajor:
//B Major
if (pitch.contains("F")) return pitch.replaceAll("F", "F#");
if (pitch.contains("C")) return pitch.replaceAll("C", "C#");
if (pitch.contains("G")) return pitch.replaceAll("G", "G#");
if (pitch.contains("D")) return pitch.replaceAll("D", "D#");
if (pitch.contains("A")) return pitch.replaceAll("A", "A#");
break;
case PossibleScales.fSMajor:
//F# Major
if (pitch.contains("F")) return pitch.replaceAll("F", "F#");
if (pitch.contains("C")) return pitch.replaceAll("C", "C#");
if (pitch.contains("G")) return pitch.replaceAll("G", "G#");
if (pitch.contains("D")) return pitch.replaceAll("D", "D#");
if (pitch.contains("A")) return pitch.replaceAll("A", "A#");
if (pitch.contains("E")) return pitch.replaceAll("E", "E#");
break;
case PossibleScales.cSMajor:
//C# Major
if (pitch.contains("F")) return pitch.replaceAll("F", "F#");
if (pitch.contains("C")) return pitch.replaceAll("C", "C#");
if (pitch.contains("G")) return pitch.replaceAll("G", "G#");
if (pitch.contains("D")) return pitch.replaceAll("D", "D#");
if (pitch.contains("A")) return pitch.replaceAll("A", "A#");
if (pitch.contains("E")) return pitch.replaceAll("E", "E#");
if (pitch.contains("B")) return pitch.replaceAll("B", "B#");
break;
case PossibleScales.fMajor:
//F Major
if (pitch.contains("B")) return pitch.replaceAll("B", "B♭");
break;
case PossibleScales.bbMajor:
//Bb Major
if (pitch.contains("B")) return pitch.replaceAll("B", "B♭");
if (pitch.contains("E")) return pitch.replaceAll("E", "E♭");
break;
case PossibleScales.ebMajor:
//Eb Major
if (pitch.contains("B")) return pitch.replaceAll("B", "B♭");
if (pitch.contains("E")) return pitch.replaceAll("E", "E♭");
if (pitch.contains("A")) return pitch.replaceAll("A", "A♭");
break;
case PossibleScales.abMajor:
//Ab Major
if (pitch.contains("B")) return pitch.replaceAll("B", "B♭");
if (pitch.contains("E")) return pitch.replaceAll("E", "E♭");
if (pitch.contains("A")) return pitch.replaceAll("A", "A♭");
if (pitch.contains("D")) return pitch.replaceAll("D", "D♭");
break;
case PossibleScales.dbMajor:
//Db Major
if (pitch.contains("B")) return pitch.replaceAll("B", "B♭");
if (pitch.contains("E")) return pitch.replaceAll("E", "E♭");
if (pitch.contains("A")) return pitch.replaceAll("A", "A♭");
if (pitch.contains("D")) return pitch.replaceAll("D", "D♭");
if (pitch.contains("G")) return pitch.replaceAll("G", "G♭");
break;
case PossibleScales.gbMajor:
//Gb Major
if (pitch.contains("B")) return pitch.replaceAll("B", "B♭");
if (pitch.contains("E")) return pitch.replaceAll("E", "E♭");
if (pitch.contains("A")) return pitch.replaceAll("A", "A♭");
if (pitch.contains("D")) return pitch.replaceAll("D", "D♭");
if (pitch.contains("G")) return pitch.replaceAll("G", "G♭");
if (pitch.contains("C")) return pitch.replaceAll("C", "C♭");
break;
case PossibleScales.cbMajor:
//Cb Major
if (pitch.contains("B")) return pitch.replaceAll("B", "B♭");
if (pitch.contains("E")) return pitch.replaceAll("E", "E♭");
if (pitch.contains("A")) return pitch.replaceAll("A", "A♭");
if (pitch.contains("D")) return pitch.replaceAll("D", "D♭");
if (pitch.contains("G")) return pitch.replaceAll("G", "G♭");
if (pitch.contains("C")) return pitch.replaceAll("C", "C♭");
if (pitch.contains("F")) return pitch.replaceAll("F", "F♭");
break;
}
return pitch;
}
@@ -0,0 +1,74 @@
import '../models/scale.dart';
import 'assets.dart';
String getScaleAsset(String scale, {bool? trebleClef}) {
final PossibleScales? _scale = ScaleInfo.parse(scale).scale;
if (trebleClef != null && trebleClef) {
switch (_scale) {
case PossibleScales.cMajor:
return cmajor_treble_asset;
case PossibleScales.gMajor:
return gmajor_treble_asset;
case PossibleScales.dMajor:
return dmajor_treble_asset;
case PossibleScales.aMajor:
return amajor_treble_asset;
case PossibleScales.eMajor:
return emajor_treble_asset;
case PossibleScales.bMajor:
return bmajor_treble_asset;
case PossibleScales.fSMajor:
return fsmajor_treble_asset;
case PossibleScales.cSMajor:
return csmajor_treble_asset;
case PossibleScales.fMajor:
return fmajor_treble_asset;
case PossibleScales.bbMajor:
return bbmajor_treble_asset;
case PossibleScales.ebMajor:
return ebmajor_treble_asset;
case PossibleScales.abMajor:
return abmajor_treble_asset;
case PossibleScales.dbMajor:
return dbmajor_treble_asset;
case PossibleScales.gbMajor:
return gbmajor_treble_asset;
case PossibleScales.cbMajor:
return cbmajor_treble_asset;
}
}
switch (_scale) {
case PossibleScales.cMajor:
return cmajor_bass_asset;
case PossibleScales.gMajor:
return gmajor_bass_asset;
case PossibleScales.dMajor:
return dmajor_bass_asset;
case PossibleScales.aMajor:
return amajor_bass_asset;
case PossibleScales.eMajor:
return emajor_bass_asset;
case PossibleScales.bMajor:
return bmajor_bass_asset;
case PossibleScales.fSMajor:
return fsmajor_bass_asset;
case PossibleScales.cSMajor:
return csmajor_bass_asset;
case PossibleScales.fMajor:
return fmajor_bass_asset;
case PossibleScales.bbMajor:
return bbmajor_bass_asset;
case PossibleScales.ebMajor:
return ebmajor_bass_asset;
case PossibleScales.abMajor:
return abmajor_bass_asset;
case PossibleScales.dbMajor:
return dbmajor_bass_asset;
case PossibleScales.gbMajor:
return gbmajor_bass_asset;
case PossibleScales.cbMajor:
return cbmajor_bass_asset;
}
// Default: C Major
return cmajor_bass_asset;
}
@@ -0,0 +1,35 @@
const List<String> scalesMajor = <String>[
"Cb Major",
"Gb Major",
"Db Major",
"Ab Major",
"Eb Major",
"Bb Major",
"F Major",
"C Major",
"G Major",
"D Major",
"A Major",
"E Major",
"B Major",
"F# Major",
"C# Major",
];
const List<String> scalesMinor = <String>[
"Ab Minor",
"Eb Minor",
"Bb Minor",
"F Minor",
"C Minor",
"G Minor",
"D Minor",
"A Minor",
"E Minor",
"B Minor",
"F# Minor",
"C# Minor",
"G# Minor",
"D# Minor",
"A# Minor",
];