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>
. Usenew_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
orwrite_coefficients_with_meta
- Reprepresents C++’s
gaborator::coefs<float>
. Create it usingcreate_coefs
. Can be memory-hungry. - Corresponds to
gaborator::parameters
. - Wrapper for your callback function for
fill
orprocess
.
Functions§
- Spectrum analyze the samples at
signal
and add the resulting coefficients tocoefs
.t1
parameter from Gaborator’sanalyze
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
. Ifff_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 tofill
function of Gaborator.from_band
andto_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 toprocess
function of Gaborator.from_band
andto_band
may be given INT_MIN / INT_MAX values, that would mean all bands.from_sample_time
andto_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 atsignal
.t1
parameter from Gaborator’ssynthesize
method is caluclated based on supplied slice size.