diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-02-26 08:15:51 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-02-26 08:15:51 +0000 |
| commit | 1fadfdf60bb2c02086c2c9689ea44c73bed41571 (patch) | |
| tree | 2238c3bc011a545212e8a22f75d9af35cc300584 /src/lib/audio_analysis.cc | |
| parent | 36fdb78ea9973d1a797171d762802e707577c960 (diff) | |
Pretty dumb smoothing.
Diffstat (limited to 'src/lib/audio_analysis.cc')
| -rw-r--r-- | src/lib/audio_analysis.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc index b29ed1707..0cf08c5bd 100644 --- a/src/lib/audio_analysis.cc +++ b/src/lib/audio_analysis.cc @@ -31,6 +31,8 @@ using std::ofstream; using std::ifstream; using std::vector; using std::cout; +using std::max; +using std::list; AudioPoint::AudioPoint () { @@ -121,3 +123,29 @@ AudioAnalysis::write (string filename) f.close (); boost::filesystem::rename (tmp, filename); } + +float +AudioAnalysis::smooth (list<float> const & data, AudioPoint::Type t) +{ + float val; + + switch (t) { + case AudioPoint::PEAK: + /* XXX: fall-off, or something...? */ + val = -200; + for (list<float>::const_iterator i = data.begin(); i != data.end(); ++i) { + val = max (val, *i); + } + return val; + case AudioPoint::RMS: + val = 0; + for (list<float>::const_iterator i = data.begin(); i != data.end(); ++i) { + val += pow (*i, 2); + } + return sqrt (val / data.size()); + default: + assert (false); + } + + return 0; +} |
