Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- KEY_COUNT = 12
- KEYS = []
- KEYS[0] = "C"
- KEYS[1] = "C#"
- KEYS[2] = "D"
- KEYS[3] = "D#"
- KEYS[4] = "E"
- KEYS[5] = "F"
- KEYS[6] = "F#"
- KEYS[7] = "G"
- KEYS[8] = "G#"
- KEYS[9] = "A"
- KEYS[10] = "A#"
- KEYS[11] = "B"
- KEYS_S = {}
- for i in 0...KEYS.size ; KEYS_S[KEYS[i]] = i ; end
- KEYS_S["BB"] = KEYS_S["A#"]
- SCALES = {}
- SCALES["MAJ"] = [0, 4, 3]
- SCALES["MIN"] = [0, 3, 4]
- SCALES["MAJ7"] = [0, 4, 3, 4]
- def scale_to_keys( scale )
- result = []
- num = 0
- for key in scale
- num += key
- num %= KEY_COUNT
- result << num
- end
- return result
- end
- def scale_to_keys_s( scale )
- result = []
- num = 0
- for key in scale
- num += key
- num %= KEY_COUNT
- result << KEYS[num]
- end
- return result
- end
- def array_space_to_s( arra )
- result = ""
- arra.each { |e| result += "#{e} " }
- return result
- end
- def offset_scale( scale, amount )
- result = scale.clone ; result[0] += amount ; return result
- end
- loop do
- case gets
- # // scale maj D
- when /scale[ ](.*) (.*)/i
- sc = $1 # // Scale
- key = $2 # // Note
- scal = SCALES[sc.upcase]
- scal2 = offset_scale( scal, KEYS_S[key.upcase] )
- notes = scale_to_keys_s( scal2 )
- keys1 = scal
- keys2 = scale_to_keys( scal2 )
- notes = array_space_to_s(notes)
- keys1 = array_space_to_s(keys1)
- keys2 = array_space_to_s(keys2)
- puts "#{notes} : #{keys1} : #{keys2}"
- when /break/i
- break
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment