Skip to content

Commit

Permalink
flesh out scales
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Williams committed Dec 30, 2018
1 parent 1422bd5 commit c0a11fa
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 8 deletions.
16 changes: 16 additions & 0 deletions SongBook.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
D3F6B69321D7E6A500BD057A /* ChordService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3F6B69221D7E6A500BD057A /* ChordService.swift */; };
D3F6B69A21D7F5F400BD057A /* ScaleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3F6B69921D7F5F400BD057A /* ScaleService.swift */; };
D3F6B69C21D8294600BD057A /* Appendix.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3F6B69B21D8294600BD057A /* Appendix.swift */; };
D3F6B69E21D9378200BD057A /* ScaleStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3F6B69D21D9378200BD057A /* ScaleStyle.swift */; };
D3F6B6A121D938DD00BD057A /* MajorModes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3F6B6A021D938DD00BD057A /* MajorModes.swift */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
Expand Down Expand Up @@ -59,6 +61,8 @@
D3F6B69221D7E6A500BD057A /* ChordService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChordService.swift; sourceTree = "<group>"; };
D3F6B69921D7F5F400BD057A /* ScaleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScaleService.swift; sourceTree = "<group>"; };
D3F6B69B21D8294600BD057A /* Appendix.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Appendix.swift; sourceTree = "<group>"; };
D3F6B69D21D9378200BD057A /* ScaleStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScaleStyle.swift; sourceTree = "<group>"; };
D3F6B6A021D938DD00BD057A /* MajorModes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MajorModes.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -156,11 +160,21 @@
D3F6B69621D7E76800BD057A /* Scales */ = {
isa = PBXGroup;
children = (
D3F6B69F21D938CE00BD057A /* Modes */,
D39903DC21D52D36005C8F3E /* ScaleType.swift */,
D3F6B69D21D9378200BD057A /* ScaleStyle.swift */,
);
path = Scales;
sourceTree = "<group>";
};
D3F6B69F21D938CE00BD057A /* Modes */ = {
isa = PBXGroup;
children = (
D3F6B6A021D938DD00BD057A /* MajorModes.swift */,
);
path = Modes;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand Down Expand Up @@ -222,8 +236,10 @@
D39903DF21D52F9E005C8F3E /* NoteService.swift in Sources */,
D3AFB45B21D5A98A00BAA80D /* Chord.swift in Sources */,
D39903CF21D52162005C8F3E /* main.swift in Sources */,
D3F6B6A121D938DD00BD057A /* MajorModes.swift in Sources */,
D39903EC21D5744D005C8F3E /* Secondary.swift in Sources */,
D39903E121D560A4005C8F3E /* ChordStyle.swift in Sources */,
D3F6B69E21D9378200BD057A /* ScaleStyle.swift in Sources */,
D39903E821D5635A005C8F3E /* Add.swift in Sources */,
D3F6B69A21D7F5F400BD057A /* ScaleService.swift in Sources */,
D39903D721D52192005C8F3E /* Note.swift in Sources */,
Expand Down
19 changes: 19 additions & 0 deletions SongBook/Enums/Scales/Modes/MajorModes.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
//
// MajorModes.swift
// SongBook
//
// Created by Brian on 30/12/2018.
// Copyright © 2018 Eviathan. All rights reserved.
//

import Foundation

public enum MajorModes: Int {
case Ionian = 0
case Dorian = 1
case Phrygian = 2
case Lydian = 3
case Mixolydian = 4
case Aeolian = 5
case Locrian = 6
}
17 changes: 17 additions & 0 deletions SongBook/Enums/Scales/ScaleStyle.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// ScaleStyle.swift
// SongBook
//
// Created by Brian on 30/12/2018.
// Copyright © 2018 Eviathan. All rights reserved.
//

import Foundation

public enum ScaleStyle: Int {
case Pentatonic = 5
case Hexatonic = 6
case Heptatonic = 7
case Octatonic = 8
case Nonatonic = 9
}
86 changes: 79 additions & 7 deletions SongBook/Enums/Scales/ScaleType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,40 @@
import Foundation

public enum ScaleType: CustomStringConvertible {
case Major

// Major (w/Modes)
case Major(_ mode: MajorModes)

// (Natural) Minor
case Minor

// Harmonic Minor (w/Modes)
case HarmonicMinor
case Locrian13
case IonianSharp5
case DorianSharp11
case PhrygianDominant
case LydianSharp2
case SuperLocrianbb7

// Meoldic Minor (w/Modes)
case MelodicMinor
case Dorianb2
case LydianAugmented
case LydianDominant
case Mixolydianb6
case Aeolianb5
case AlteredScale

// Pentatonics
case MajorPentatonic
case MinorPentatonic

// Blues
case Blues(_ style: ScaleStyle)

// Eastern
// Wholetone
// Wholetone & Diminished

public var description: String {
let mirror = Mirror(reflecting: self)
Expand All @@ -26,12 +51,59 @@ public enum ScaleType: CustomStringConvertible {

var intervals: [Interval] {
switch self {
case .Major: return [.I, .II, .III, .IV, .V, .VI, .VII]
case .Minor: return [.I, .II, .bIII, .IV, .V, .bVI, .bVII]
// Major Modes
case .Major(let mode): do {
switch mode {
case .Ionian: return [.I, .II, .III, .IV, .V, .VI, .VII]
case .Dorian: return [.I, .II, .bIII, .IV, .V, .VI, .bVII]
case .Phrygian: return [.I, .bII, .bIII, .IV, .V, .bVI, .bVII]
case .Lydian: return [.I, .II, .III, .bV, .V, .VI, .VII]
case .Mixolydian: return [.I, .II, .III, .IV, .V, .VI, .bVII]
case .Aeolian: return [.I, .II, .bIII, .IV, .V, .bVI, .bVII]
case .Locrian: return [.I, .bII, .bIII, .IV, .bV, .bVI, .bVII]
}
}

// (Natural) Minor
case .Minor: return ScaleType.Major(.Aeolian).intervals

// Harmonic Minor (w/Modes)
case .HarmonicMinor: return [.I, .II, .bIII, .IV, .V, .bVI, .VII]
case .Locrian13: return [.I, .bII, .bIII, .IV, .bV, .VI, .bVII]
case .IonianSharp5: return [.I, .II, .III, .IV, .bVI, .VI, .VII]
case .DorianSharp11: return [.I, .II, .bIII, .bV, .V, .VI, .bVII]
case .PhrygianDominant: return [.I, .bII, .III, .IV, .V, .bVI, .bVII]
case .LydianSharp2: return [.I, .bIII, .III, .bV, .V, .VI, .VII]
case .SuperLocrianbb7: return [.I, .bII, .bIII, .III, .bV, .bVI, .bVII]

// Meoldic Minor (w/Modes)
case .MelodicMinor: return [.I, .II, .bIII, .IV, .V, .VI, .VII]
case .Dorianb2: return [.I, .bII, .bIII, .IV, .V, .VI, .bVII]
case .LydianAugmented: return [.I, .bII, .bIII, .bV, .bVI, .VI, .bVII]
case .LydianDominant: return [.I, .II, .III, .bV, .V, .VI, .bVII]
case .Mixolydianb6: return [.I, .II, .III, .IV, .V, .bVI, .bVII]
case .Aeolianb5: return [.I, .II, .bIII, .IV, .bV, .bVI, .bVII]
case .AlteredScale: return [.I, .bII, .bIII, .III, .bV, .bVI, .bVII]


// Pentatonics
case .MajorPentatonic: return [.I, .II, .III, .V, .VI]
case .MinorPentatonic: return [.I, .bIII, .IV, .V, .bVII]

// Blues
case .Blues(let style): do {
switch style {
case .Pentatonic: return [.I, .II, .III, .V, .VI]
case .Hexatonic: return [.I, .II, .III, .V, .VI]
case .Heptatonic: return [.I, .II, .III, .V, .VI]
case .Octatonic: return [.I, .II, .III, .V, .VI]
case .Nonatonic: return [.I, .II, .III, .V, .VI]
}
}

// Eastern

// TODO: Finish adding chord formulas
default:
return [Interval]()
// Wholetone & Diminished
}
}

Expand Down
2 changes: 1 addition & 1 deletion SongBook/Models/Scale.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Foundation

public class Scale: CustomStringConvertible {

var type: ScaleType = .Major
var type: ScaleType = .Major(.Ionian)

init(_ type: ScaleType) {
self.type = type
Expand Down

0 comments on commit c0a11fa

Please sign in to comment.