7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/dtwrb/resampler.rb', line 7
def call(frames, length)
raise ArgumentError, "resample length must be positive, got #{length}" unless length.positive?
return [] if frames.empty?
return Array.new(length) { frames.first.map(&:to_f) } if frames.length == 1 || length == 1
last = frames.length - 1
Array.new(length) do |index|
position = index.to_f * last / (length - 1)
lower = position.floor
upper = [lower + 1, last].min
interpolate(frames[lower], frames[upper], position - lower)
end
end
|