Module: Muze::Core::Frames

Defined in:
lib/muze/core/frames.rb

Overview

Shared fixed-size frame slicing for analysis and effects code.

Class Method Summary collapse

Class Method Details

.slice(signal, frame_length:, hop_length:, pad_end: false) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/muze/core/frames.rb', line 9

def slice(signal, frame_length:, hop_length:, pad_end: false)
  raise Muze::ParameterError, "frame_length and hop_length must be positive" unless frame_length.positive? && hop_length.positive?

  values = signal.is_a?(Numo::NArray) ? signal.to_a : Array(signal)
  return [pad_frame(values, frame_length)] if values.length <= frame_length
  return Muze::Native.frame_slices(values, frame_length, hop_length) unless pad_end

  frame_count = ((values.length - frame_length).to_f / hop_length).ceil + 1
  Array.new(frame_count) do |index|
    start = index * hop_length
    pad_frame(values[start, frame_length] || [], frame_length)
  end
end