Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions README.rdoc
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ What this library can do:
== USAGE:

# Create new encoder with a sample rate of 48 kHz, a frame size of 480 bytes and 1 channel
encoder = Celt::Encoder.new 48000, 480, 1
encoder = Celt::Encoder.new 48000, 480, 1, [60000 / 800, 127].min
# Set the prediction request to 0
encoder.prediction_request = 0
# Set the VBR rate to 60,000
Expand All @@ -38,8 +38,7 @@ What this library can do:
encoder.bitstream_version

# Encode some raw audio
compressed_size = [@encoder.vbr_rate / 800, 127].min
encoded = encoder.encode(raw_audio, compressed_size)
encoded = encoder.encode raw_audio

# Safely destroy encoder
encoder.destroy
18 changes: 10 additions & 8 deletions lib/celt-ruby/encoder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,20 @@ class Encoder
attr_reader :sample_rate, :frame_size, :channels,
:prediction_request, :vbr_rate

def initialize(sample_rate, frame_size, channels)
def initialize(sample_rate, frame_size, channels, size)
@sample_rate = sample_rate
@frame_size = frame_size
@channels = channels

@size = size
@out = FFI::MemoryPointer.new :char, @size + 1
@buf = FFI::MemoryPointer.new :char, @frame_size * 2 + 1
@mode = Celt.celt_mode_create sample_rate, frame_size, nil
@encoder = Celt.celt_encoder_create @mode, channels, nil
end

def destroy
@out.free
@buf.free
Celt.celt_encoder_destroy @encoder
Celt.celt_mode_destroy @mode
end
Expand All @@ -37,12 +41,10 @@ def vbr_rate=(value)
Celt.celt_encoder_ctl @encoder, Celt::Constants::CELT_SET_VBR_RATE_REQUEST, :pointer, v_ptr
end

def encode(data, size)
out = FFI::MemoryPointer.new :char, data.size + 1
buf = FFI::MemoryPointer.new :char, data.size + 1
buf.put_string 0, data
len = Celt.celt_encode @encoder, buf, nil, out, size
out.read_string_length len
def encode(data)
@buf.put_string 0, data
len = Celt.celt_encode @encoder, @buf, nil, @out, @size
@out.read_string len
end
end
end