Classes to produce a computed sound wave on the analog output.
Dependents: SoundWaveGeneratorTest SoundWaveGeneratorTest
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
Generated on Wed Jul 13 2022 01:41:32 by 1.7.2