27#ifndef ASYNC_AUDIO_GENERATOR_INCLUDED
28#define ASYNC_AUDIO_GENERATOR_INCLUDED
136 : m_arg(0.0f), m_arginc(0.0f), m_peak(0.0f),
137 m_sample_rate(INTERNAL_SAMPLE_RATE), m_waveform(wf), m_power(0.0f),
166 m_arginc = 2.0f * M_PI * tone_fq / m_sample_rate;
167 assert(m_arginc <= M_PI);
179 m_power = powf(10.0f, pwr_db / 10.0f) / 2.0f;
225 static const int BLOCK_SIZE = 128;
247 m_peak = sqrt(2.0f * m_power);
250 m_peak = sqrt(m_power);
253 m_peak = sqrt(3.0f * m_power);
264 void writeSamples(
void)
269 float buf[BLOCK_SIZE];
271 for (
int i=0; i<BLOCK_SIZE; ++i)
276 buf[i] = m_peak * sinf(arg);
279 buf[i] = (arg < M_PI) ? m_peak : -m_peak;
282 if (arg < M_PI / 2.0f)
284 buf[i] = m_peak * arg * 2.0f / M_PI;
288 buf[i] = m_peak * (2.0f - 2.0 * arg / M_PI);
290 else if (arg < 3.0f * M_PI / 2.0f)
292 buf[i] = -m_peak * (2.0f * arg / M_PI - 2.0f);
296 buf[i] = -m_peak * (4.0f - 2.0f * arg / M_PI);
304 if (arg >= 2.0f * M_PI)
312 m_arg += written * m_arginc;
313 while (m_arg >= 2.0f * M_PI)
315 m_arg -= 2.0f * M_PI;
318 }
while (m_enabled && (written > 0));
This file contains the base class for an audio source.
A class for generating periodic audio signals.
void enable(bool enable)
Enable or disable the generator.
void allSamplesFlushed(void)
The registered sink has flushed all samples.
void setPower(float pwr_db)
Set the power of the generated signal.
void setFq(float tone_fq)
Set the audio frequency.
Waveform
The type of waveform to generate.
@ TRIANGLE
Triangular wave.
void resumeOutput(void)
Resume audio output to the sink.
~AudioGenerator(void)
Destructor.
void setWaveform(Waveform wf)
Set which waveform to use.
AudioGenerator(Waveform wf=SIN)
Contructor.
The base class for an audio source.
void sinkFlushSamples(void)
int sinkWriteSamples(const float *samples, int len)
Namespace for the asynchronous programming classes.