Method: PicoTune::Tune#buffer

Defined in:
lib/picotune.rb

#bufferObject



170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/picotune.rb', line 170

def buffer
  @buffer ||= begin
    tune_buffer_length = @sequence.reduce(0) do |acc, phrase_name|
      acc + @phrases.find { |p| p.name == phrase_name }.buffer_size
    end

    offset = 0
    samples = Array.new(tune_buffer_length) { PicoTune::Sample.new }

    @sequence.each do |phrase_name|
      phrase = @phrases.find { |p| p.name == phrase_name }

      phrase.buffer.each_with_index do |phrase_sample, index|
        tune_sample = samples[offset + index] || PicoTune::Sample.new
        tune_sample.add phrase_sample
        samples[offset + index] = tune_sample
      end

      offset += phrase.buffer_size
    end

    samples
  end
end