blob: 719130ad33870fcb562729f14d09a41604ff0566 [file] [log] [blame]
{
"name": "MusicTheorySwift",
"version": "1.1.0",
"summary": "A music theory library with `Note`, `Interval`, `Tone`, `Scale` and `Chord` representations in swift enums.",
"description": "MusicTheory [![Build Status](https://travis-ci.org/cemolcay/MusicTheory.svg?branch=master)](https://travis-ci.org/cemolcay/MusicTheory)\n===\n\nA music theory library with `Key`, `Pitch`, `Interval`, `Scale` and `Chord` representations in swift enums.\n\nRequirements\n----\n* Swift 4.0+\n* iOS 8.0+\n* macOS 10.9+\n* tvOS 9.0+\n* watchOS 2.0+\n\nInstall\n----\n\n```\npod 'MusicTheorySwift'\n```\n\nUsage\n----\n\n`MusicTheory` adds a bunch of basic enums and structs that you can define pretty much any music related data. Most importants are `Pitch`, `Key`, `Scale` and `Chord`.\n\nAll data types conforms `Codable`, `CustomStringConvertable`.\n`Pitch`, and `Accident` structs are `RawPresentable` with `Int` as well as `ExpressibleByIntegerLiteral` that you can represent them directly with `Int`s.\n\n#### `Pitch` and `Key`\n\n- All keys can be defined with `Key` struct.\n- It has a `KeyType` where you can set the base key like C, D, A, G, and an `Accitental` where it can be `.natural`, `.flat`, `sharp` or more specific like `.sharps(amount: 3)`.\n- You can create `Pitch`es with a `Key` and octave.\n- Also, you can create `Pitch`es with MIDI note number. `rawValue` of a pitch is its MIDI note number.\n- `Pitch`, `Key`, `Accidental` structs are equatable, `+` and `-` custom operators defined for making calulations easier.\n- Also, there are other helper functions or properties like frequency of a note.\n\n``` swift\nlet dFlat = Key(type: d, accidental: .flat)\nlet c4 = Pitch(key: Key(type: .c), octave: 4)\n```\n\n#### `Interval`\n\n- Intervals are halfsteps between pitches.\n- They are `IntegerLiteral` and you can make add/subsctract them between themselves, notes or note types.\n- You can build up a custom interval with its quality, degree and semitone properties.\n- You can build scales or chords from intervals.\n- Minor, major, perfect, augmented and diminished intervals up to 2 octaves are predefined.\n\n#### `ScaleType` and `Scale`\n\n- `ScaleType` enum defines a lot of readymade scales.\n- Also, you can create a custom scale type by `ScaleType.custom(intervals: [Interval], description: String)`\n- `Scale` defines a scale with a scale type and root key.\n- You can generate notes of scale in an octave range.\n- Also you can generate `HarmonicField` of a scale.\n- Harmonic field is all possible triad, tetrad or extended chords in a scale.\n\n``` swift\nlet c = Key(type: .c)\nlet maj: ScaleType = .major\nlet cMaj = Scale(type: maj, key: c)\n```\n\n#### `ChordType` and `Chord`\n\n- `ChordType` is a struct with `ChordPart`s which are building blocks of chords.\n- You can define any chord existing with `ChordType`.\n- Thirds, fifths, sixths, sevenths and extensions are parts of the `ChordType`.\n- Each of them also structs which conforms `ChordPart` protocol.\n- `Chord` defines chords with type and a root key.\n- You can generate notes of chord in any octave range.\n- You can generate inversions of any chord.\n\n``` swift\nlet m13 = ChordType(\nthird: .minor,\nseventh: .dominant,\nextensions: [\nChordExtensionType(type: .thirteenth)\n])\nlet cm13 = Chord(type: m13, key: Key(type: .c))\n```\n\n- You can generate chord progressions with `ChordProgression` enum.\n- For any scale, in any harmonic field, for any inversion.\n\n``` swift\nlet progression = ChordProgression.i_ii_vi_iv\nlet cSharpHarmonicMinorTriadsProgression = progression.chords(\nfor: cSharpHarmonicMinor,\nharmonicField: .triad,\ninversion: 0)\n```\n\n#### `Tempo` and `TimeSignature`\n\n- Tempo is a helper struct to define timings in your music app.\n- TimeSignature is number of beats in per measure and `NoteValue` of each beat.\n- You can calculate notes duration in any tempo by ther `NoteValue`.\n- Note value defines the note's duration in a beat. It could be whole note, half note, quarter note, 8th, 16th or 32nd note.\n\nDocumentation\n----\n\n[Full documentation are here](https://cemolcay.github.io/MusicTheory/)\n\nUnit Tests\n----\n\nYou can find unit tests in `MusicTheoryTests` target.\nPress `⌘+U` for running tests.\n\nAppStore\n----\n\nThis library battle tested in my apps for iOS, macOS, watchOS and tvOS, check them out!\n[KeyBud](https://itunes.apple.com/us/app/keybud-music-theory-app/id1203856335?mt=8) (iOS, watchOS, tvOS, macOS)\n[FretBud](https://itunes.apple.com/us/app/fretbud-chord-scales-for-guitar-bass-and-more/id1234224249?mt=8) (iOS, watchOS, tvOS)\n[ChordBud](https://itunes.apple.com/us/app/chordbud-chord-progressions/id1313017378?mt=8) (iOS)\n[ArpBud](https://itunes.apple.com/us/app/arpbud-midi-sequencer-more/id1349342326?ls=1&mt=8) (iOS)\n[ScaleBud](https://itunes.apple.com/us/app/scalebud-auv3-midi-keyboard/id1409125865?ls=1&mt=8) (iOS, AUv3)",
"homepage": "https://github.com/cemolcay/MusicTheory",
"license": "MIT",
"authors": {
"cemolcay": "ccemolcay@gmail.com"
},
"social_media_url": "http://twitter.com/cemolcay",
"platforms": {
"ios": "8.0",
"osx": "10.9",
"watchos": "2.0",
"tvos": "9.0"
},
"source": {
"git": "https://github.com/cemolcay/MusicTheory.git",
"tag": "1.1.0"
},
"source_files": "Source/*.{swift}",
"frameworks": "Foundation",
"requires_arc": true
}