kwave  18.07.70
MultiTrackReader.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  MultiTrackReader.cpp - reader for multi-track signals
3  -------------------
4  begin : Sat Jun 30 2001
5  copyright : (C) 2001 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 
22 #include "libkwave/SampleReader.h"
23 #include "libkwave/SignalManager.h"
24 
25 //***************************************************************************
27 :Kwave::MultiTrackSource<Kwave::SampleReader, false>(0, Q_NULLPTR),
28  m_first(0), m_last(0), m_canceled(false)
29 {
30 }
31 
32 //***************************************************************************
34  Kwave::SignalManager &signal_manager,
35  const QList<unsigned int> &track_list,
39  m_first(first), m_last(last), m_canceled(false)
40 {
41  unsigned int index = 0;
42 
43  foreach(unsigned int track, track_list) {
44  Kwave::SampleReader *s = signal_manager.openReader(
45  mode, track, first, last);
46  if (!s) break;
47  insert(index++, s);
48  Q_ASSERT(index == tracks());
49  }
50 }
51 
52 //***************************************************************************
54 {
55  clear();
56 }
57 
58 //***************************************************************************
60 {
61  return m_first;
62 }
63 
64 //***************************************************************************
66 {
67  return m_last;
68 }
69 
70 //***************************************************************************
72 {
73  const unsigned int c = tracks();
74  for (unsigned int r = 0; r < c; r++) {
75  Kwave::SampleReader *reader = at(r);
76  Q_ASSERT(reader);
77  if (!reader) continue;
78  if (!reader->eof()) return false;
79  }
80  return true;
81 }
82 
83 //***************************************************************************
85 {
86  qreal sum = 0;
87  qreal total = 0;
88  unsigned int track;
89  const unsigned int n_tracks = tracks();
90  for (track = 0; track < n_tracks; ++track) {
91  Kwave::SampleReader *r = at(track);
92  if (r) {
93  sum += (r->pos() - r->first());
94  total += (r->last() - r->first() + 1);
95  }
96  }
97 
98  emit progress(qreal(100.0) * sum / total);
99 }
100 
101 //***************************************************************************
103 {
104  unsigned int track;
105  const unsigned int n_tracks = tracks();
106  for (track=0; track < n_tracks; ++track) {
107  Kwave::SampleReader *r = at(track);
108  if (r) r->reset();
109  }
110  emit progress(0);
111 }
112 
113 //***************************************************************************
114 bool Kwave::MultiTrackReader::insert(unsigned int track,
115  Kwave::SampleReader *reader)
116 {
117  if (reader) {
118  connect(
119  reader, SIGNAL(proceeded()),
120  this, SLOT(proceeded()),
121  Qt::DirectConnection
122  );
123  }
125  track, reader);
126 }
127 
128 //***************************************************************************
130 {
131  unsigned int track;
132  const unsigned int n_tracks = tracks();
133  for (track=0; track < n_tracks; ++track) {
134  Kwave::SampleReader *r = at(track);
135  if (r) r->skip(count);
136  }
137 }
138 
139 //***************************************************************************
141 {
142  unsigned int track;
143  const unsigned int n_tracks = tracks();
144  for (track=0; track < n_tracks; ++track) {
145  Kwave::SampleReader *r = at(track);
146  if (r) r->seek(pos);
147  }
148 }
149 
150 //***************************************************************************
152 {
153  m_canceled = true;
154 }
155 
156 //***************************************************************************
157 //***************************************************************************
virtual sample_index_t first() const
Definition: App.h:33
ReaderMode
Definition: ReaderMode.h:27
void skip(sample_index_t count)
void progress(qreal percent)
virtual unsigned int tracks() const Q_DECL_OVERRIDE
quint64 sample_index_t
Definition: Sample.h:28
virtual ~MultiTrackReader() Q_DECL_OVERRIDE
Kwave::SampleReader * openReader(Kwave::ReaderMode mode, unsigned int track, sample_index_t left=0, sample_index_t right=SAMPLE_INDEX_MAX)
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
Definition: Connect.cpp:48
bool eof() const
Definition: SampleReader.h:66
virtual void skip(sample_index_t count)
void seek(sample_index_t pos)
sample_index_t last() const
Definition: SampleReader.h:121
virtual bool eof() const
virtual bool insert(unsigned int track, SOURCE *source)
sample_index_t first() const
Definition: SampleReader.h:116
sample_index_t pos() const
Definition: SampleReader.h:111
virtual Kwave::SampleReader * at(unsigned int track) const
virtual sample_index_t last() const
virtual bool insert(unsigned int track, Kwave::SampleReader *reader) Q_DECL_OVERRIDE
virtual void seek(sample_index_t pos)