[][src]Crate gaborator_sys

Gaborator is a C++ library for converting audio samples to a special spectral representation that uses different FTT sizes based on whether it is bass or treble (oversimplifying here). The transformation is reversible. See the website for more info.

This crate is a cxx-based wrapper of this library, allowing Rust code to use Gaborator (although with reduced efficiency).

Limitations:

  • f32 only
  • Not performance-minded
  • Some overridable or low-level details not exposed
  • No visualisation
  • Crate soundness may be iffy - I was just followed the path of least resistance.
  • Arithmentic overflows in buffer length calculations are not checked.
  • Not really tested, apart from included examples. For example, streaming should be supported, but I haven't tried it myself.

Currently based on Gaborator version 1.6. Source code of the Gaborator is included into the crate.

Availble examples:

  • Phase information randomizer, creating sort-of-reverberation audio effect.
  • Converts the analyzed sound to (sample,band,magnitude,phase) CSV file and back.

License of Gaborator is Affero GPL 3.0.

Glue code (sans doccomments copied from Gaborator) in this crate may be considered to be licensed as either MIT or AGPL-3.0, at your option.

Re-exports

pub extern crate cxx;

Structs

Analyzer

Represents C++'s gaborator::analyzer<float>. Use new_analyzer function to create it.

Coef

Complex point, representing one coefficient. Magnitude is loudness at this point, argument is phase.

CoefMeta

Additional data for read_coefficients_with_meta or write_coefficients_with_meta

Coefs

Reprepresents C++'s gaborator::coefs<float>. Create it using create_coefs. Can be memory-hungry.

Params

Corresponds to gaborator::parameters.

ProcessOrFillCallback

Wrapper for your callback function for fill or process.

Functions

analyze

Spectrum analyze the samples at signal and add the resulting coefficients to coefs. t1 parameter from Gaborator's analyze method is caluclated based on supplied slice size.

band_ff

Return the center frequency of band number band, in units of the sampling frequency.

band_lowpass

Return the band number of the lowpass band.

band_ref

Return the band number corresponding to the reference frequency ff_ref. If ff_ref falls within the frequency range of the bandpass filter bank, this will be a valid bandpass band number, otherwise it will not.

bandpass_bands_begin

Return the smallest valid bandpass band number, corresponding to the highest-frequency bandpass filter.

bandpass_bands_end

Return the bandpass band number one past the highest valid bandpass band number, corresponding to one past the lowest-frequency bandpass filter.

create_coefs

Create Coefs - the holder of analyzed data.

fill

Write values to Coefs, creating non-existent entries as needed. Corresponds to fill function of Gaborator. from_band and to_band may be given INT_MIN / INT_MAX values, that would mean all bands. from_sample_time / to_sample_time should not be set to overtly large range, lest memory will be exhausted.

forget_before

Allow the coefficients for points in time before limit (a time in units of samples) to be forgotten. Streaming applications can use this to free memory used by coefficients that are no longer needed. Coefficients that have been forgotten will read as zero. This does not guarantee that all coefficients before limit are forgotten, only that ones for limit or later are not, and that the amount of memory consumed by any remaining coefficients before limit is bounded.

get_analysis_support_len

Returns the one-sided worst-case time domain support of any of the analysis filters. When calling analyze() with a sample at time t, only spectrogram coefficients within the time range t ± support will be significantly changed. Coefficients outside the range may change, but the changes will sufficiently small that they may be ignored without significantly reducing accuracy.

get_synthesis_support_len

Returns the one-sided worst-case time domain support of any of the reconstruction filters. When calling synthesize() to synthesize a sample at time t, the sample will only be significantly affected by spectrogram coefficients in the time range t ± support. Coefficients outside the range may be used in the synthesis, but substituting zeroes for the actual coefficient values will not significantly reduce accuracy.

new_analyzer

Create new instance of Gaborator analyzer/synthesizer based on supplied parameters

process

Read or write values within Coefs, skipping over non-existent entries. Corresponds to process function of Gaborator. from_band and to_band may be given INT_MIN / INT_MAX values, that would mean all bands. from_sample_time and to_sample_time can also be given INT64_MIN / INT64_MAX value to mean all available data.

synthesize

Synthesize signal samples from the coefficients coef and store them at signal. t1 parameter from Gaborator's synthesize method is caluclated based on supplied slice size.