Method: Musicality::DrumPattern#initialize
- Defined in:
- lib/musicality/composition/sequencing/drum_machine/drum_pattern.rb
#initialize(duration, part_portions) ⇒ DrumPattern
Returns a new instance of DrumPattern.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/musicality/composition/sequencing/drum_machine/drum_pattern.rb', line 15 def initialize duration, part_portions @duration = duration non_drumpart_names = part_portions.select do |part_name| !DRUM_PARTS.include?(part_name) end if non_drumpart_names.any? raise ArgumentError, "Part names used that are not drum parts: #{non_drumpart_names.inspect}" end accent_offsets = if part_portions.has_key?(DrumParts::ACCENT) DrumPattern.determine_accent_offsets( part_portions.delete(DrumParts::ACCENT).to_rhythm_class.to_rhythm(duration)) else [] end @part_notes = Hash[ part_portions.map do |part_name, portions| pitch = DRUM_PART_PITCHES[part_name] || DUMMY_PITCH notes = portions.to_rhythm_class.to_rhythm(duration).to_notes(pitch) DrumPattern.apply_accents(notes, accent_offsets) [ part_name, notes ] end ] end |