kwave  18.07.70
VolumePlugin.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  VolumePlugin.cpp - Plugin for adjusting a signal's volume
3  -------------------
4  begin : Sun Oct 27 2002
5  copyright : (C) 2001 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "config.h"
19 #include <errno.h>
20 
21 #include <QStringList>
22 
23 #include <KLocalizedString>
24 
25 #include "libkwave/Connect.h"
29 #include "libkwave/PluginManager.h"
30 #include "libkwave/SignalManager.h"
31 #include "libkwave/modules/Mul.h"
33 
34 #include "libgui/OverViewCache.h"
35 
36 #include "VolumeDialog.h"
37 #include "VolumePlugin.h"
38 
39 KWAVE_PLUGIN(volume, VolumePlugin)
40 
41 //***************************************************************************
42 Kwave::VolumePlugin::VolumePlugin(QObject *parent, const QVariantList &args)
43  :Kwave::Plugin(parent, args), m_params(), m_factor(1.0)
44 {
45 }
46 
47 //***************************************************************************
49 {
50 }
51 
52 //***************************************************************************
54 {
55  bool ok;
56  QString param;
57 
58  // evaluate the parameter list
59  if (params.count() != 2) return -EINVAL;
60 
61  param = params[0];
62  m_factor = param.toFloat(&ok);
63  Q_ASSERT(ok);
64  if (!ok) return -EINVAL;
65 
66  param = params[1];
67  unsigned int mode = param.toUInt(&ok);
68  Q_ASSERT(ok);
69  if (!ok || (mode > 2)) return -EINVAL;
70 
71  // all parameters accepted
72  m_params = params;
73 
74  return 0;
75 }
76 
77 //***************************************************************************
78 QStringList *Kwave::VolumePlugin::setup(QStringList &previous_params)
79 {
80  // try to interprete the previous parameters
81  interpreteParameters(previous_params);
82 
83  // initialize the overview cache
85  QList<unsigned int> tracks;
86  sample_index_t first, last;
87  sample_index_t length = selection(&tracks, &first, &last, true);
88  Kwave::OverViewCache *overview_cache = new Kwave::OverViewCache(mgr,
89  first, length, tracks.isEmpty() ? Q_NULLPTR : &tracks);
90  Q_ASSERT(overview_cache);
91 
92  // create the setup dialog
93  Kwave::VolumeDialog *dialog =
94  new Kwave::VolumeDialog(parentWidget(), overview_cache);
95  if (!dialog) {
96  if (overview_cache) delete overview_cache;
97  return Q_NULLPTR;
98  }
99 
100  if (!m_params.isEmpty()) dialog->setParams(m_params);
101 
102  // execute the dialog
103  QStringList *list = new QStringList();
104  Q_ASSERT(list);
105  if (list && dialog->exec()) {
106  // user has pressed "OK"
107  *list = dialog->params();
108  } else {
109  // user pressed "Cancel"
110  if (list) delete list;
111  list = Q_NULLPTR;
112  }
113 
114  if (dialog) delete dialog;
115  if (overview_cache) delete overview_cache;
116 
117  return list;
118 }
119 
120 //***************************************************************************
121 void Kwave::VolumePlugin::run(QStringList params)
122 {
123  QList<unsigned int> tracks;
124  sample_index_t first, last;
125 
126  interpreteParameters(params);
127  if (!selection(&tracks, &first, &last, true) || tracks.isEmpty())
128  return;
129 
130  Kwave::UndoTransactionGuard undo_guard(*this, i18n("Volume"));
131 
132  // create all objects
134  signalManager(), selectedTracks(), first, last);
136  first, last);
137  Kwave::MultiTrackSource<Kwave::Mul, true> mul(tracks.count());
138 
139  // connect the progress dialog
140  connect(&source, SIGNAL(progress(qreal)),
141  this, SLOT(updateProgress(qreal)),
142  Qt::BlockingQueuedConnection);
143 
144  // connect them
146  source, SIGNAL(output(Kwave::SampleArray)),
147  mul, SLOT(input_a(Kwave::SampleArray)));
148 
149  mul.setAttribute(SLOT(set_b(QVariant)),
150  QVariant(m_factor));
152  mul, SIGNAL(output(Kwave::SampleArray)),
153  sink, SLOT(input(Kwave::SampleArray)));
154 
155  // transport the samples
156  qDebug("VolumePlugin: filter started...");
157  while (!shouldStop() && !source.done()) {
158  source.goOn();
159  mul.goOn();
160  }
161  qDebug("VolumePlugin: filter done.");
162 }
163 
164 //***************************************************************************
165 #include "VolumePlugin.moc"
166 //***************************************************************************
167 //***************************************************************************
Definition: App.h:33
virtual bool done() const Q_DECL_OVERRIDE
virtual QStringList * setup(QStringList &previous_params) Q_DECL_OVERRIDE
QWidget * parentWidget() const
Definition: Plugin.cpp:450
Kwave::SignalManager & signalManager()
Definition: Plugin.cpp:444
virtual void run(QStringList params) Q_DECL_OVERRIDE
void setParams(QStringList &params)
QStringList m_params
Definition: VolumePlugin.h:67
quint64 sample_index_t
Definition: Sample.h:28
Kwave::PluginManager & manager() const
Definition: Plugin.cpp:437
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
Definition: Connect.cpp:48
Kwave::SignalManager & signalManager()
virtual void goOn() Q_DECL_OVERRIDE
#define KWAVE_PLUGIN(name, class)
Definition: Plugin.h:54
virtual void updateProgress(qreal progress)
Definition: Plugin.cpp:260
virtual const QList< unsigned int > selectedTracks()
Definition: Plugin.cpp:474
int interpreteParameters(QStringList &params)
bool shouldStop() const
Definition: Plugin.h:120
virtual ~VolumePlugin() Q_DECL_OVERRIDE
QStringList params()
virtual sample_index_t selection(QList< unsigned int > *tracks=Q_NULLPTR, sample_index_t *left=Q_NULLPTR, sample_index_t *right=Q_NULLPTR, bool expand_if_empty=false)
Definition: Plugin.cpp:480