File: NormalizePlugin.h

package info (click to toggle)
kwave 25.04.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,272 kB
  • sloc: cpp: 56,173; xml: 817; perl: 688; sh: 57; makefile: 11
file content (96 lines) | stat: -rw-r--r-- 3,377 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/***************************************************************************
      NormalizePlugin.h  -  plugin for level normalizing
                             -------------------
    begin                : Fri May 01 2009
    copyright            : (C) 2009 by Thomas Eschenbacher
    email                : Thomas.Eschenbacher@gmx.de

    original algorithms  : (C) 1999-2005 Chris Vaill <chrisvaill at gmail>
                           taken from "normalize-0.7.7"
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef NORMALIZE_PLUGIN_H
#define NORMALIZE_PLUGIN_H

#include "config.h"

#include <QString>
#include <QStringList>
#include <QVector>

#include "libkwave/Plugin.h"
#include "libkwave/Sample.h"
#include "libkwave/SampleArray.h"

namespace Kwave
{
    class MultiTrackReader;
    class SampleReader;

    /**
     * This is a two-pass plugin that determines the average volume level
     * of a signal and then calls the volume plugin to adjust the volume.
     */
    class NormalizePlugin: public Kwave::Plugin
    {
        Q_OBJECT

    public:

        /**
         * Constructor
         * @param parent reference to our plugin manager
         * @param args argument list [unused]
         */
        NormalizePlugin(QObject *parent, const QVariantList &args);

        /** Destructor */
        ~NormalizePlugin() override;

        /**
         * normalizes the volume
         * @param params list of strings with parameters
         */
        void run(QStringList params) override;

    private:
        typedef struct {
            QVector<double> fifo; /**< FIFO for power values */
            unsigned int    wp;   /**< FIFO write pointer */
            unsigned int    n;    /**< number of elements in the FIFO */
            double          sum;  /**< sum of queued power values */
            double          max;  /**< maximum power value */
        } Average;

        /**
         * get the maximum power level of the input
         */
        double getMaxPower(Kwave::MultiTrackReader &source);

        /**
         * calculate the maximum power of one track
         *
         * @param reader reference to a SampleReader to read from
         * @param average reference to smoothing information
         * @param window_size length of the sliding window for volume detection
         */
        void getMaxPowerOfTrack(Kwave::SampleReader *reader,
                                Kwave::NormalizePlugin::Average *average,
                                unsigned int window_size);

    };
}

#endif /* NORMALIZE_PLUGIN_H */

//***************************************************************************
//***************************************************************************