Async
0.18.0
|
00001 00028 #ifndef AUDIO_DEBUGGER_INCLUDED 00029 #define AUDIO_DEBUGGER_INCLUDED 00030 00031 00032 /**************************************************************************** 00033 * 00034 * System Includes 00035 * 00036 ****************************************************************************/ 00037 00038 #include <sys/time.h> 00039 #include <iostream> 00040 #include <string> 00041 #include <stdint.h> 00042 00043 00044 /**************************************************************************** 00045 * 00046 * Project Includes 00047 * 00048 ****************************************************************************/ 00049 00050 #include <AsyncAudioSink.h> 00051 #include <AsyncAudioSource.h> 00052 00053 00054 /**************************************************************************** 00055 * 00056 * Local Includes 00057 * 00058 ****************************************************************************/ 00059 00060 00061 00062 /**************************************************************************** 00063 * 00064 * Forward declarations 00065 * 00066 ****************************************************************************/ 00067 00068 00069 00070 /**************************************************************************** 00071 * 00072 * Namespace 00073 * 00074 ****************************************************************************/ 00075 00076 namespace Async 00077 { 00078 00079 00080 /**************************************************************************** 00081 * 00082 * Forward declarations of classes inside of the declared namespace 00083 * 00084 ****************************************************************************/ 00085 00086 00087 00088 /**************************************************************************** 00089 * 00090 * Defines & typedefs 00091 * 00092 ****************************************************************************/ 00093 00094 00095 00096 /**************************************************************************** 00097 * 00098 * Exported Global Variables 00099 * 00100 ****************************************************************************/ 00101 00102 00103 00104 /**************************************************************************** 00105 * 00106 * Class definitions 00107 * 00108 ****************************************************************************/ 00109 00119 class AudioDebugger : public AudioSink, public AudioSource 00120 { 00121 public: 00125 AudioDebugger(Async::AudioSource *src=0) 00126 : name("AudioDebugger"), sample_count(0) 00127 { 00128 gettimeofday(&start_time, 0); 00129 if (src != 0) 00130 { 00131 Async::AudioSink *sink = src->sink(); 00132 if (sink != 0) 00133 { 00134 src->unregisterSink(); 00135 registerSink(sink); 00136 } 00137 registerSource(src); 00138 } 00139 } 00140 00144 virtual ~AudioDebugger(void) {} 00145 00150 void setName(std::string debug_name) { name = debug_name; } 00151 00163 virtual int writeSamples(const float *samples, int count) 00164 { 00165 int ret = sinkWriteSamples(samples, count); 00166 sample_count += ret; 00167 00168 struct timeval time, diff; 00169 gettimeofday(&time, 0); 00170 00171 timersub(&time, &start_time, &diff); 00172 uint64_t diff_ms = diff.tv_sec * 1000 + diff.tv_usec / 1000; 00173 00174 std::cout << name << "::writeSamples: count=" << count 00175 << " ret=" << ret << " sample_rate="; 00176 if (diff_ms > 0) 00177 { 00178 std::cout << sample_count * 1000 / diff_ms << std::endl; 00179 } 00180 else 00181 { 00182 std::cout << "inf\n"; 00183 } 00184 return ret; 00185 } 00186 00195 virtual void flushSamples(void) 00196 { 00197 std::cout << name << "::flushSamples\n"; 00198 sinkFlushSamples(); 00199 } 00200 00208 virtual void resumeOutput(void) 00209 { 00210 std::cout << name << "::resumeOutput\n"; 00211 sourceResumeOutput(); 00212 } 00213 00221 virtual void allSamplesFlushed(void) 00222 { 00223 std::cout << name << "::allSamplesFlushed\n"; 00224 sourceAllSamplesFlushed(); 00225 } 00226 00227 protected: 00228 00229 private: 00230 std::string name; 00231 struct timeval start_time; 00232 uint64_t sample_count; 00233 00234 AudioDebugger(const AudioDebugger&); 00235 AudioDebugger& operator=(const AudioDebugger&); 00236 00237 }; /* AudioDebugger */ 00238 00239 00240 } /* namespace */ 00241 00242 #endif /* AUDIO_DEBUGGER_INCLUDED */ 00243 00244 00245 00246 /* 00247 * This file has not been truncated 00248 */ 00249