Guest User

Untitled

a guest
Feb 21st, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. octave = ['C',('C#','Db'),'D',('D#','Eb'),'E','F',('F#','Gb'),'G',('G#','Ab'),'A',('A#','Bb'),'B']
  2.  
  3. def is_valid_scale_name(scalename):
  4. if len(scalename) > 2: return False
  5. if len(scalename) == 2 and scalename[1] != 'b': return False
  6. if scalename[0].upper() not in 'ABCDEFG': return False
  7. return True
  8.  
  9. def find_note(name):
  10. for i in range(len(octave)):
  11. note = octave[i]
  12. if isinstance(note,str):
  13. if note == name:
  14. return i
  15. elif((name == note[0]) or (name == note[1])):
  16. if name in note:
  17. return i
  18.  
  19. def get_note(index,is_flat_scale):
  20. note = octave[index]
  21. if isinstance(note,str):
  22. return note
  23. else:
  24. if is_flat_scale:
  25. return note[1]
  26. else:
  27. return note[0]
  28.  
  29. def is_flat_scale(tonenumber):
  30. if(tonenumber<6):
  31. return tonenumber%2==1
  32. else:
  33. return tonenumber%2==0
  34.  
  35. def name_to_key_sig(scalename):
  36. pos = find_note(scalename)
  37. if is_flat_scale(pos):
  38. return next_flat(pos, [])
  39. else:
  40. return next_sharp(pos,[])
  41.  
  42. def next_sharp(pos, signature):
  43. if pos == 0:
  44. return signature
  45. else:
  46. signature = next_sharp((pos-7)%12,signature)
  47. signature.append(get_note(pos-1,False))
  48. return signature
  49.  
  50. def next_flat(pos, signature):
  51. if pos == 0:
  52. return signature
  53. else:
  54. signature = next_flat((pos-5)%12, signature)
  55. signature.append(get_note((pos+5)%12, True))
  56. return signature
  57.  
  58. if __name__ == '__main__':
  59. try:
  60. while 1:
  61. scalename = raw_input('scale name: ')
  62. if is_valid_scale_name(scalename):
  63. print name_to_key_sig(scalename)
  64. else:
  65. print 'Enter a valid scale name. Ex: A, Bb, C'
  66. except KeyboardInterrupt:
  67. print
  68. import sys
  69. sys.exit(1)
Add Comment
Please, Sign In to add comment