Skip to content

bindings.encoder

Melchor Garau Madrigal edited this page Feb 9, 2017 · 4 revisions

Contains all the functions and objects for FLAC/stream_encoder interface. Don't think this documentation is a full replacement of the FLAC's one. Only tells all available functions, and the relation to the FLAC API, with a short description.

Functions

Buffer? new()

FLAC__stream_encoder_new()

Creates an instance of a FLAC encoder. If return null, then an error has occurred, probably with memory.

delete(Buffer dec)

FLAC__stream_decoder_delete()

Deletes an instance of a FLAC decoder freeing all the native resources.

Number init_stream(Buffer dec, Callback? writeCbk, Callback? seekCbk, Callback? tellCbk, Callback? metadataCbk)

FLAC__stream_encoder_init_stream()

Initializes the decoder with the callbacks passed and returns a value from bindings.encoder.InitStatus. The parameter client_data is not needed.

Number init_ogg_stream(Buffer dec, Callback? readCbk, Callback? writeCbk, Callback? seekCbk, Callback? tellCbk, Callback? metadataCbk)

FLAC__stream_encoder_init_ogg_stream()

Initializes the decoder for an ogg stream with the callbacks passed and returns a value from bindings.encoder.InitStatus. The parameter client_data is not needed.

Number init_file(Buffer dec, String file, Callback? progressCbk)

FLAC__stream_encoder_init_file()

Initializes the decoder for decoding a file. Returns a value from bindings.encoder.InitStatus. The parameter client_data is not needed.

Number init_ogg_file(Buffer dec, String file, Callback? progressCbk)

FLAC__stream_encoder_init_ogg_file()

Initializes the decoder for decoding an ogg file. Returns a value from bindings.encoder.InitStatus. The parameter client_data is not needed.

Boolean finish(Buffer dec)

FLAC__stream_encoder_finish()

Finish the encoding process, flushing the encoder buffer, releasing some resources and setting the encoder to initial state.

Boolean process(Buffer dec, [Buffer] pcmDataArray, Number samples)

FLAC__stream_encoder_process()

Passes some PCM data to the encoder. pcmDataArray length must be the same of the number of channels of the stream. The Buffers inside must store 32bit integers, but must be clamped to the precision of the stream (bits per sample).

Boolean process_interleaved(Buffer dec, Buffer pcmData, Number samples)

FLAC__stream_encoder_process_interleaved()

Passes some PCM interleaved data to the encoder. pcmData must store 32bit integers, but must be clamped to the precision of the stream (bits per sample).

Boolean set_ogg_serial_number(Buffer dec, Number value)

FLAC__stream_encoder_set_ogg_serial_number()

The problem here is that V8 Number precision is not as high as a long in 64Bit platforms. Maybe fails because of that.

Boolean set_verify(Buffer dec, Boolean value)

FLAC__stream_encoder_set_verify()

Boolean set_streamable_subset(Buffer dec, Boolean value)

FLAC__stream_encoder_set_streamable_subset()

Boolean set_channels(Buffer dec, Number value)

FLAC__stream_encoder_set_channels()

Boolean set_bits_per_sample(Buffer dec, Number value)

FLAC__stream_encoder_set_bits_per_sample()

Boolean set_sample_rate(Buffer dec, Number value)

FLAC__stream_encoder_set_sample_rate()

Boolean set_compression_level(Buffer dec, Number value)

FLAC__stream_encoder_set_compression_level()

In the FLAC documentation exposes what parameters involves changing the compression level.

Boolean set_blocksize(Buffer dec, Number value)

FLAC__stream_encoder_set_blocksize()

Boolean set_do_mid_side_stereo(Buffer dec, Boolean value)

FLAC__stream_encoder_set_do_mid_side_stereo()

Boolean set_loose_mid_side_stereo(Buffer dec, Boolean value)

FLAC__stream_encoder_set_loose_mid_side_stereo()

Boolean set_apodization(Buffer dec, String value)

FLAC__stream_encoder_set_apodization()

Boolean set_max_lpc_order(Buffer dec, Number value)

FLAC__stream_encoder_set_max_lpc_order()

Boolean set_qlp_coeff_precision(Buffer dec, Number value)

FLAC__stream_encoder_set_qlp_coeff_precision()

Boolean set_do_qlp_coeff_prec_search(Buffer dec, Boolean value)

FLAC__stream_encoder_set_do_qlp_coeff_prec_search()

Boolean set_do_escape_coding(Buffer dec, Boolean value)

FLAC__stream_encoder_set_do_escape_coding()

Boolean set_do_exhaustive_model_search(Buffer dec, Boolean value)

FLAC__stream_encoder_set_do_exhaustive_model_search()

Boolean set_min_residual_partition_order(Buffer dec, Number value)

FLAC__stream_encoder_set_min_residual_partition_order()

Boolean set_max_residual_partition_order(Buffer dec, Number value)

FLAC__stream_encoder_set_max_residual_partition_order()

Boolean set_rice_parameter_search_dist(Buffer dec, Number value)

FLAC__stream_encoder_set_rice_parameter_search_dist()

Boolean set_total_samples_estimate(Buffer dec, Number value)

FLAC__stream_encoder_set_total_samples_estimate()

The problem here is that this functions expects a uint64_t (aka 64bit unsigned number without decimals) and the maximum precision of the V8 Number is less. So maybe gets truncated part of the number if is too high. Should not happen in general, but keep in mind that.

Boolean set_metadata(Buffer dec, Array[Object] metadataObjects)

FLAC__stream_encoder_set_metadata()

The array must contain metadata objects created using the metadata API. Objects created by hand will make node crash. You must keep the objects alive until the encoder is deleted (aka not delete them untile you delete the encoder).

Number get_state(Buffer dec)

FLAC__stream_encoder_get_state()

You can get a string representation of that using flac.bindings.encoder.State[] or using flac.bindings.encoder.get_resolved_state_string().

Number get_verify_decoder_state(Buffer dec)

FLAC__stream_encoder_get_verify_decoder_state()

You can get a string representation of that using flac.bindings.decoder.StateString.

String get_resolved_state_string(Buffer dec)

FLAC__stream_encoder_get_resolved_state_string()

Object get_verify_decoder_error_stats(Buffer dec)

FLAC__stream_encoder_get_verify_decoder_error_stats()

Returns an object with this structure:

{
  absoluteSample: ..., //could be truncated due to V8 Number precision
  frameNumber: ...,
  channel: ...,
  sample: ...,
  expected: ...,
  got: ...
}

Boolean get_verify(Buffer dec)

FLAC__stream_encoder_get_verify()

Boolean get_streamable_subset(Buffer dec)

FLAC__stream_encoder_get_streamable_subset()

Number get_channels(Buffer dec)

FLAC__stream_encoder_get_channels()

Number get_bits_per_sample(Buffer dec)

FLAC__stream_encoder_get_bits_per_sample()

Number get_sample_rate(Buffer dec)

FLAC__stream_encoder_get_sample_rate()

Number get_blocksize(Buffer dec)

FLAC__stream_encoder_get_blocksize()

Boolean get_do_mid_side_stereo(Buffer dec)

FLAC__stream_encoder_get_do_mid_side_stereo()

Boolean get_loose_mid_side_stereo(Buffer dec)

FLAC__stream_encoder_get_loose_mid_side_stereo()

Number get_max_lpc_order(Buffer dec)

FLAC__stream_encoder_get_max_lpc_order()

Number get_qlp_coeff_precision(Buffer dec)

FLAC__stream_encoder_get_qlp_coeff_precision()

Boolean get_do_qlp_coeff_prec_search(Buffer dec)

FLAC__stream_encoder_get_do_qlp_coeff_prec_search()

Boolean get_do_escape_coding(Buffer dec)

FLAC__stream_encoder_get_do_escape_coding()

Boolean get_do_exhaustive_model_search(Buffer dec)

FLAC__stream_encoder_get_do_exhaustive_model_search()

Number get_min_residual_partition_order(Buffer dec)

FLAC__stream_encoder_get_min_residual_partition_order()

Number get_max_residual_partition_order(Buffer dec)

FLAC__stream_encoder_get_max_residual_partition_order()

Number get_rice_parameter_search_dist(Buffer dec)

FLAC__stream_encoder_get_rice_parameter_search_dist()

Number get_total_samples_estimate(Buffer dec)

FLAC__stream_encoder_get_total_samples_estimate()

The returned number could be truncated due to V8 Number precision. But remembering that the setter also had this limitation, maybe it will return the number correctly. (?)

Enums

get Number State[]

FLAC__StreamEncoderState

Represents the above enum as a associative array. For example bindings.encoder.State.ABORTED will return a Number that represents this enum value. An invalid enum value will return undefined.

get Number InitStatus[]

FLAC__StreamEncoderInitStatus

Represents the above enum as a associative array. For example bindings.decoder.InitStatus.OK will return a Number that represents this enum value. An invalid enum value will return undefined.

get Number ReadStatus[]

FLAC__StreamEncoderReadStatus

Represents the above enum as a associative array. For example bindings.encoder.ReadStatus.CONTINUE will return a Number that represents this enum value. An invalid enum value will return undefined.

get Number SeekStatus[]

FLAC__StreamEncoderSeekStatus

Represents the above enum as a associative array. For example bindings.encoder.SeekStatus.OK will return a Number that represents this enum value. An invalid enum value will return undefined.

get Number TellStatus[]

FLAC__StreamEncoderTellStatus

Represents the above enum as a associative array. For example bindings.encoder.TellStatus.OK will return a Number that represents this enum value. An invalid enum value will return undefined.

get Number WriteStatus[]

FLAC__StreamEncoderWriteStatus

Represents the above enum as a associative array. For example bindings.encoder.WriteStatus.CONTINUE will return a Number that represents this enum value. An invalid enum value will return undefined.

Constants

get String StateString[]

FLAC__StreamEncoderStateString

Represents the above const char* array as a JavaScript array. Returns a String representation for enum bindings.encoder.State.

get String InitStatusString[]

FLAC__StreamEncoderInitStatusString

Represents the above const char* array as a JavaScript array. Returns a String representation for enum bindings.encoder.InitStatus.

get String ReadStatusString[]

FLAC__StreamEncoderReadStatusString

Represents the above const char* array as a JavaScript array. Returns a String representation for enum bindings.encoder.ReadStatus.

get String SeekStatusString[]

FLAC__StreamEncoderSeekStatusString

Represents the above const char* array as a JavaScript array. Returns a String representation for enum bindings.encoder.SeekStatus.

get String TellStatusString[]

FLAC__StreamEncoderTellStatusString

Represents the above const char* array as a JavaScript array. Returns a String representation for enum bindings.encoder.TellStatus.

get String WriteStatusString[]

FLAC__StreamEncoderWriteStatusString

Represents the above const char* array as a JavaScript array. Returns a String representation for enum bindings.encoder.WriteStatus.

Callbacks

Read callback

Object read_callback(Buffer buffer)

Called when the encoder needs some data. Fill the data into the buffer and return an object with bytes set to the bytes read and a valid return value from bindings.encoder.ReadStatus in returnValue field. {bytes: ..., returnValue: ...}

Seek callback

Number seek_callback(Number offset)

Called when the encoder requests seeking on the stream. The value of offset could be truncated due to Number precision. Return a valid value from bindings.encoder.SeekStatus.

Tell callback

Object tell_callback()

Called when the encoder wants to know the offset in bytes from the beginning of the stream. Return an object with offset value as the offset in bytes and returnValue as the valid return value from bindings.encoder.TellStatus. {offset: ..., returnValue: ...}

Write callback

Number read_callback(Buffer data, Number bytes, Number samples, Number nFrame)

Called when the encoder encoded som audio. Return a valid value from bindings.encoder.WriteStatus.

Metadata callback

read_callback(Object metadata)

Called when the encoder ended encoding, and passes you the STREAMINFO metadata block to tell you to write it in the stream (if is possible). metadata is a JavaScript representation of a FLAC__StreamMetadata struct.

Progress callback

progress_callback(Number bytesWritten, Number samplesWritten, Number framesWritten, Number totalFramesEstimated)

Called by the encoder when encoded a chunk of audio, to tell you some statistics.

Clone this wiki locally