RTP Audio System
2.0.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### Spectrum Analyzer #### 00007 // #### #### 00008 // #### Copyright (C) 1999-2012 by Thomas Dreibholz #### 00009 // #### #### 00010 // #### Contact: #### 00011 // #### EMail: dreibh@iem.uni-due.de #### 00012 // #### WWW: https://www.nntb.no/~dreibh/rtpaudio #### 00013 // #### #### 00014 // #### ---------------------------------------------------------------- #### 00015 // #### #### 00016 // #### This program is free software: you can redistribute it and/or #### 00017 // #### modify it under the terms of the GNU General Public License as #### 00018 // #### published by the Free Software Foundation, either version 3 of #### 00019 // #### the License, or (at your option) any later version. #### 00020 // #### #### 00021 // #### This program is distributed in the hope that it will be useful, #### 00022 // #### but WITHOUT ANY WARRANTY; without even the implied warranty of #### 00023 // #### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #### 00024 // #### GNU General Public License for more details. #### 00025 // #### #### 00026 // #### You should have received a copy of the GNU General Public #### 00027 // #### License along with this program. If not, see #### 00028 // #### <http://www.gnu.org/licenses/>. #### 00029 // #### #### 00030 // ########################################################################## 00031 // $Id: spectrumanalyzer.h 1286 2011-12-18 13:43:16Z dreibh $ 00032 00033 00034 #ifndef SPECTRUMANALYZER_H 00035 #define SPECTRUMANALYZER_H 00036 00037 00038 #include "tdsystem.h" 00039 #include "audiowriterinterface.h" 00040 #include "synchronizable.h" 00041 #include "fft.h" 00042 00043 00051 class SpectrumAnalyzer : virtual public AudioWriterInterface, 00052 public Synchronizable 00053 { 00054 // ====== Constructor/Destructor ========================================= 00055 public: 00059 SpectrumAnalyzer(); 00060 00064 ~SpectrumAnalyzer(); 00065 00066 00067 // ====== AudioQualityInterface implementation =========================== 00073 card16 getSamplingRate() const; 00074 00080 card8 getBits() const; 00081 00087 card8 getChannels() const; 00088 00089 00095 card16 getByteOrder() const; 00096 00097 00103 cardinal getBytesPerSecond() const; 00104 00110 cardinal getBitsPerSample() const; 00111 00112 00118 card16 setSamplingRate(const card16 samplingRate); 00119 00125 card8 setBits(const card8 bits); 00126 00132 card8 setChannels(const card8 channels); 00133 00134 00140 card16 setByteOrder(const card16 byteOrder); 00141 00142 00143 // ====== AudioInterface implementation ================================== 00149 bool ready() const; 00150 00156 void sync(); 00157 00163 bool write(const void* data, const size_t length); 00164 00165 00166 // ====== Spectrum analyzer functions ==================================== 00175 bool getSpectrum(cardinal* left, cardinal* right, const cardinal bars); 00176 00177 00178 // ====== Internal data ================================================== 00179 private: 00180 void doFourierTransformation(card16* data, cardinal* output, cardinal bars); 00181 00182 00183 static const cardinal FFTPoints = 256; 00184 FastFourierTransformation* FFT; 00185 cardinal InputBufferPos; 00186 char InputBuffer[4 * FFTPoints]; 00187 00188 00189 card16 AudioSamplingRate; 00190 card8 AudioBits; 00191 card8 AudioChannels; 00192 card16 AudioByteOrder; 00193 }; 00194 00195 00196 #endif