summaryrefslogtreecommitdiff
path: root/src/lib/audio_analysis.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-02-26 08:15:51 +0000
committerCarl Hetherington <cth@carlh.net>2013-02-26 08:15:51 +0000
commit1fadfdf60bb2c02086c2c9689ea44c73bed41571 (patch)
tree2238c3bc011a545212e8a22f75d9af35cc300584 /src/lib/audio_analysis.cc
parent36fdb78ea9973d1a797171d762802e707577c960 (diff)
Pretty dumb smoothing.
Diffstat (limited to 'src/lib/audio_analysis.cc')
-rw-r--r--src/lib/audio_analysis.cc28
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;
+}