kwave  18.07.70
Kwave::MultiTrackSource< SOURCE, INITIALIZE > Class Template Reference

#include <MultiTrackSource.h>

Inheritance diagram for Kwave::MultiTrackSource< SOURCE, INITIALIZE >:
Inheritance graph
Collaboration diagram for Kwave::MultiTrackSource< SOURCE, INITIALIZE >:
Collaboration graph

Public Member Functions

 MultiTrackSource (unsigned int tracks, QObject *parent=Q_NULLPTR)
 
virtual ~MultiTrackSource () Q_DECL_OVERRIDE
 
virtual void goOn () Q_DECL_OVERRIDE
 
virtual bool done () const Q_DECL_OVERRIDE
 
virtual unsigned int tracks () const Q_DECL_OVERRIDE
 
virtual SOURCE * at (unsigned int track) const
 
virtual SOURCE * operator[] (unsigned int track) Q_DECL_OVERRIDE
 
virtual bool insert (unsigned int track, SOURCE *source)
 
virtual void clear ()
 
- Public Member Functions inherited from Kwave::SampleSource
 SampleSource (QObject *parent=Q_NULLPTR)
 
virtual ~SampleSource ()
 
- Public Member Functions inherited from Kwave::StreamObject
 StreamObject (QObject *parent=Q_NULLPTR)
 
virtual ~StreamObject ()
 
virtual unsigned int tracksOfPort (const char *port) const
 
virtual Kwave::StreamObjectport (const char *port, unsigned int track)
 
virtual unsigned int blockSize () const
 
void setAttribute (const char *attribute, const QVariant &value)
 

Private Member Functions

void runSource (SOURCE *src)
 

Additional Inherited Members

- Signals inherited from Kwave::StreamObject
void attributeChanged (const QVariant value)
 
- Static Public Member Functions inherited from Kwave::StreamObject
static void setInteractive (bool interactive)
 

Detailed Description

template<class SOURCE, const bool INITIALIZE>
class Kwave::MultiTrackSource< SOURCE, INITIALIZE >

Template for easier handling of Kwave::SampleSource objects that consist of multiple independent tracks.

Definition at line 40 of file MultiTrackSource.h.

Constructor & Destructor Documentation

◆ MultiTrackSource()

template<class SOURCE, const bool INITIALIZE>
Kwave::MultiTrackSource< SOURCE, INITIALIZE >::MultiTrackSource ( unsigned int  tracks,
QObject *  parent = Q_NULLPTR 
)
inline

Default constructor, which does no initialization of the objects themselfes. If you want to use this, you should derive from this class, create all objects manually and "insert" them from the constructor.

Parameters
tracksnumber of tracks
parenta parent object, passed to QObject (optional)

Definition at line 53 of file MultiTrackSource.h.

54  :Kwave::SampleSource(parent),
55  QList<SOURCE *>()
56  {
57  Q_UNUSED(tracks);
58  Q_ASSERT(INITIALIZE || (tracks == 0));
59  Q_ASSERT(QList<SOURCE *>::size() == static_cast<int>(tracks));
60  }
virtual unsigned int tracks() const Q_DECL_OVERRIDE

◆ ~MultiTrackSource()

template<class SOURCE, const bool INITIALIZE>
virtual Kwave::MultiTrackSource< SOURCE, INITIALIZE >::~MultiTrackSource ( )
inlinevirtual

Destructor

Reimplemented in Kwave::MultiTrackSource< SOURCE, true >.

Definition at line 63 of file MultiTrackSource.h.

64  {
65  clear();
66  }

Member Function Documentation

◆ at()

template<class SOURCE, const bool INITIALIZE>
virtual SOURCE* Kwave::MultiTrackSource< SOURCE, INITIALIZE >::at ( unsigned int  track) const
inlinevirtual

Returns the source that corresponds to one specific track if the object has multiple tracks. For single-track objects it returns "this" for the first index and 0 for all others

Definition at line 110 of file MultiTrackSource.h.

110  {
111  return QList<SOURCE *>::at(track);
112  }

◆ clear()

template<class SOURCE, const bool INITIALIZE>
virtual void Kwave::MultiTrackSource< SOURCE, INITIALIZE >::clear ( )
inlinevirtual

Remove all tracks / sources

Definition at line 134 of file MultiTrackSource.h.

134  {
135  while (!QList<SOURCE *>::isEmpty())
136  delete QList<SOURCE *>::takeLast();
137  }

◆ done()

template<class SOURCE, const bool INITIALIZE>
virtual bool Kwave::MultiTrackSource< SOURCE, INITIALIZE >::done ( ) const
inlinevirtual

Returns true when all sources are done

Reimplemented from Kwave::SampleSource.

Definition at line 89 of file MultiTrackSource.h.

Referenced by Kwave::VolumePlugin::run(), Kwave::AmplifyFreePlugin::run(), and Kwave::FilterPlugin::run().

90  {
91  foreach (SOURCE *src, static_cast< QList<SOURCE *> >(*this))
92  if (src && !src->done()) return false;
93  return true;
94  }
Here is the caller graph for this function:

◆ goOn()

template<class SOURCE, const bool INITIALIZE>
virtual void Kwave::MultiTrackSource< SOURCE, INITIALIZE >::goOn ( )
inlinevirtual

Calls goOn() for each track.

See also
Kwave::SampleSource::goOn()

Implements Kwave::SampleSource.

Definition at line 72 of file MultiTrackSource.h.

Referenced by Kwave::OpusEncoder::fillInBuffer(), Kwave::SampleRatePlugin::run(), Kwave::VolumePlugin::run(), Kwave::AmplifyFreePlugin::run(), Kwave::NormalizePlugin::run(), Kwave::PlayBackPlugin::run(), and Kwave::FilterPlugin::run().

73  {
74  QFutureSynchronizer<void> synchronizer;
75 
76  foreach (SOURCE *src, static_cast< QList<SOURCE *> >(*this)) {
77  if (!src) continue;
78  synchronizer.addFuture(QtConcurrent::run(
79  this,
81  src)
82  );
83  }
84 
85  synchronizer.waitForFinished();
86  }
Here is the caller graph for this function:

◆ insert()

template<class SOURCE, const bool INITIALIZE>
virtual bool Kwave::MultiTrackSource< SOURCE, INITIALIZE >::insert ( unsigned int  track,
SOURCE *  source 
)
inlinevirtual

Insert a new track with a source.

Parameters
trackindex of the track [0...N-1]
sourcepointer to a Kwave::SampleSource
Returns
true if successful, false if failed

Reimplemented in Kwave::MultiTrackReader.

Definition at line 128 of file MultiTrackSource.h.

Referenced by Kwave::MultiTrackReader::insert().

128  {
129  QList<SOURCE *>::insert(track, source);
130  return (at(track) == source);
131  }
virtual SOURCE * at(unsigned int track) const
Here is the caller graph for this function:

◆ operator[]()

template<class SOURCE, const bool INITIALIZE>
virtual SOURCE* Kwave::MultiTrackSource< SOURCE, INITIALIZE >::operator[] ( unsigned int  track)
inlinevirtual
See also
the Kwave::MultiTrackSource.at()...

Reimplemented from Kwave::StreamObject.

Definition at line 115 of file MultiTrackSource.h.

117  {
118  return at(track);
119  }
virtual SOURCE * at(unsigned int track) const

◆ runSource()

template<class SOURCE, const bool INITIALIZE>
void Kwave::MultiTrackSource< SOURCE, INITIALIZE >::runSource ( SOURCE *  src)
inlineprivate

little wrapper for calling goOn() of a source in a worker thread

Definition at line 142 of file MultiTrackSource.h.

142  {
143  src->goOn();
144  }

◆ tracks()

template<class SOURCE, const bool INITIALIZE>
virtual unsigned int Kwave::MultiTrackSource< SOURCE, INITIALIZE >::tracks ( ) const
inlinevirtual

Returns the number of tracks that the source provides

Returns
number of tracks

Reimplemented from Kwave::StreamObject.

Definition at line 100 of file MultiTrackSource.h.

Referenced by Kwave::WavEncoder::encode(), Kwave::MimeData::encode(), Kwave::MP3Encoder::encode(), Kwave::Drag::encode(), Kwave::NormalizePlugin::getMaxPower(), Kwave::ReversePlugin::run(), and Kwave::DebugPlugin::run().

101  {
102  return QList<SOURCE *>::size();
103  }
Here is the caller graph for this function:

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