Classes to produce a computed sound wave on the analog output.

Dependents:   SoundWaveGeneratorTest SoundWaveGeneratorTest

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TriangleWave.cpp Source File

TriangleWave.cpp

00001 #include "snd_wave_generator/TriangleWave.h"
00002 
00003 namespace snd_wave_generator {
00004 
00005 void TriangleWave::prepare(std::size_t sampleRate)
00006 {
00007     std::size_t cycleLength = sampleRate / this->frequency;
00008     this->buffer.resize(cycleLength);
00009 
00010     std::size_t middle = cycleLength / 2;
00011     std::size_t quarter = middle / 2;
00012     
00013     float delta = 2.0 / (float(sampleRate) / float(this->frequency));
00014     for(std::size_t i = 0; i < quarter; ++i) {
00015         float dt = delta * i;
00016         float posValue = 0.5 + dt;
00017         float negValue = 0.5 - dt;
00018         this->buffer.write(i, posValue);
00019         this->buffer.write(middle - i, posValue);
00020         this->buffer.write(middle + i, negValue);
00021         this->buffer.write(cycleLength - i, negValue);
00022     }
00023     
00024     this->buffer.write(quarter, 1.0);
00025     if (middle - quarter != quarter) {
00026         this->buffer.write(middle - quarter, 1.0);
00027     }
00028     this->buffer.write(cycleLength - quarter, 0.0);
00029     if (middle + quarter != cycleLength - quarter) {
00030         this->buffer.write(middle + quarter, 0.0);
00031     }
00032 }
00033 
00034 } // snd_wave_generator