Spil nøglerne og få akkordet! Prime Harmony er et simpelt redskab til at lære harmonier, hvilket giver dig almindelige tonale akkorder og en grundlæggende atonal repræsentation af uanset hvad du spiller. Andre funktioner:
* Evnen til at justere sorte nøgle noter skal være enten flad eller skarp
* Hør noterne, mens du spiller dem
* Hør hele akkordet du har valgt
Brug akkordkalkulator til at hjælpe dine musikteori studier, kontrollere dit arbejde eller som et supplement til andre teori ressourcer.
importFoundation
typealias Key = (PitchClass, Octave)
enum PitchClass: Int, Comparable, Hashable {
casec =0, cSharp, d, dSharp, e, f, fSharp, g, gSharp, a, aSharp, b
varisBlackKey:Bool{
returnString(describing:self).contains("Sharp")
}
varpossibleSpellings: [String] {
switchself{
case.c:return["C","B♯"]
case.cSharp:return["C♯","D♭"]
case.d:return["D"]
case.dSharp:return["D♯","E♭"]
case.e:return["E","F♭"]
case.f:return["F","E♯"]
case.fSharp:return["F♯","G♭"]
case.g:return["G"]
case.gSharp:return["G♯","A♭"]
case.a:return["A"]
case.aSharp:return["A♯","B♭"]
case.b:return["B","C♭"]
}
}
varpossibleLetterNames: [NoteLetter] {
switchself{
case.c:return[.c, .b]
case.cSharp:return[.c, .d]
case.d:return[.d]
case.dSharp:return[.d, .e]
case.e:return[.e, .f]
case.f:return[.f, .e]
case.fSharp:return[.f, .g]
case.g:return[.g]
case.gSharp:return[.g, .a]
case.a:return[.a]
case.aSharp:return[.a, .b]
case.b:return[.b, .c]
}
}
staticfunc<(lhs:PitchClass, rhs:PitchClass) ->Bool{
returnlhs.rawValue< rhs.rawValue
}
}
enumNoteLetter:String{
casec ="C", d ="D", e ="E", f ="F", g ="G", a ="A", b ="B"
}
enumOctave:Int,Equatable{
casezero =0
caseone =1
}
网友评论