这是一个 Swift 库,可以为其数据库中的任何和弦生成 CAShapeLayer。您只需要提供一个 Key (C, C# 等) 和一个后缀 (Major, Minor, sus4 等) 来找到合适的和弦。每个和弦都有几个变体。
这个数据库来自我之前找到的另一个项目,但记不清是哪个了。请不要 100% 依赖这些数据,因为我发现一些和弦是不正确的。如果您发现任何错误,请提交 PR 来更正它们。
这个库目前处于 Beta 阶段。一切正常,绘图速度也很好,但仍有很大的改进空间。
我正在我的音乐学习应用程序 "Mustud" 中使用这个库,没有任何问题。
目前只支持 Swift Package Manager。
import SwiftyChords
Chords.guitar
返回基于 C# 的所有和弦
Chords.guitar.matching(key: .cSharp)
返回数据库中所有 Key 的大七和弦。
Chords.guitar.matching(suffix: .majorSeven)
返回所有 C Major 和弦。这些将按照在指板上的位置排序,从琴枕开始。
Chords.guitar.matching(key: .c).matching(suffix: .major)
返回数据库中所有挂留和弦及其变体,例如 sus2, sus4
Chords.guitar.matching(group: .suspended)
返回所有 Dsus4 和弦。这与按 Key 和后缀过滤效果相同。
Chords.guitar.matching(keyword: "Dsus4") // same as Chords.guitar.matching(key: .d).matching(suffix: .sus4)
Swifty Chords 支持许多可在 UI 中使用的替代文本,包括一种便于辅助功能文本转语音的变体。 Key 和 Suffix 属性的显示文本可以组合以完成和弦名称。
let cMajSevenFlatFive = Chords.guitar.matching(key: .c).matching(suffix: .majorSevenFlatFive)
print(cMajSevenFlatFive.suffix.display.accessible) // " major seven flat five"
print(cMajSevenFlatFive.suffix.display.short) // "Maj7b5"
print(cMajSevenFlatFive.suffix.display.symbolized) // "Maj⁷♭⁵"
print(cMajSevenFlatFive.suffix.display.altSymbol) // "M⁷♭⁵"
有很多方法可以使用 CAShapeLayer
。您可以将其直接添加到视图,或将其转换为图像。
要使用它,我们只需要一个和弦!
let chordPosition = Chords.guitar.matching(key: .c).matching(suffix: .major).first!
let frame = CGRect(x: 0, y: 0, width: 100, height: 150) // I find these sizes to be good.
let layer = chordPosition.chordLayer(rect: frame, chordName: .init(show: true, key: .symbol, suffix: .symbolized))
imageView.image = layer.image() // might be expensive. Use Layers when possible while drawing to a view. Images are better if you plan to send them outside the app.
rect
: 将在其中绘制和弦的区域。这决定了它的大小。和弦具有设定的宽高比,因此和弦的大小将基于 rect 的最短边。
showFingers
: 确定是否应在点上绘制手指数字。默认为 true
。
showChordName
确定是否应在和弦上方绘制和弦名称。选择此选项会稍微减小和弦图表的大小,以适应文本。可以为 Key 和 Suffix 设置显示模式。默认为 rawValue
forPrint
: 如果设置为 true
,则图表将着色为黑色,忽略用户设备设置。如果设置为 false
,则图表的颜色将与系统标签颜色匹配。浅色模式下为深色文本,深色模式下为浅色文本。默认为 false
。
mirror
: 适用于左撇子用户。这会将和弦沿其 y 轴翻转。默认为 false
。