Olivier Smeesters
/
DtmfKit
A DTMF sequence editor and player for HAM radio equipment command & control.
mbed_dtmf_generator.cpp
- Committer:
- osmeest
- Date:
- 2011-03-07
- Revision:
- 0:1324e7d9d471
File content as of revision 0:1324e7d9d471:
#include "mbed_dtmf_generator.hpp" #include "snd_wave_generator/SineWave.h" #include "snd_wave_generator/WaveCombo.h" #include <iostream> #include <sstream> #include <string> using namespace snd_wave_generator; MbedDtmfGenerator::MbedDtmfGenerator() : generator(16000) { std::cout << "Init Wave" << "\r" << std::endl; makeWaves(); } void MbedDtmfGenerator::makeKeyWave(int pos, int row, int col) { std::cout << "Init Key Wave #" << pos << " R" << row << "C" << col << "\r" << std::endl; std::auto_ptr<WaveCombo> wave(new WaveCombo()); wave->add(colWaves[col].get()); wave->add(rowWaves[row].get()); waves[pos] = wave; } void MbedDtmfGenerator::makeWaves() { static int colFreq[4] = { 1209, 1336, 1477, 1633 }; static int rowFreq[4] = { 697, 770, 852, 941 }; for(int i = 0; i < 4; ++i) { std::cout << "Init ColWave " << i << " hz=" << colFreq[i] << "\r" << std::endl; colWaves[i].reset(new SineWave(colFreq[i])); std::cout << "Init RowWave " << i << " hz=" << rowFreq[i] << "\r" << std::endl; rowWaves[i].reset(new SineWave(rowFreq[i])); } makeKeyWave(0, 3, 1); for(int row = 0; row < 3; ++row) { for(int col = 0; col < 3; ++col) { makeKeyWave(row * 3 + col + 1, row, col); } } for(int ltr=0; ltr < 4; ++ltr) { makeKeyWave(ltr+10, ltr, 3); } makeKeyWave(14, 3, 0); makeKeyWave(15, 3, 2); } Wave * MbedDtmfGenerator::getWaveFor(char ch) { int index = -1; if (ch >= '0' && ch <= '9') { index = ch - '0'; } else if (ch >= 'A' && ch <= 'D') { index = ch - 'A' + 10; } else if (ch == '*') { index = 14; } else if (ch == '#') { index = 15; } std::cout << "Wave for '" << ch << "' => " << index << "\r" << std::endl; return this->waves[index].get(); } void MbedDtmfGenerator::play(char ch) { Wave *wave = getWaveFor(ch); std::cout << "Play Wave '" << ch << "'" << "\r" << std::endl; if (wave) { generator.play(getWaveFor(ch)); } else { std::cout << "No wave !\r" << std::endl; } } void MbedDtmfGenerator::stop() { std::cout << "Stop Wave" << "\r" << std::endl; generator.stop(); }