Audacity  3.0.3
Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
Resample Class Referencefinal

Interface to libsoxr. More...

#include <Resample.h>

Collaboration diagram for Resample:

Public Member Functions

 Resample (const bool useBestMethod, const double dMinFactor, const double dMaxFactor)
 ~Resample ()
std::pair< size_t, size_t > Process (double factor, float *inBuffer, size_t inBufferLen, bool lastFlag, float *outBuffer, size_t outBufferLen)
 Main processing function. Resamples from the input buffer to the output buffer. More...

Static Public Attributes

static EnumSetting< int > FastMethodSetting
static EnumSetting< int > BestMethodSetting

Protected Member Functions

void SetMethod (const bool useBestMethod)

Protected Attributes

int mMethod
soxrHandle mHandle
bool mbWantConstRateResampling

Detailed Description

Interface to libsoxr.

This class abstracts the interface to different resampling libraries:

libsoxr, written by Rob Sykes. LGPL.

Since Audacity always does resampling on mono streams that are contiguous in memory, this class doesn't support multiple channels or some of the other optional features of some of these resamplers.

Definition at line 26 of file Resample.h.

Constructor & Destructor Documentation

◆ Resample()

Resample::Resample ( const bool  useBestMethod,
const double  dMinFactor,
const double  dMaxFactor 

Resamplers may have more than one method, offering a tradeoff between speed and quality. Audacity identifies two methods out of all of the choices: a Fast method intended for real-time audio I/O, and a Best method intended for mixing and exporting. The first parameter lets you select either the best method or the fast method.

Definition at line 32 of file Resample.cpp.

33 {
34  this->SetMethod(useBestMethod);
35  soxr_quality_spec_t q_spec;
36  if (dMinFactor == dMaxFactor)
37  {
38  mbWantConstRateResampling = true; // constant rate resampling
39  q_spec = soxr_quality_spec("\0\1\4\6"[mMethod], 0);
40  }
41  else
42  {
43  mbWantConstRateResampling = false; // variable rate resampling
44  q_spec = soxr_quality_spec(SOXR_HQ, SOXR_VR);
45  }
46  mHandle.reset(soxr_create(1, dMinFactor, 1, 0, 0, &q_spec, 0));
47 }

References mbWantConstRateResampling, mHandle, mMethod, and SetMethod().

Here is the call graph for this function:

◆ ~Resample()

Resample::~Resample ( )

Definition at line 49 of file Resample.cpp.

50 {
51 }

Member Function Documentation

◆ Process()

std::pair< size_t, size_t > Resample::Process ( double  factor,
float *  inBuffer,
size_t  inBufferLen,
bool  lastFlag,
float *  outBuffer,
size_t  outBufferLen 

Main processing function. Resamples from the input buffer to the output buffer.

Reads samples from the input buffer, and writes samples to the output buffer. Stops when either is exhausted, or we reach a convenient block end, unless lastFlag is set to force emptying the input buffer. The number of input samples used is returned in inBufferUsed, and the number of output samples generated is the return value of the function. This function may do nothing if you don't pass a large enough output buffer (i.e. there is no where to put a full block of output data)

factorThe scaling factor to resample by.
inBufferBuffer of input samples to be processed (mono)
inBufferLenLength of the input buffer, in samples.
lastFlagFlag to indicate this is the last lot of input samples and the buffer needs to be emptied out into the rate converter. (unless lastFlag is true, we don't guarantee to process all the samples in the input this time, we may leave some for next time)
outBufferBuffer to write output (converted) samples to.
outBufferLenHow big outBuffer is.
Number of input samples consumed, and number of output samples created by this call

Definition at line 88 of file Resample.cpp.

94 {
95  size_t idone, odone;
97  {
98  soxr_process(mHandle.get(),
99  inBuffer , (lastFlag? ~inBufferLen : inBufferLen), &idone,
100  outBuffer, outBufferLen, &odone);
101  }
102  else
103  {
104  soxr_set_io_ratio(mHandle.get(), 1/factor, 0);
106  inBufferLen = lastFlag? ~inBufferLen : inBufferLen;
107  soxr_process(mHandle.get(),
108  inBuffer , inBufferLen , &idone,
109  outBuffer, outBufferLen, &odone);
110  }
111  return { idone, odone };
112 }

References mbWantConstRateResampling, and mHandle.

Referenced by Mixer::MixVariableRates(), EffectChangeSpeed::ProcessOne(), and WaveClip::Resample().

Here is the caller graph for this function:

◆ SetMethod()

void Resample::SetMethod ( const bool  useBestMethod)

Definition at line 114 of file Resample.cpp.

115 {
116  if (useBestMethod)
118  else
120 }

References BestMethodSetting, FastMethodSetting, mMethod, and EnumSetting< Enum >::ReadEnum().

Referenced by Resample().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ BestMethodSetting

EnumSetting< int > Resample::BestMethodSetting
Initial value:

Definition at line 43 of file Resample.h.

Referenced by QualityPrefs::PopulateOrExchange(), and SetMethod().

◆ FastMethodSetting

EnumSetting< int > Resample::FastMethodSetting
Initial value:

Definition at line 42 of file Resample.h.

Referenced by QualityPrefs::PopulateOrExchange(), and SetMethod().

◆ mbWantConstRateResampling

bool Resample::mbWantConstRateResampling

Definition at line 81 of file Resample.h.

Referenced by Process(), and Resample().

◆ mHandle

soxrHandle Resample::mHandle

Definition at line 80 of file Resample.h.

Referenced by Process(), and Resample().

◆ mMethod

int Resample::mMethod

Definition at line 79 of file Resample.h.

Referenced by Resample(), and SetMethod().

The documentation for this class was generated from the following files:
static EnumSetting< int > FastMethodSetting
Definition: Resample.h:42
int mMethod
Definition: Resample.h:79
soxrHandle mHandle
Definition: Resample.h:80
bool mbWantConstRateResampling
Definition: Resample.h:81
Enum ReadEnum() const
Definition: Prefs.h:370
static auto intChoicesMethod
Definition: Resample.cpp:61
void SetMethod(const bool useBestMethod)
Definition: Resample.cpp:114
static const std::initializer_list< EnumValueSymbol > methodNames
Definition: Resample.cpp:54
static EnumSetting< int > BestMethodSetting
Definition: Resample.h:43