summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/analyse_audio_job.cc3
-rw-r--r--src/lib/audio_analysis.cc28
-rw-r--r--src/lib/audio_analysis.h2
3 files changed, 31 insertions, 2 deletions
diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc
index 588e9fc3d..bcabb6c91 100644
--- a/src/lib/analyse_audio_job.cc
+++ b/src/lib/analyse_audio_job.cc
@@ -95,8 +95,7 @@ AnalyseAudioJob::audio (shared_ptr<AudioBuffers> b)
_current[j][AudioPoint::PEAK] = max (_current[j][AudioPoint::PEAK], fabsf (s));
if ((_done % _samples_per_point) == 0) {
- _current[j][AudioPoint::RMS] = 20 * log10 (sqrt (_current[j][AudioPoint::RMS] / _samples_per_point));
- _current[j][AudioPoint::PEAK] = 20 * log10 (_current[j][AudioPoint::PEAK]);
+ _current[j][AudioPoint::RMS] = sqrt (_current[j][AudioPoint::RMS] / _samples_per_point);
_analysis->add_point (j, _current[j]);
_current[j] = AudioPoint ();
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;
+}
diff --git a/src/lib/audio_analysis.h b/src/lib/audio_analysis.h
index c2d8db876..a8cfbdeca 100644
--- a/src/lib/audio_analysis.h
+++ b/src/lib/audio_analysis.h
@@ -22,6 +22,7 @@
#include <iostream>
#include <vector>
+#include <list>
class AudioPoint
{
@@ -59,6 +60,7 @@ public:
void write (std::string);
+ static float smooth (std::list<float> const &, AudioPoint::Type);
private:
std::vector<std::vector<AudioPoint> > _data;