A music theory library with
Chord representations in swift enums.
- Swift 4.0+
- iOS 8.0+
- macOS 10.9+
- tvOS 9.0+
- watchOS 2.0+
MusicTheory adds a bunch of basic enums and structs that you can define pretty much any music related data. Most importants are
All data types conforms
Accident structs are
Int as well as
ExpressibleByIntegerLiteral that you can represent them directly with
- All keys can be defined with
- It has a
KeyTypewhere you can set the base key like C, D, A, G, and an
Accitentalwhere it can be
sharpor more specific like
- You can create
Pitches with a
- Also, you can create
Keys with MIDI note number.
Accidentalstructs are equatable,
-custom operators defined for making calulations easier.
- Also, there are other helper functions or properties like frequency of a note.
let dFlat = Key(type: d, accidental: .flat) let c4 = Pitch(key: Key(type: .c), octave: 4)
- Intervals are halfsteps between notes.
- They are
IntegerLiteraland you can make add/subsctract them between themselves, notes or note types.
- You can build scales or chords from intervals.
- m2, M2, m3, M3, P4, d5, P5, m6, M6, m7, M7 and P8 are predefined intervals.
ScaleTypeenum defines a lot of readymade scales.
- Also, you can create a custom scale type by
ScaleType.custom(intervals: [Interval], description: String)
Scaledefines a scale with a scale type and root key.
- You can generate notes of scale in an octave range.
- Also you can generate
HarmonicFieldof a scale.
- Harmonic field is all possible triad, tetrad or extended chords in a scale.
let c: NoteType = .c let maj: ScaleType = .major let cMaj = Scale(type: maj, key: c)
ChordTypeis a struct with
ChordParts which are building blocks of chords.
- You can define any chord existing with
- Thirds, fifths, sixths, sevenths and extensions are parts of the
- Each of them also structs which conforms
Chorddefines chords with type and a root key.
- You can generate notes of chord in any octave range.
- You can generate inversions of any chord.
let m13 = ChordType( third: .minor, seventh: .dominant, extensions: [ ChordExtensionType(type: .thirteenth) ]) let cm13 = Chord(type: m13, key: .c)
- Tempo is a helper struct to define timings in your music app.
- TimeSignature is number of beats in per measure and
NoteValueof each beat.
- You can calculate notes duration in any tempo by ther
- Note value defines the note's duration in a beat. It could be whole note, half note, quarter note, 8th, 16th or 32nd note.
You can find unit tests in
⌘+U for running tests.