一个音乐理论库,包含 Swift 枚举中的 Key
(调), Pitch
(音高), Interval
(音程), Scale
(音阶)和 Chord
(和弦)表示。
pod 'MusicTheorySwift'
let package = Package(
name: ...
dependencies: [
.package(url: "https://github.com/cemolcay/MusicTheory.git")
],
targets: ...
)
MusicTheory
添加了一系列基本的枚举和结构体,你可以用它们来定义几乎所有与音乐相关的数据。最重要的包括 Pitch
(音高), Key
(调), Scale
(音阶)和 Chord
(和弦)。
所有数据类型都遵循 Codable
, CustomStringConvertable
协议。
Pitch
(音高)和 Accident
(变音记号)结构体都遵循 RawPresentable
协议,使用 Int
作为原始值,并且遵循 ExpressibleByIntegerLiteral
协议,因此你可以直接使用 Int
来表示它们。
Key
结构体来定义。KeyType
,你可以在其中设置基础调,如 C, D, A, G,和一个 Accidental
(变音记号),它可以是 .natural
(自然), .flat
(降), sharp
(升)或更具体的如 .sharps(amount: 3)
(升号,数量:3)。Key
(调)和八度音阶来创建 Pitch
(音高)。Pitch
(音高)。音高的 rawValue
就是它的 MIDI 音符编号。Pitch
(音高), Key
(调), Accidental
(变音记号)结构体是可比较的,并且定义了 +
和 -
自定义运算符,以便更容易进行计算。let dFlat = Key(type: d, accidental: .flat)
let c4 = Pitch(key: Key(type: .c), octave: 4)
let aSharp: Key = "a#" // Key(type: .a, accidental: .sharp)
let gFlat3: Pitch = "gb3" // or "g♭3" or "Gb3" is Pitch(key: (type: .g, accidental: .flat), octave: 3)
IntegerLiteral
,你可以在它们之间、音符之间或音符类型之间进行加/减运算。ScaleType
枚举定义了许多现成的音阶。ScaleType.custom(intervals: [Interval], description: String)
创建自定义音阶类型。Scale
(音阶) 使用音阶类型和根音调来定义音阶。HarmonicField
(和声场)。let c = Key(type: .c)
let maj: ScaleType = .major
let cMaj = Scale(type: maj, key: c)
ChordType
(和弦类型) 是一个包含 ChordPart
(和弦组成部分) 的结构体,这些是和弦的构建块。ChordType
来定义任何现有的和弦。ChordType
的组成部分。ChordPart
协议的结构体。Chord
(和弦) 使用类型和根音调来定义和弦。let m13 = ChordType(
third: .minor,
seventh: .dominant,
extensions: [
ChordExtensionType(type: .thirteenth)
])
let cm13 = Chord(type: m13, key: Key(type: .c))
ChordProgression
枚举来生成和弦进行。let progression = ChordProgression.i_ii_vi_iv
let cSharpHarmonicMinorTriadsProgression = progression.chords(
for: cSharpHarmonicMinor,
harmonicField: .triad,
inversion: 0)
NoteValue
(音符时值)。NoteValue
(音符时值) 来计算任何速度下的音符持续时间。你可以在 MusicTheoryTests
目标中找到单元测试。
按 ⌘+U
运行测试。
这个库在我的 iOS, macOS, watchOS 和 tvOS 应用中经过了实战测试,快来看看吧!
KeyBud (iOS, watchOS, tvOS, macOS)
FretBud (iOS, watchOS, tvOS)
ChordBud (iOS)
ArpBud (iOS)
ScaleBud (iOS, AUv3, M1)
StepBud (iOS, AUv3, M1)
RhythmBud (iOS, AUv3, M1)
ArpBud 2 (iOS, AUv3, M1)
ChordBud 2 (iOS, AUv3, M1)
LoopBud (iOS, AUv3, M1)
Euclid Goes to Party (iOS, AUv3, M1)
SnakeBud (iOS, AUv3, M1)
MelodyBud (iOS, AUv3, M1)
ScaleBud 2 (iOS, AUv3, M1)
ShiftBud (iOS, AUv3, M1)
PolyBud (iOS, AUv3, M1)
PatternBud (iOS, AUv3, M1)
MIDI Motion (iOS, watchOS)
Textquencer (iOS, AUv3, M1)
In Theory (iOS, AUv3, M1)
BrainBud (iOS, AUv3, M1)
Binarhythmic (iOS, AUv3, M1)
Auto Bass (iOS, AUv3, M1)
BounceBud (iOS, AUv3, M1)
MuseBud (iOS, AUv3, M1)
Auto Fills (iOS, AUv3, M1)
Kebarp (iOS, AUv3, M1)
FuncBud (iOS, AUv3, M1)
Note to Be (iOS, AUv3, M1)
Harmonicc (iOS, AUv3, M1)