HART  0.2.0
High level Audio Regression and Testing
Loading...
Searching...
No Matches
hart_impulse.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "signals/hart_signal.hpp"
4#include "hart_utils.hpp"
5
6namespace hart
7{
8
9/// @brief Produces a {1, 0, 0, 0, ...} sequence
10/// @ingroup Signals
11template<typename SampleType>
12class Impulse:
13 public Signal<SampleType, Impulse<SampleType>>
14{
15public:
16 /// @brief Creates an impulse signal instance
17 Impulse() = default;
18
19 void prepare (double /* sampleRateHz */, size_t /* numOutputChannels */, size_t /*maxBlockSizeFrames*/) override {}
20
21 void renderNextBlock (AudioBuffer<SampleType>& output) override
22 {
23 if (output.getNumChannels() == 0 || output.getNumFrames() == 0)
24 return;
25
26 output.clear();
27
28 if (m_impulseWasAlreadyRendered)
29 return;
30
31 for (size_t channel = 0; channel < output.getNumChannels(); ++channel)
32 output[channel][0] = (SampleType) 1;
33
34 m_impulseWasAlreadyRendered = true;
35 }
36
37 void reset() override
38 {
39 m_impulseWasAlreadyRendered = false;
40 }
41
43
44private:
45 bool m_impulseWasAlreadyRendered = false;
46};
47
49
50} // namespace hart
Container for audio data.
Produces a {1, 0, 0, 0, ...} sequence.
void renderNextBlock(AudioBuffer< SampleType > &output) override
Renders next block audio for the signal.
Impulse()=default
Creates an impulse signal instance.
void prepare(double, size_t, size_t) override
Prepare the signal for rendering.
void reset() override
Resets the Signal to initial state.
Base class for signals.
#define HART_DEFINE_GENERIC_REPRESENT(ClassName)
Defines a basic string representation of your class.
#define HART_SIGNAL_DECLARE_ALIASES_FOR(ClassName)