Gin
Loading...
Searching...
No Matches
ResamplingFifo Class Reference

High-quality sample rate conversion FIFO using libsamplerate. More...

#include <gin_resamplingfifo.h>

Public Member Functions

 ResamplingFifo (int blockSize, int numChannels=2, int maxSamples=44100)
 ~ResamplingFifo ()
void setSize (int blockSize, int numChannels=2, int maxSamples=44100)
void setResamplingRatio (double inputRate, double outputRate)
void setRatio (float ratio)
float getRatio ()
void setQuality (int q)
 0 - 4: 0 is worst, 4 is best
void reset ()
int samplesReady ()
void pushAudioBuffer (const juce::AudioSampleBuffer &buffer)
void popAudioBuffer (juce::AudioSampleBuffer &buffer)
void popAudioBufferAdding (juce::AudioSampleBuffer &buffer)

Detailed Description

High-quality sample rate conversion FIFO using libsamplerate.

ResamplingFifo provides real-time sample rate conversion with buffering, allowing you to push audio at one sample rate and pull it out at another. It uses the Secret Rabbit Code (libsamplerate) library for high-quality resampling with configurable quality levels.

Key Features:

  • High-quality resampling (5 quality levels)
  • Real-time operation with internal buffering
  • Multi-channel support
  • Dynamic ratio adjustment
  • Read with or without consuming (adding mode)

Quality Levels (0-4):

  • 0: SRC_SINC_FASTEST (lowest quality, fastest)
  • 1: SRC_SINC_MEDIUM_QUALITY
  • 2: SRC_SINC_BEST_QUALITY (highest quality, slowest)
  • 3: SRC_ZERO_ORDER_HOLD (for non-audio signals)
  • 4: SRC_LINEAR (simple linear interpolation)

Common Use Cases:

  • Playing back audio files at different sample rates
  • Converting between plugin and host sample rates
  • Time-stretching (with dynamic ratio changes)
  • Sample rate conversion in offline processing

Usage:

ResamplingFifo resampler(512, 2, 44100); // 512 block, 2 channels, max 44100 samples
resampler.setResamplingRatio(48000.0, 44100.0); // 48kHz to 44.1kHz
resampler.setQuality(2); // Best quality
// Push audio at input rate
AudioBuffer<float> input48k(2, 512);
resampler.pushAudioBuffer(input48k);
// Pull audio at output rate
AudioBuffer<float> output44k(2, 460); // ~460 samples at 44.1kHz
if (resampler.samplesReady() >= 460)
resampler.popAudioBuffer(output44k);
ResamplingFifo(int blockSize, int numChannels=2, int maxSamples=44100)
See also
AudioFifo, resampleBuffer

Constructor & Destructor Documentation

◆ ResamplingFifo()

ResamplingFifo::ResamplingFifo ( int blockSize,
int numChannels = 2,
int maxSamples = 44100 )

◆ ~ResamplingFifo()

ResamplingFifo::~ResamplingFifo ( )

Member Function Documentation

◆ setSize()

void ResamplingFifo::setSize ( int blockSize,
int numChannels = 2,
int maxSamples = 44100 )

◆ setResamplingRatio()

void ResamplingFifo::setResamplingRatio ( double inputRate,
double outputRate )

◆ setRatio()

void ResamplingFifo::setRatio ( float ratio)

◆ getRatio()

float ResamplingFifo::getRatio ( )

◆ setQuality()

void ResamplingFifo::setQuality ( int q)

0 - 4: 0 is worst, 4 is best

◆ reset()

void ResamplingFifo::reset ( )

◆ samplesReady()

int ResamplingFifo::samplesReady ( )

◆ pushAudioBuffer()

void ResamplingFifo::pushAudioBuffer ( const juce::AudioSampleBuffer & buffer)

◆ popAudioBuffer()

void ResamplingFifo::popAudioBuffer ( juce::AudioSampleBuffer & buffer)

◆ popAudioBufferAdding()

void ResamplingFifo::popAudioBufferAdding ( juce::AudioSampleBuffer & buffer)

The documentation for this class was generated from the following file: