kwave  18.07.70
MultiWriter.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  MultiWriter.cpp - writer for multi-track processing
3  -------------------
4  begin : Sun Aug 23 2009
5  copyright : (C) 2009 by Thomas Eschenbacher
6  email : Thomas Eschenbacher <thomas.eschenbacher@gmx.de>
7 
8  ***************************************************************************/
9 
10 /***************************************************************************
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * *
17  ***************************************************************************/
18 
19 #include "config.h"
20 
21 #include "libkwave/MultiWriter.h"
22 
23 //***************************************************************************
25  :Kwave::MultiTrackSink<Kwave::Writer, false>(0, Q_NULLPTR),
26  m_canceled(false)
27 {
28 }
29 
30 //***************************************************************************
32 {
33  clear();
34 }
35 
36 //***************************************************************************
37 bool Kwave::MultiWriter::insert(unsigned int track, Kwave::Writer *writer)
38 {
39  if (writer) {
40  connect(
41  writer, SIGNAL(proceeded()),
42  this, SLOT(proceeded()),
43  Qt::DirectConnection
44  );
45  }
47 }
48 
49 //***************************************************************************
51 {
52  bool overwrite = tracks() && at(0) && (at(0)->mode() == Kwave::Overwrite);
53  if (overwrite) {
54  qreal sum = 0;
55  qreal total = 0;
56  unsigned int track;
57  const unsigned int tracks = this->tracks();
58  for (track = 0; track < tracks; ++track) {
59  const Kwave::Writer *w = at(track);
60  if (w) {
61  sum += w->position() - w->first();
62  total += w->last() - w->first();
63  }
64  }
65  emit progress(qreal(100.0) * sum / total);
66  } else {
67  quint64 sum = 0;
68  unsigned int track;
69  const unsigned int tracks = this->tracks();
70  for (track = 0; track < tracks; ++track) {
71  const Kwave::Writer *w = at(track);
72  if (w) sum += w->position() - w->first();
73  }
74  emit written(sum);
75  }
76 }
77 
78 //***************************************************************************
80 {
81  m_canceled = true;
82 }
83 
84 //***************************************************************************
86 {
87  sample_index_t last = 0;
88  const unsigned int tracks = this->tracks();
89  for (unsigned int track = 0; track < tracks; ++track) {
90  const Kwave::Writer *w = at(track);
91  if (w && w->last() > last) last = w->last();
92  }
93  return last;
94 }
95 
96 //***************************************************************************
98 {
100 }
101 
102 //***************************************************************************
104 {
105  const unsigned int tracks = this->tracks();
106  for (unsigned int track = 0; track < tracks; ++track) {
107  Kwave::Writer *w = (*this)[track];
108  if (w) w->flush();
109  }
110 }
111 
112 //***************************************************************************
113 //***************************************************************************
virtual unsigned int tracks() const Q_DECL_OVERRIDE
void progress(qreal percent)
virtual void clear()
Definition: App.h:33
bool flush()
Definition: Writer.h:94
virtual bool insert(unsigned int track, Kwave::Writer *writer) Q_DECL_OVERRIDE
Definition: MultiWriter.cpp:37
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
virtual sample_index_t last() const
Definition: MultiWriter.cpp:85
void written(quint64 samples)
virtual void flush()
sample_index_t last() const
Definition: Writer.h:114
sample_index_t position() const
Definition: Writer.h:122
virtual bool insert(unsigned int track, SINK *sink)
sample_index_t first() const
Definition: Writer.h:108
virtual void clear() Q_DECL_OVERRIDE
Definition: MultiWriter.cpp:97
virtual ~MultiWriter() Q_DECL_OVERRIDE
Definition: MultiWriter.cpp:31
virtual Kwave::Writer * at(unsigned int track) const
Kwave::InsertMode mode() const
Definition: Writer.h:125