Module: Tracksperanto::ZipTuples

Included in:
Import::Base, Import::NukeScript::Tracker3, Import::ShakeScript::TrackExtractor
Defined in:
lib/tracksperanto/zip_tuples.rb

Overview

Implements the zip_curve_tuples method

Instance Method Summary collapse

Instance Method Details

#zip_curve_tuples(*curves) ⇒ Object

Zip arrays of “value at” tuples into an array of “values at” tuples (note the plural). The first value of each tuple will be the frame number and keyframes which are not present in all arrays will be discarded. For example:

zip_curve_tuples( [[0, 12], [1, 23]], [[1, 12]]) #=> [[1, 23, 12]]

We make use of the fact that setting an offset index in an array fills it with nils up to the index inserted



13
14
15
16
17
18
19
20
21
22
# File 'lib/tracksperanto/zip_tuples.rb', line 13

def zip_curve_tuples(*curves)
  tuples = curves.inject([]) do | tuples, curve_of_at_and_value |
    curve_of_at_and_value.each do | frame, value |
     tuples[frame] = tuples[frame] ? (tuples[frame] << value) : [frame, value]
    end
    tuples
  end
  
  tuples.reject{|e| e.nil? || (e.length < (curves.length + 1)) }
end