Sha256: c257a30c283902c78b3cbb8116718447ec551283c33bc28b7a7b064d869eb1e9
Contents?: true
Size: 871 Bytes
Versions: 3
Compression:
Stored size: 871 Bytes
Contents
# frozen_string_literal: true # An Interval Cycle is a collection of pitch classes created from a sequence of the same interval class. class HeadMusic::IntervalCycle def self.get(interval = 7) @circles ||= {} interval = interval.to_s.gsub(/^C/i, '').to_i @circles[interval.to_i] ||= new(interval) end attr_reader :interval, :pitch_classes def initialize(interval) @interval = interval.to_i @pitch_classes = pitch_classes_by_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 [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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
head_music-0.23.4 | lib/head_music/interval_cycle.rb |
head_music-0.23.3 | lib/head_music/interval_cycle.rb |
head_music-0.23.2 | lib/head_music/interval_cycle.rb |