Class: Wavify::Core::SampleBuffer::MutableFloatWorkspace

Inherits:
Object
  • Object
show all
Defined in:
lib/wavify/core/sample_buffer.rb

Overview

Internal mutable processing workspace whose final Array ownership is transferred to an immutable SampleBuffer without another Array copy.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(samples, format:) ⇒ MutableFloatWorkspace

Returns a new instance of MutableFloatWorkspace.



213
214
215
216
217
218
219
220
221
222
# File 'lib/wavify/core/sample_buffer.rb', line 213

def initialize(samples, format:)
  unless format.is_a?(Format) && format.sample_format == :float
    raise InvalidParameterError, "workspace format must be a floating-point Core::Format"
  end
  raise InvalidParameterError, "workspace samples must be an Array" unless samples.is_a?(Array)

  @samples = samples
  @format = format
  @consumed = false
end

Instance Attribute Details

#formatObject (readonly)

:nodoc:



204
205
206
# File 'lib/wavify/core/sample_buffer.rb', line 204

def format
  @format
end

#samplesObject (readonly)

:nodoc:



204
205
206
# File 'lib/wavify/core/sample_buffer.rb', line 204

def samples
  @samples
end

Class Method Details

.from_buffer(buffer, format:) ⇒ Object



206
207
208
209
210
211
# File 'lib/wavify/core/sample_buffer.rb', line 206

def self.from_buffer(buffer, format:)
  raise InvalidParameterError, "buffer must be Core::SampleBuffer" unless buffer.is_a?(SampleBuffer)

  converted = buffer.format == format ? buffer : buffer.convert(format)
  new(converted.samples.dup, format: format)
end

Instance Method Details

#replace!(samples) ⇒ Object



224
225
226
227
228
229
230
# File 'lib/wavify/core/sample_buffer.rb', line 224

def replace!(samples)
  raise InvalidParameterError, "workspace samples must be an Array" unless samples.is_a?(Array)
  raise InvalidParameterError, "workspace has already been consumed" if @consumed

  @samples = samples
  self
end

#to_sample_bufferObject



232
233
234
235
236
237
# File 'lib/wavify/core/sample_buffer.rb', line 232

def to_sample_buffer
  raise InvalidParameterError, "workspace has already been consumed" if @consumed

  @consumed = true
  SampleBuffer.send(:adopt_mutable_float_samples!, @samples, @format)
end