HART  0.1.0
High level Audio Regression and Testing
Loading...
Searching...
No Matches
SineSweep< SampleType > Class Template Reference

Produces a sine sweep. More...

#include <hart_sine_sweep.hpp>

Inheritance diagram for SineSweep< SampleType >:

Public Types

enum class  Loop { no , yes }
 Determines what to do after frequency sweep is done. More...
 
enum class  SweepType { linear , log }
 Determines how to change the frequency. More...
 

Public Member Functions

 SineSweep (double durationSeconds=1.0, double startFrequencyHz=20.0, double endFrequencyHz=20.0e3, SweepType type=SweepType::log, Loop loop=Loop::no, double initialPhaseRadians=0.0)
 Creates a sine sweep signal.
 
SineSweep withDuration (double durationSeconds)
 Returns a new SineSweep instance with specified duration.
 
SineSweep withStartFrequency (double startFrequencyHz)
 Returns a new SineSweep instance with specified start frequency.
 
SineSweep withEndFrequency (double endFrequencyHz)
 Returns a new SineSweep instance with specified end frequency.
 
SineSweep withType (SweepType type)
 Returns a new SineSweep instance with specified sweep type.
 
SineSweep withLoop (Loop loop)
 Returns a new SineSweep instance with specified loop preference.
 
SineSweep withPhase (double initialPhaseRadians)
 Returns a new SineSweep instance with specified initial phase.
 
bool supportsNumChannels (size_t) const override
 Tells the host whether this Signal is capable of generating audio for a certain amount of cchannels.
 
void prepare (double sampleRateHz, size_t, size_t) override
 Prepare the signal for rendering.
 
void renderNextBlock (AudioBuffer< SampleType > &output) override
 Renders next block audio for the signal.
 
void reset () override
 Resets the Signal to initial state.
 
void represent (std::ostream &stream) const override
 Makes a text representation of this Signal for test failure outputs.
 
 HART_SIGNAL_DEFINE_COPY_AND_MOVE (SineSweep)
 
- Public Member Functions inherited from Signal< SampleType >
 Signal ()=default
 Default constructor.
 
 Signal (const Signal &other)
 Copies other signal.
 
 Signal (Signal &&other) noexcept
 Moves from other signal.
 
virtual ~Signal ()=default
 Destructor.
 
Signaloperator= (const Signal &other)
 Copies from other signal.
 
Signaloperator= (Signal &&other) noexcept
 Moves from other signal.
 
virtual bool supportsSampleRate (double) const
 Tells whether this Signal supports given sample rate.
 
virtual std::unique_ptr< Signal< SampleType > > copy () const =0
 Returns a smart pointer with a copy of this object.
 
virtual std::unique_ptr< Signal< SampleType > > move ()=0
 Returns a smart pointer with a moved instance of this object.
 
SignalfollowedBy (const DSP< SampleType > &dsp)
 Adds a DSP effect to the end of signal's DSP chain by copying it.
 
SignalfollowedBy (std::unique_ptr< DSP< SampleType > > dsp)
 Adds a DSP effect to the end of signal's DSP chain by transfering a smart pointer.
 
template<typename DerivedDSP , typename = typename std::enable_if< std::is_base_of< DSP<SampleType>, typename std::decay<DerivedDSP>::type >::value >::type>
SignalfollowedBy (DerivedDSP &&dsp)
 Adds a DSP effect to the end of signal's DSP chain by moving it.
 
void prepareWithDSPChain (double sampleRateHz, size_t numOutputChannels, size_t maxBlockSizeFrames)
 Prepares the signal and all attached effects in the DSP chain for rendering.
 
void renderNextBlockWithDSPChain (AudioBuffer< SampleType > &output)
 Renders next block audio for the signal and all the effects in the DSP chain.
 
virtual void resetWithDSPChain ()
 Resets to Signal and all the effects attached to its DSP chain to initial state.
 

Additional Inherited Members

- Protected Member Functions inherited from Signal< SampleType >
void setNumChannels (size_t numChannels)
 
size_t getNumChannels ()
 

Detailed Description

template<typename SampleType>
class hart::SineSweep< SampleType >

Produces a sine sweep.

Outputs a signal at unity gain (-1.0..+1.0), linear or log sweep, up or down. Tip: If you want to get an low-high-low or a high-low-high sweep, set loop to Loop::yes, and duration of host's signal (see AudioTestBuilder::withDuration()) to 2x durationSeconds of this signal.

Definition at line 19 of file hart_sine_sweep.hpp.

Member Enumeration Documentation

◆ Loop

template<typename SampleType >
enum class Loop
strong

Determines what to do after frequency sweep is done.

Enumerator
no 

Stop after finishing one sweep.

yes 

Keep on sweeping back and forth.

Definition at line 23 of file hart_sine_sweep.hpp.

◆ SweepType

template<typename SampleType >
enum class SweepType
strong

Determines how to change the frequency.

Enumerator
linear 

Linear sweep, for a white noise-like spectrum.

log 

Logarithmic sweep, for a pink noise-like spectrum.

Definition at line 30 of file hart_sine_sweep.hpp.

Constructor & Destructor Documentation

◆ SineSweep()

template<typename SampleType >
SineSweep ( double  durationSeconds = 1.0,
double  startFrequencyHz = 20.0,
double  endFrequencyHz = 20.0e3,
SweepType  type = SweepType::log,
Loop  loop = Loop::no,
double  initialPhaseRadians = 0.0 
)
inline

Creates a sine sweep signal.

Parameters
durationSecondsDuration of sine sweep
startFrequencyHzStart frequency of the sine sweep
endFrequencyHzEnd frequency of the sine sweep
typeLinear or Log frequency sweep, see SweepType
loopIf Loop::no is selected, the Signal will produce silence after duration; if Loop::yes is selected, the signal will keep on going back and forth between start and end frequencies (up and down) indefinitely.
initialPhaseRadiansInitial phase of the signal

Definition at line 45 of file hart_sine_sweep.hpp.

Member Function Documentation

◆ withDuration()

template<typename SampleType >
SineSweep withDuration ( double  durationSeconds)
inline

Returns a new SineSweep instance with specified duration.

Handy if you want to skip specifying some arguments in the constructor

Parameters
durationSecondsDuration of sine sweep
Returns
A new SineSweep instance with a specified parameter

Definition at line 75 of file hart_sine_sweep.hpp.

◆ withStartFrequency()

template<typename SampleType >
SineSweep withStartFrequency ( double  startFrequencyHz)
inline

Returns a new SineSweep instance with specified start frequency.

Handy if you want to skip specifying some arguments in the constructor

Parameters
startFrequencyHzStart frequency of the sine sweep
Returns
A new SineSweep instance with a specified parameter

Definition at line 84 of file hart_sine_sweep.hpp.

◆ withEndFrequency()

template<typename SampleType >
SineSweep withEndFrequency ( double  endFrequencyHz)
inline

Returns a new SineSweep instance with specified end frequency.

Handy if you want to skip specifying some arguments in the constructor

Parameters
endFrequencyHzEnd frequency of the sine sweep
Returns
A new SineSweep instance with a specified parameter

Definition at line 93 of file hart_sine_sweep.hpp.

◆ withType()

template<typename SampleType >
SineSweep withType ( SweepType  type)
inline

Returns a new SineSweep instance with specified sweep type.

Handy if you want to skip specifying some arguments in the constructor

Parameters
typeLinear or Log frequency sweep, see SweepType
Returns
A new SineSweep instance with a specified parameter

Definition at line 102 of file hart_sine_sweep.hpp.

◆ withLoop()

template<typename SampleType >
SineSweep withLoop ( Loop  loop)
inline

Returns a new SineSweep instance with specified loop preference.

Handy if you want to skip specifying some arguments in the constructor

Parameters
loopIf Loop::no is selected, the Signal will produce silence after duration; if Loop::yes is selected, the signal will keep on going back and forth between start and end frequencies (up and down) indefinitely.
Returns
A new SineSweep instance with a specified parameter

Definition at line 113 of file hart_sine_sweep.hpp.

◆ withPhase()

template<typename SampleType >
SineSweep withPhase ( double  initialPhaseRadians)
inline

Returns a new SineSweep instance with specified initial phase.

Handy if you want to skip specifying some arguments in the constructor

Parameters
initialPhaseRadiansInitial phase of the signal
Returns
A new SineSweep instance with a specified parameter

Definition at line 122 of file hart_sine_sweep.hpp.

◆ supportsNumChannels()

template<typename SampleType >
bool supportsNumChannels ( size_t  ) const
inlineoverridevirtual

Tells the host whether this Signal is capable of generating audio for a certain amount of cchannels.

It is guaranteed that the signal will not receive unsupported number of channels in renderNextBlock(). This method is guaranteed to be called at least once before prepare()

Note
This method should only care about the Signal itself, and not the attached effects in DSP chain - they'll be queried separately
Parameters
numChannelsNumber of output channels that will need to be filled
Returns
true if signal is capable of filling this many channels with audio, false otherwise

Reimplemented from Signal< SampleType >.

Definition at line 127 of file hart_sine_sweep.hpp.

◆ prepare()

template<typename SampleType >
void prepare ( double  sampleRateHz,
size_t  numOutputChannels,
size_t  maxBlockSizeFrames 
)
inlineoverridevirtual

Prepare the signal for rendering.

This method is guaranteed to be called after supportsNumChannels() and supportsSampleRate(), but before renderNextBlock(). It is guaranteed that numChannels obeys supportsNumChannels() preferences, same with sampleRateHz and supportsSampleRate(). It is guaranteed that all subsequent renderNextBlock() calls will be in line with the arguments received in this callback.

Parameters
sampleRateHzsample rate at which the audio should be generated
numOutputChannelsNumber of output channels to be filled
maxBlockSizeFramesMaximum block size in frames (samples)

Implements Signal< SampleType >.

Definition at line 129 of file hart_sine_sweep.hpp.

◆ renderNextBlock()

template<typename SampleType >
void renderNextBlock ( AudioBuffer< SampleType > &  output)
inlineoverridevirtual

Renders next block audio for the signal.

Depending on circumstances, this callback will either be called once to generate an entire piece of audio from start to finish, or called repeatedly, one block at a time. This method is guaranteed to be called strictly after prepare(), or not called at all. Number of channels and max block size are guaranteed to be in line with the ones set by prepare() callback. Assume sample rate to always be equal to the one received in the last prepare() callback. All audio blocks except the last one are guaranteed to be equal to maxBlockSizeFrames set in prepare() callback.

Warning
Remember that the very last block of audio is almost always smaller than the block size set in prepare(), so be careful with buffer bounds.
Note
Note that this method does not have to be real-time safe, as all rendering always happens offline. Also note that, unlike real-time audio applications, this method is called on the same thread as all others like prepare().
Parameters
outputOutput audio block

Implements Signal< SampleType >.

Definition at line 135 of file hart_sine_sweep.hpp.

◆ reset()

template<typename SampleType >
void reset ( )
inlineoverridevirtual

Resets the Signal to initial state.

Ideally should be implemented in a way that audio produced after resetting is identical to audio produced after instantiation

Implements Signal< SampleType >.

Definition at line 176 of file hart_sine_sweep.hpp.

◆ represent()

template<typename SampleType >
void represent ( std::ostream &  stream) const
inlineoverridevirtual

Makes a text representation of this Signal for test failure outputs.

It is strongly encouraged to follow python's repr() conventions for returned text - basically, put something like "MyClass(value1, value2)" (with no quotes) into the stream whenever possible, or "<Readable info in angled brackets>" otherwise. Also, use built-in stream manipulators like dbPrecision wherever applicable. Use HART_DEFINE_GENERIC_REPRESENT() to get a basic implementation for this method.

Parameters
[out]streamOutput stream to write to

Implements Signal< SampleType >.

Definition at line 184 of file hart_sine_sweep.hpp.

◆ HART_SIGNAL_DEFINE_COPY_AND_MOVE()

template<typename SampleType >
HART_SIGNAL_DEFINE_COPY_AND_MOVE ( SineSweep< SampleType )

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