kwave  18.07.70
Kwave::ZeroPlugin Class Reference

#include <ZeroPlugin.h>

Inheritance diagram for Kwave::ZeroPlugin:
Inheritance graph
Collaboration diagram for Kwave::ZeroPlugin:
Collaboration graph

Public Member Functions

 ZeroPlugin (QObject *parent, const QVariantList &args)
 
virtual ~ZeroPlugin () Q_DECL_OVERRIDE
 
virtual void run (QStringList params) Q_DECL_OVERRIDE
 
- Public Member Functions inherited from Kwave::Plugin
 Plugin (QObject *parent, const QVariantList &args)
 
virtual ~Plugin () Q_DECL_OVERRIDE
 
virtual QString name () const
 
virtual QString description () const
 
virtual QString progressText ()
 
virtual bool canClose () const
 
bool isRunning () const
 
bool shouldStop () const
 
virtual void load (QStringList &params)
 
virtual void unload ()
 
virtual QStringList * setup (QStringList &previous_params)
 
virtual int start (QStringList &params)
 
virtual int stop ()
 
Kwave::PluginManagermanager () const
 
Kwave::SignalManagersignalManager ()
 
QWidget * parentWidget () const
 
QString signalName ()
 
virtual sample_index_t signalLength ()
 
virtual double signalRate ()
 
virtual const QList< unsigned int > selectedTracks ()
 
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)
 
virtual void selectRange (sample_index_t offset, sample_index_t length)
 
virtual void migrateToActiveContext ()
 
- Public Member Functions inherited from Kwave::Runnable
virtual ~Runnable ()
 

Private Attributes

Kwave::SampleArray m_zeroes
 

Additional Inherited Members

- Public Slots inherited from Kwave::Plugin
virtual void setProgressDialogEnabled (bool enable)
 
virtual void updateProgress (qreal progress)
 
virtual void cancel ()
 
virtual void close ()
 
void release ()
 
- Signals inherited from Kwave::Plugin
void sigRunning (Kwave::Plugin *plugin)
 
void sigDone (Kwave::Plugin *plugin)
 
void sigClosed (Kwave::Plugin *p)
 
void sigCommand (const QString &command)
 
void setProgressText (const QString &text)
 
- Protected Member Functions inherited from Kwave::Plugin
int execute (QStringList &params)
 
void emitCommand (const QString &command)
 
void use ()
 
void setPluginManager (Kwave::PluginManager *new_plugin_manager)
 
virtual void run_wrapper (const QVariant &params) Q_DECL_OVERRIDE
 

Detailed Description

This is a very simple plugin that blanks the currently selected range of samples with zeroes.

Definition at line 37 of file ZeroPlugin.h.

Constructor & Destructor Documentation

◆ ZeroPlugin()

Kwave::ZeroPlugin::ZeroPlugin ( QObject *  parent,
const QVariantList &  args 
)

Constructor

Parameters
parentreference to our plugin manager
argsargument list [unused]

Definition at line 43 of file ZeroPlugin.cpp.

44  :Kwave::Plugin(parent, args), m_zeroes()
45 {
46 }
Kwave::SampleArray m_zeroes
Definition: ZeroPlugin.h:62

◆ ~ZeroPlugin()

Kwave::ZeroPlugin::~ZeroPlugin ( )
virtual

Destructor

Definition at line 49 of file ZeroPlugin.cpp.

50 {
51 }

Member Function Documentation

◆ run()

void Kwave::ZeroPlugin::run ( QStringList  params)
virtual

Fills the selected area with zeroes

Parameters
paramslist of strings with parameters

Reimplemented from Kwave::Plugin.

Definition at line 54 of file ZeroPlugin.cpp.

References Kwave::SelectTimeWidget::byPercents, Kwave::SelectTimeWidget::bySamples, Kwave::SelectTimeWidget::byTime, Kwave::connect(), Kwave::SampleArray::fill(), Kwave::Insert, m_zeroes, Kwave::Overwrite, Kwave::SampleArray::resize(), Kwave::Plugin::selection(), Kwave::Plugin::shouldStop(), Kwave::Plugin::signalLength(), Kwave::Plugin::signalManager(), Kwave::Plugin::signalRate(), Kwave::SampleArray::size(), Kwave::SelectTimeWidget::timeToSamples(), Kwave::toUint(), Kwave::MultiTrackSink< SINK, INITIALIZE >::tracks(), Kwave::Plugin::updateProgress(), and ZERO_COUNT.

55 {
56  QList<unsigned int> tracks;
57  sample_index_t first = 0;
58  sample_index_t last = 0;
59  bool succeeded = true;
60 
61  Kwave::UndoTransactionGuard undo_guard(*this, i18n("Silence"));
62 
63  Kwave::MultiTrackWriter *writers = Q_NULLPTR;
64 
65  /*
66  * new mode: insert a range filled with silence:
67  * -> usage: zero(<mode>, <range>)
68  */
69  if (params.count() == 2) {
70  // get the current selection
71  selection(&tracks, &first, &last, false);
72 
73  // mode for the time (like in selectrange plugin)
74  bool ok = true;
75  int mode = params[0].toInt(&ok);
76  Q_ASSERT(ok);
77  if (!ok) return;
78  Q_ASSERT(
79  (mode == static_cast<int>(Kwave::SelectTimeWidget::byTime)) ||
80  (mode == static_cast<int>(Kwave::SelectTimeWidget::bySamples)) ||
81  (mode == static_cast<int>(Kwave::SelectTimeWidget::byPercents))
82  );
83  if ((mode != static_cast<int>(Kwave::SelectTimeWidget::byTime)) &&
84  (mode != static_cast<int>(Kwave::SelectTimeWidget::bySamples)) &&
85  (mode != static_cast<int>(Kwave::SelectTimeWidget::byPercents)))
86  {
87  return;
88  }
89 
90  // length of the range of zeroes to insert
91  unsigned int time = params[1].toUInt(&ok);
92  Q_ASSERT(ok);
93  if (!ok) return;
94 
95  // convert from time to samples
97  static_cast<Kwave::SelectTimeWidget::Mode>(mode),
98  time, signalRate(), signalLength());
99 
100  // some sanity check
101  Q_ASSERT(length);
102  Q_ASSERT(!tracks.isEmpty());
103  if (!length || tracks.isEmpty()) return; // nothing to do
104 
105  last = first + length - 1;
106  writers = new(std::nothrow) Kwave::MultiTrackWriter(signalManager(),
107  tracks, Kwave::Insert, first, last);
108  } else {
109  writers = new(std::nothrow) Kwave::MultiTrackWriter(signalManager(),
111  }
112 
113  if (!writers) return; // out-of-memory
114 
115  // break if aborted
116  if (!writers->tracks()) return;
117 
118  // connect the progress dialog
119  connect(writers, SIGNAL(progress(qreal)),
120  this, SLOT(updateProgress(qreal)),
121  Qt::BlockingQueuedConnection);
122 
123  first = (*writers)[0]->first();
124  last = (*writers)[0]->last();
125  unsigned int count = writers->tracks();
126 
127  // get the buffer with zeroes for faster filling
128  if (m_zeroes.size() != ZERO_COUNT) {
129  succeeded &= m_zeroes.resize(ZERO_COUNT);
130  Q_ASSERT(succeeded);
131  m_zeroes.fill(0);
132  }
133  Q_ASSERT(m_zeroes.size() == ZERO_COUNT);
134 
135  // loop over the sample range
136  while ((first <= last) && !shouldStop() && succeeded) {
137  sample_index_t rest = last - first + 1;
138  if (rest < m_zeroes.size()) {
139  succeeded &= m_zeroes.resize(Kwave::toUint(rest));
140  Q_ASSERT(succeeded);
141  if (!succeeded) break;
142  }
143 
144  // loop over all writers
145  unsigned int w;
146  for (w = 0; w < count; w++) {
147  *((*writers)[w]) << m_zeroes;
148  }
149 
150  first += m_zeroes.size();
151  }
152 
153  delete writers;
154 }
virtual unsigned int tracks() const Q_DECL_OVERRIDE
Kwave::SignalManager & signalManager()
Definition: Plugin.cpp:444
quint64 sample_index_t
Definition: Sample.h:28
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
Definition: Connect.cpp:48
static sample_index_t timeToSamples(Mode mode, quint64 time, double rate, sample_index_t length)
#define ZERO_COUNT
Definition: ZeroPlugin.cpp:40
virtual sample_index_t signalLength()
Definition: Plugin.cpp:462
virtual double signalRate()
Definition: Plugin.cpp:468
void fill(sample_t value)
Definition: SampleArray.cpp:68
unsigned int size() const
virtual void updateProgress(qreal progress)
Definition: Plugin.cpp:260
unsigned int toUint(T x)
Definition: Utils.h:109
bool resize(unsigned int size) Q_REQUIRED_RESULT
bool shouldStop() const
Definition: Plugin.h:120
Kwave::SampleArray m_zeroes
Definition: ZeroPlugin.h:62
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
Here is the call graph for this function:

Member Data Documentation

◆ m_zeroes

Kwave::SampleArray Kwave::ZeroPlugin::m_zeroes
private

use an array with zeroes for faster filling

Definition at line 62 of file ZeroPlugin.h.

Referenced by run().


The documentation for this class was generated from the following files: