一个以Swift枚举的形式提供键(Key)、音符(Pitch)、音程(Interval)、音阶(Scale)和和弦(Chord)表示的音乐理论库。
要求
- Swift 4.0+
- iOS 8.0+
- macOS 10.9+
- tvOS 9.0+
- watchOS 2.0+
安装
CocoaPods
pod 'MusicTheorySwift'
Swift 包管理器
let package = Package(
name: ...
dependencies: [
.package(url: "https://github.com/cemolcay/MusicTheory.git")
],
targets: ...
)
使用方法
MusicTheory
添加了一系列基本枚举和结构体,可以定义几乎所有与音乐相关的数据。最重要的是 Pitch
、Key
、Scale
和 Chord
。
所有数据类型都遵循 Codable
和 CustomStringConvertable
。
Pitch
和 Accident
结构体既可以以 Int
的形式使用 RawPresentable
,也可以使用 ExpressibleByIntegerLiteral
直接用 Int
来表示。
Pitch
和 Key
- 所有键都可以使用
Key
结构体定义。 - 它有一个
KeyType
,你可以设置基本键(如C、D、A、G),还有一个Accidental
,它可以是.natural
、.flat
、sharp
或更具体的如.sharps(amount: 3)
。 - 你可以使用
Key
和八度创建Pitch
。 - 你还可以使用 MIDI 音符数字创建
Pitch
。Pitch
的rawValue
是其 MIDI 音符数字。 Pitch
、Key
、Accident
结构体相等,为方便计算定义了+
和-
自定义运算符。- 还有其他辅助函数或属性,如音符的频率。
- 你可以直接使用字符串表示法来定义它们。
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)
Interval
- 间隔是音之间的半音步。
- 它们是
IntegerLiteral
,你可以在它们之间进行加减,或者在音符或音符类型之间进行操作。 - 你可以构建具有音质、度和半音属性的自定义间隔。
- 你可以从间隔构建调式或和弦。
- 预定义了从小到大到2个八度为止的减音、大调音、纯音、增音、减音间隔。
缩放类型
和缩放
缩放类型
枚举定义了许多预制的缩放。- 同时,您可以通过
缩放类型.custom(intervals: [Interval],description: String)
来创建一个自定义的缩放类型。 缩放
通过缩放类型和根音定义了一个缩放。- 您可以在八度范围内的音域中生成缩放音符。
- 还可以生成缩放的
和谐场
。 - 和谐场是一个缩放中所有的可能的三和弦、四和弦或扩展和弦。
let c = Key(type: .c)
let maj: ScaleType = .major
let cMaj = Scale(type: maj, key: c)
和弦类型
和和弦
和弦类型
是一个具有和弦部分
的结构,这些是和弦的基本构建块。- 您可以使用
和弦类型
定义任何现有的和弦。 - 和弦的第三、第五、第六、第七和弦和扩展都是
和弦类型
的组成部分。 - 每个部分也是一个符合
和弦部分
协议的结构体。 和弦
通过类型和根音定义了和弦。- 您可以在任何八度范围内生成和弦音符。
- 您可以为任何和弦生成转位。
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
计算任何节奏下的音符时长。 - 音符值定义了一个音符在节拍中的时长。它可以是一个全音符、二分音符、四分音符、八分音符、十六分音符或三十二分音符。
和声函数
- 和声函数是一种在创作时寻找缩放中相关音符或和弦的实用工具。
- 您可以利用它创建推荐引擎或和弦生成器。
沙箱
- 您可以在Xcode沙箱中立即体验这个库!
- 在克隆项目后,为Mac目标构建它,
- 进入项目中的沙箱页面,
- 确保选择了macOS平台,
- 并且确保在沙箱设置中选中了“构建活动方案”选项。
- 沙箱页面中已经准备好了一些食谱,您可以立即运行它们。
文档
单元测试
您可以在MusicTheoryTests
目标中找到单元测试。
按⌘+U
运行测试。
AppStore
这个库在我的iOS、macOS、watchOS和tvOS应用程序中已经过实战考验,去看看吧!
KeyBud (iOS, watchOS, tvOS, macOS)
FretBud (iOS, watchOS, tvOS)
ChordBud (iOS)
ArpBud (iOS)
ScaleBud (iOS, AUv3)
StepBud (iOS, AUv3)
RhythmBud (iOS, AUv3)