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