class Xi::StepSequencer
Attributes
string[R]
values[R]
Public Class Methods
new(string, *values)
click to toggle source
# File lib/xi/step_sequencer.rb, line 4 def initialize(string, *values) @string = string @values = values end
Public Instance Methods
inspect()
click to toggle source
# File lib/xi/step_sequencer.rb, line 13 def inspect "s(#{@string.inspect}" \ "#{", #{@values.map(&:inspect).join(', ')}" unless @values.empty?})" end
p(*args, **metadata)
click to toggle source
# File lib/xi/step_sequencer.rb, line 9 def p(*args, **metadata) build_pattern(**metadata) end
Private Instance Methods
build_pattern(**metadata)
click to toggle source
# File lib/xi/step_sequencer.rb, line 20 def build_pattern(**metadata) val_keys = values_per_key values_per_bar = @string.split('|').map { |bar| vs = bar.split(/\s*/).reject(&:empty?) vs.map { |k| val_keys[k] } }.reject(&:empty?) delta = values_per_bar.map { |vs| [1 / vs.size] * vs.size }.flatten Pattern.new(values_per_bar.flatten, delta: delta, **metadata) end
keys()
click to toggle source
# File lib/xi/step_sequencer.rb, line 37 def keys @string.scan(/\w/).uniq end
values_per_key()
click to toggle source
# File lib/xi/step_sequencer.rb, line 33 def values_per_key keys.map.with_index { |k, i| [k, k == '.' ? nil : @values[i]] }.to_h end