Sha256: 2ea375f279e17555f966bc629ee5ae7f4acc5a395c02f954d899ead40f33b9bb
Contents?: true
Size: 850 Bytes
Versions: 8
Compression:
Stored size: 850 Bytes
Contents
class HeadMusic::Circle def self.of_fifths get(7) end def self.of_fourths get(5) end def self.get(interval = 7) @circles ||= {} @circles[interval.to_i] ||= new(interval) end singleton_class.send(:alias_method, :[], :get) attr_reader :interval, :pitch_classes def initialize(interval) @interval = HeadMusic::Interval.get(interval.to_i) @pitch_classes = pitch_classes_by_interval(interval) end def index(pitch_class) @pitch_classes.index(HeadMusic::Spelling.get(pitch_class).pitch_class) end private_class_method :new private def pitch_classes_by_interval(interval) [HeadMusic::PitchClass.get(0)].tap do |list| loop do next_pitch_class = list.last + interval break if next_pitch_class == list.first list << next_pitch_class end end end end
Version data entries
8 entries across 8 versions & 1 rubygems