class Libsamplerate::StaticResampler
Attributes
in[R]
out[R]
src_data[R]
Public Class Methods
new(in_file, out)
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 5 def initialize in_file, out @in = { path: in_file, info: get_info(in_file) } @out = out end
Public Instance Methods
allocate_audio_pointer_buffer_float(num_samples)
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 75 def allocate_audio_pointer_buffer_float num_samples ::FFI::MemoryPointer.new :float, num_samples end
create_audio_pointer_buffer_float(samples)
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 79 def create_audio_pointer_buffer_float samples ptr = ::FFI::MemoryPointer.new :float, samples.size ptr.write_array_of_float samples ptr end
get_info(file)
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 21 def get_info file Libsamplerate.get_sound_file_info file end
in_info()
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 13 def in_info @in[:info] end
out_info()
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 17 def out_info @out[:info] end
prepare_buffer()
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 49 def prepare_buffer if in_info.channels != 1 Libsamplerate.stereo_to_mono @in[:path] else Libsamplerate.get_float_buffer_from_mono_file @in[:path] end end
resample()
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 57 def resample input = prepare_buffer num_samples = input.size in_ptr = create_audio_pointer_buffer_float input tRate = out_info.samplerate.to_f iRate = in_info.samplerate.to_f outbuffer = allocate_audio_pointer_buffer_float num_samples outsamples = num_samples / 2 src_ratio = tRate / iRate converter = Libsamplerate::CONVERTERS[:src_sinc_best_quality] setup_src_data(in_ptr, num_samples, outbuffer, outsamples, src_ratio) resampled = Libsamplerate::FFI.src_simple(src_data, converter, out_info.channels) error = Libsamplerate::FFI.src_strerror resampled error.eql? "No Error." || raise(error) write_out_file self end
setup_src_data(in_ptr, num_samples_in, out_ptr, num_samples_out, src_ratio)
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 25 def setup_src_data in_ptr, num_samples_in, out_ptr, num_samples_out, src_ratio src_data[:data_in] = in_ptr src_data[:input_frames] = num_samples_in src_data[:data_out] = out_ptr src_data[:output_frames] = num_samples_out src_data[:src_ratio] = src_ratio end
write_out_file()
click to toggle source
# File lib/libsamplerate/static_resampler.rb, line 37 def write_out_file num_samples_out = src_data[:output_frames_gen] samples = src_data[:data_out].read_array_of_float(num_samples_out * out_info.channels) sound = RubyAudio::Sound.open(@out[:path], 'w', out_info) buffer = RubyAudio::Buffer.float(samples.length, out_info.channels) samples.each_with_index { |sample, index| buffer[index] = sample } sound.write(buffer) sound.close end