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

Dependents:   SoundWaveGeneratorTest SoundWaveGeneratorTest

Committer:
osmeest
Date:
Tue Feb 08 21:39:55 2011 +0000
Revision:
1:6864fd480178
Parent:
0:ed89ef772e92
Fix the Sine & Triangle wave computations which were very bad !

Who changed what in which revision?

UserRevisionLine numberNew contents of line
osmeest 0:ed89ef772e92 1 #include "snd_wave_generator/TriangleWave.h"
osmeest 0:ed89ef772e92 2
osmeest 0:ed89ef772e92 3 namespace snd_wave_generator {
osmeest 0:ed89ef772e92 4
osmeest 0:ed89ef772e92 5 void TriangleWave::prepare(std::size_t sampleRate)
osmeest 0:ed89ef772e92 6 {
osmeest 0:ed89ef772e92 7 std::size_t cycleLength = sampleRate / this->frequency;
osmeest 0:ed89ef772e92 8 this->buffer.resize(cycleLength);
osmeest 0:ed89ef772e92 9
osmeest 0:ed89ef772e92 10 std::size_t middle = cycleLength / 2;
osmeest 1:6864fd480178 11 std::size_t quarter = middle / 2;
osmeest 0:ed89ef772e92 12
osmeest 1:6864fd480178 13 float delta = 2.0 / (float(sampleRate) / float(this->frequency));
osmeest 0:ed89ef772e92 14 for(std::size_t i = 0; i < quarter; ++i) {
osmeest 0:ed89ef772e92 15 float dt = delta * i;
osmeest 0:ed89ef772e92 16 float posValue = 0.5 + dt;
osmeest 0:ed89ef772e92 17 float negValue = 0.5 - dt;
osmeest 0:ed89ef772e92 18 this->buffer.write(i, posValue);
osmeest 0:ed89ef772e92 19 this->buffer.write(middle - i, posValue);
osmeest 0:ed89ef772e92 20 this->buffer.write(middle + i, negValue);
osmeest 0:ed89ef772e92 21 this->buffer.write(cycleLength - i, negValue);
osmeest 0:ed89ef772e92 22 }
osmeest 0:ed89ef772e92 23
osmeest 1:6864fd480178 24 this->buffer.write(quarter, 1.0);
osmeest 0:ed89ef772e92 25 if (middle - quarter != quarter) {
osmeest 1:6864fd480178 26 this->buffer.write(middle - quarter, 1.0);
osmeest 0:ed89ef772e92 27 }
osmeest 1:6864fd480178 28 this->buffer.write(cycleLength - quarter, 0.0);
osmeest 0:ed89ef772e92 29 if (middle + quarter != cycleLength - quarter) {
osmeest 0:ed89ef772e92 30 this->buffer.write(middle + quarter, 0.0);
osmeest 0:ed89ef772e92 31 }
osmeest 0:ed89ef772e92 32 }
osmeest 0:ed89ef772e92 33
osmeest 0:ed89ef772e92 34 } // snd_wave_generator