LMMS
Loading...
Searching...
No Matches
RmsHelper.h
Go to the documentation of this file.
1/*
2 * RmsHelper.h - helper class for calculating RMS
3 *
4 * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
5 * Copyright (c) 2008 Tobias Doerffel <tobydox/at/users.sourceforge.net>
6 *
7 * This file is part of LMMS - https://lmms.io
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public
11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public
20 * License along with this program (see COPYING); if not, write to the
21 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301 USA.
23 *
24 */
25
26#ifndef LMMS_RMS_HELPER_H
27#define LMMS_RMS_HELPER_H
28
29#include "lmms_math.h"
30
31
32namespace lmms
33{
34
35
37{
38public:
39 RmsHelper(std::size_t size) :
41 {
42 setSize( size );
43 }
44 virtual ~RmsHelper()
45 {
46 if( m_buffer ) delete[] m_buffer;
47 }
48
49 void setSize(std::size_t size)
50 {
51 if( m_buffer )
52 {
53 if( m_size < size )
54 {
55 delete m_buffer;
56 m_buffer = new float[ size ];
57 m_size = size;
58 reset();
59 }
60 else
61 {
62 m_size = size;
63 reset();
64 }
65 }
66 else
67 {
68 m_buffer = new float[ size ];
69 m_size = size;
70 reset();
71 }
72 }
73
74 inline void reset()
75 {
76 m_sizef = 1.0f / (float) m_size;
77 m_pos = 0;
78 m_sum = 0.0f;
79 memset( m_buffer, 0, m_size * sizeof( float ) );
80 }
81
82 inline float update( const float in )
83 {
84 m_sum -= m_buffer[ m_pos ];
85 m_sum += m_buffer[ m_pos ] = in * in;
86 ++m_pos %= m_size;
87 return std::sqrt(m_sum * m_sizef);
88 }
89
90private:
91 float * m_buffer;
92 float m_sum;
93 std::size_t m_pos;
94 std::size_t m_size;
95 float m_sizef;
96};
97
98
99} // namespace lmms
100
101#endif // LMMS_RMS_HELPER_H
#define nullptr
Definition DistrhoDefines.h:75
virtual ~RmsHelper()
Definition RmsHelper.h:44
float update(const float in)
Definition RmsHelper.h:82
float m_sum
Definition RmsHelper.h:92
void setSize(std::size_t size)
Definition RmsHelper.h:49
RmsHelper(std::size_t size)
Definition RmsHelper.h:39
float m_sizef
Definition RmsHelper.h:95
std::size_t m_size
Definition RmsHelper.h:94
std::size_t m_pos
Definition RmsHelper.h:93
void reset()
Definition RmsHelper.h:74
float * m_buffer
Definition RmsHelper.h:91
float in
Definition lilv_test.c:1460
Definition AudioAlsa.cpp:35
ulg size
Definition extract.c:2350