Method: Coltrane::Theory::Interval#initialize
- Defined in:
- lib/coltrane/theory/interval.rb
#initialize(arg_1 = nil, arg_2 = nil, ascending: true, letter_distance: nil, semitones: nil, compound: false) ⇒ Interval
Returns a new instance of Interval.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/coltrane/theory/interval.rb', line 40 def initialize(arg_1 = nil, arg_2 = nil, ascending: true, letter_distance: nil, semitones: nil, compound: false) if arg_1 && !arg_2 # assumes arg_1 is a letter @compound = compound IntervalClass[arg_1].interval.yield_self do |interval| @letter_distance = interval.letter_distance @cents = interval.cents end elsif arg_1 && arg_2 # assumes those are notes if ascending @compound = compound @cents = (arg_1.frequency / arg_2.frequency) .interval_class .cents @letter_distance = calculate_letter_distance arg_1.letter, arg_2.letter, ascending else self.class.new(arg_1, arg_2).descending.yield_self do |base_interval| @compound = base_interval.compound? @cents = base_interval.cents @letter_distance = base_interval.letter_distance end end elsif letter_distance && semitones @compound = compound || letter_distance > 8 @cents = semitones * 100 @letter_distance = letter_distance else raise WrongKeywordsError, '[interval_class_name]' \ 'Provide: [first_note, second_note] || ' \ '[letter_distance:, semitones:]' end end |