Terminology¶
Data types¶
An audio stream is a continuous series of data that represents a sound, such as a song.
A channel is a discrete track of monophonic audio. A monophonic stream has one channel. A stereo stream has two channels. An audio stream that contains 5.1 surround sound will have five normal channels and one Low Frequency Enhancement (LFE) channel.
A sample is single numerical value in a single audio channel in an audio stream.
A frame is a collection of samples from the same point in time–one sample for each channel.
The frame rate (or sample rate) for a stream is the number of frames per second (hertz) of uncompressed audio.
Babycat stores audio as a single array of interleaved samples from channels. A waveform with two channels (e.g. left and right) are stored as:
`
[L R L R L R...]
`
We give every sample a two-dimensional index–first by frame and then by channel.
Resampling¶
Babycat can resample audio from a source frame rate to a destination frame rate. Babycat also comes with several different backends that implement resampling:
RESAMPLE_MODE_LIBSAMPLERATE
: This uses libsamplerate at its highest quality setting. However, libsamplerate is not available in Babycat’s WebAssembly bindings.RESAMPLE_MODE_BABYCAT_LANCZOS
: This is Babycat’s implementation of a Lanczos resampler. This is the fastest (and lowest-quality) resampler available in Babycat.RESAMPLE_MODE_BABYCAT_SINC
: This is Babycat’s implementation of a sinc resampler as as described by Stanford professor Julius O. Smith. The speed and quality of this resampler is in between the above two.