Crate gaborator_sys

Source
Expand description

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§

  • Represents C++’s gaborator::analyzer<float>. Use new_analyzer function to create it.
  • Complex point, representing one coefficient. Magnitude is loudness at this point, argument is phase.
  • Additional data for read_coefficients_with_meta or write_coefficients_with_meta
  • Reprepresents C++’s gaborator::coefs<float>. Create it using create_coefs. Can be memory-hungry.
  • Corresponds to gaborator::parameters.
  • Wrapper for your callback function for fill or process.

Functions§

  • 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.
  • Return the center frequency of band number band, in units of the sampling frequency.
  • Return the band number of the lowpass band.
  • 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.
  • Return the smallest valid bandpass band number, corresponding to the highest-frequency bandpass filter.
  • Return the bandpass band number one past the highest valid bandpass band number, corresponding to one past the lowest-frequency bandpass filter.
  • Create Coefs - the holder of analyzed data.
  • 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.
  • 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.
  • 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.
  • 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.
  • Create new instance of Gaborator analyzer/synthesizer based on supplied parameters
  • 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 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.