音乐理论Swift 1.3.1

音乐理论Swift 1.3.1

测试已测试
Lang语言 SwiftSwift
许可证 MIT
Released上次发布Nov 2020
SPM支持SPM

Cem Olcay维护。



MusicTheory Build Status

一个以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 添加了一系列基本枚举和结构体,可以定义几乎所有与音乐相关的数据。最重要的是 PitchKeyScaleChord

所有数据类型都遵循 CodableCustomStringConvertable
PitchAccident 结构体既可以以 Int 的形式使用 RawPresentable,也可以使用 ExpressibleByIntegerLiteral 直接用 Int 来表示。

PitchKey

  • 所有键都可以使用 Key 结构体定义。
  • 它有一个 KeyType,你可以设置基本键(如C、D、A、G),还有一个 Accidental,它可以是 .natural.flatsharp 或更具体的如 .sharps(amount: 3)
  • 你可以使用 Key 和八度创建 Pitch
  • 你还可以使用 MIDI 音符数字创建 PitchPitchrawValue 是其 MIDI 音符数字。
  • PitchKeyAccident 结构体相等,为方便计算定义了 +- 自定义运算符。
  • 还有其他辅助函数或属性,如音符的频率。
  • 你可以直接使用字符串表示法来定义它们。
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)