Classes to produce a computed sound wave on the analog output.
Dependents: SoundWaveGeneratorTest SoundWaveGeneratorTest
SineWave.cpp
00001 #include "snd_wave_generator/SineWave.h" 00002 #include <cmath> 00003 00004 namespace snd_wave_generator { 00005 00006 void SineWave::prepare(std::size_t sampleRate) 00007 { 00008 std::size_t cycleLength = sampleRate / this->frequency; 00009 this->buffer.resize(cycleLength); 00010 00011 std::size_t middle = cycleLength / 2; 00012 std::size_t quarter = middle / 2; 00013 00014 float delta = 6.28 / (float(sampleRate) / float(this->frequency)); 00015 for(std::size_t i = 0; i < quarter; ++i) { 00016 float dt = delta * i; 00017 float dv = std::sin(dt) / 2.0; 00018 float posValue = 0.5 + dv; 00019 float negValue = 0.5 - dv; 00020 this->buffer.write(i, posValue); 00021 this->buffer.write(middle - i, posValue); 00022 this->buffer.write(middle + i, negValue); 00023 this->buffer.write(cycleLength - i, negValue); 00024 } 00025 00026 this->buffer.write(quarter, 1.0); 00027 if (middle - quarter != quarter) { 00028 this->buffer.write(middle - quarter, 1.0); 00029 } 00030 this->buffer.write(cycleLength - quarter, 0.0); 00031 if (middle + quarter != cycleLength - quarter) { 00032 this->buffer.write(middle + quarter, 0.0); 00033 } 00034 } 00035 00036 } // snd_wave_generator
Generated on Wed Jul 13 2022 01:41:32 by 1.7.2