class Musicality::DrumPattern
Constants
- DRUM_PART_PITCHES
- DUMMY_PITCH
Attributes
duration[R]
part_notes[R]
Public Class Methods
apply_accents(notes, accent_offsets)
click to toggle source
# File lib/musicality/composition/sequencing/drum_machine/drum_pattern.rb, line 54 def self.apply_accents notes, accent_offsets cum_dur = 0 notes.each do |note| if note.pitches.any? && accent_offsets.include?(cum_dur) note.mark_accented! end cum_dur += note.duration end end
determine_accent_offsets(accent_rhythm)
click to toggle source
# File lib/musicality/composition/sequencing/drum_machine/drum_pattern.rb, line 40 def self.determine_accent_offsets accent_rhythm accent_offsets = [] cum_dur = 0 accent_rhythm.durations.each do |dur| if dur > 0 accent_offsets.push cum_dur end cum_dur += dur end return accent_offsets end
new(duration, part_portions)
click to toggle source
# 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