lmms
Cross-platform music production software
Toggle main menu visibility
Loading...
Searching...
No Matches
include
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
32
namespace
lmms
33
{
34
35
36
class
RmsHelper
37
{
38
public
:
39
RmsHelper
(std::size_t size) :
40
m_buffer
( nullptr )
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
90
private
:
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
lmms::RmsHelper::~RmsHelper
virtual ~RmsHelper()
Definition
RmsHelper.h:44
lmms::RmsHelper::update
float update(const float in)
Definition
RmsHelper.h:82
lmms::RmsHelper::m_sum
float m_sum
Definition
RmsHelper.h:92
lmms::RmsHelper::setSize
void setSize(std::size_t size)
Definition
RmsHelper.h:49
lmms::RmsHelper::RmsHelper
RmsHelper(std::size_t size)
Definition
RmsHelper.h:39
lmms::RmsHelper::m_sizef
float m_sizef
Definition
RmsHelper.h:95
lmms::RmsHelper::m_size
std::size_t m_size
Definition
RmsHelper.h:94
lmms::RmsHelper::m_pos
std::size_t m_pos
Definition
RmsHelper.h:93
lmms::RmsHelper::reset
void reset()
Definition
RmsHelper.h:74
lmms::RmsHelper::m_buffer
float * m_buffer
Definition
RmsHelper.h:91
lmms_math.h
lmms
Definition
RemotePluginBase.cpp:34
Generated on
for lmms by
1.18.0