kwave  18.07.70
RecordController.cpp
Go to the documentation of this file.
1 /*************************************************************************
2  RecordController.cpp - controller/state matching for the audio recorder
3  -------------------
4  begin : Sat Oct 04 2003
5  copyright : (C) 2003 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 
20 #include "RecordController.h"
21 #include "RecordState.h"
22 
23 //***************************************************************************
25  :QObject(),
26  m_state(Kwave::REC_UNINITIALIZED),
27  m_next_state(Kwave::REC_EMPTY),
28  m_trigger_set(false),
29  m_enable_prerecording(false),
30  m_empty(true)
31 {
32 }
33 
34 //***************************************************************************
36 {
37 }
38 
39 //***************************************************************************
41 {
42  if (initialized) {
45  } else {
48  }
49 }
50 
51 //***************************************************************************
53 {
54  m_empty = empty;
55 }
56 
57 //***************************************************************************
59 {
60  m_enable_prerecording = enable;
61 }
62 
63 //***************************************************************************
65 {
66  switch (m_state) {
68  // already empty, nothing to do
69  break;
71 #if 0
72  // fall back to REC_WAITING_FOR_TRIGGER
75  break;
76 #endif
77  case Kwave::REC_EMPTY:
81  case Kwave::REC_PAUSED:
82  case Kwave::REC_DONE:
83  bool accepted = true;
84  emit sigReset(accepted);
85  if (accepted) emit stateChanged(m_state = Kwave::REC_EMPTY);
86  break;
87  }
88 }
89 
90 //***************************************************************************
92 {
93  switch (m_state) {
95  case Kwave::REC_EMPTY:
96  case Kwave::REC_DONE:
97  // already stopped, nothing to do
98  break;
102  // abort, change to REC_EMPTY
103  emit sigStopRecord(0);
104  break;
106  case Kwave::REC_PAUSED:
107  // abort, change to REC_DONE
109  emit sigStopRecord(0);
110  break;
111  }
112 }
113 
114 //***************************************************************************
116 {
117  switch (m_state) {
119  case Kwave::REC_EMPTY:
120  case Kwave::REC_DONE:
121  // what do you want ?
122  break;
126  // this should never happen
127  qWarning("RecordController::actionPause(): "
128  "state = %s ???", stateName(m_state));
129  break;
131  // pause recording
133  break;
134  case Kwave::REC_PAUSED:
135  // continue recording
137  break;
138  }
139 }
140 
141 //***************************************************************************
143 {
144  switch (m_state) {
146  break; // impossible
147  case Kwave::REC_EMPTY:
148  case Kwave::REC_DONE:
149  // interpret this as manual trigger
150  emit sigStartRecord();
151  break;
155  // interpret as "trigger now"
158  break;
159  case Kwave::REC_PAUSED:
160  // interpret this as "continue"
162  emit sigStartRecord();
163  break;
165  // already recording...
167  break;
168  }
169 }
170 
171 //***************************************************************************
173 {
174  switch (m_state) {
176  break; // impossible
177  case Kwave::REC_EMPTY:
178  case Kwave::REC_PAUSED:
179  case Kwave::REC_DONE:
180  // continue, pre-recording or trigger
183  break;
188  // this should never happen
189  qWarning("RecordController::deviceRecordStarted(): "
190  "state = %s ???", stateName(m_state));
191  break;
192  }
193 }
194 
195 //***************************************************************************
197 {
198  switch (m_state) {
200  break; // impossible
201  case Kwave::REC_EMPTY:
202  // we are only "recording" for updating the level
203  // meters and other effects -> no state change
204  break;
208  // this should never happen
209  qWarning("RecordController::deviceBufferFull(): "
210  "state = %s ???", stateName(m_state));
211  break;
212  case Kwave::REC_PAUSED: /* == buffering again after pause */
213  // -> will change to "REC_BUFFERING" soon...
214  break;
216  if (m_enable_prerecording) {
217  // prerecording was set
219  } else if (m_trigger_set) {
220  // trigger was set
222  } else {
223  // default: just start recording
226  }
227  emit stateChanged(m_state);
228  break;
229  case Kwave::REC_DONE:
230  // might occur when the buffer content is flushed
231  // after a stop
232  break;
233  }
234 }
235 
236 //***************************************************************************
238 {
239  m_trigger_set = enable;
240 }
241 
242 //***************************************************************************
244 {
245  switch (m_state) {
247  case Kwave::REC_EMPTY:
250  case Kwave::REC_PAUSED:
251  case Kwave::REC_DONE:
252  // this should never happen
253  qWarning("RecordController::deviceTriggerReached(): "
254  "state = %s ???", stateName(m_state));
255  break;
258  Q_ASSERT(m_trigger_set);
259  if ((m_enable_prerecording) &&
261  {
262  // prerecording was set
264  } else {
265  // default: just start recording
268  }
269  emit stateChanged(m_state);
270  break;
271  }
272 }
273 
274 //***************************************************************************
276 {
277  switch (m_state) {
279  case Kwave::REC_EMPTY:
280  case Kwave::REC_DONE:
281  // this could happen when an abort occurs during buffering
282  emit stateChanged(m_state);
283  break;
287  // abort, no real data produced
288  if (m_empty) {
290  } else {
292  }
293  break;
295  // recording -> pause or done
296  switch (m_next_state) {
297  case Kwave::REC_EMPTY:
298  // something went wrong when starting the recorder
299  if (m_empty) {
301  } else {
303  }
304  break;
305  case Kwave::REC_PAUSED:
307  break;
308  case Kwave::REC_DONE:
310  break;
311  default:
312  qWarning("RecordController::deviceRecordStopped(): "
313  "next state = %s ???", stateName(m_next_state));
314  }
315  break;
316  case Kwave::REC_PAUSED:
317  // pause -> done
319  break;
320  }
321 }
322 
323 //***************************************************************************
325 {
326  switch (state) {
327  case Kwave::REC_UNINITIALIZED: return "REC_UNINITIALIZED";
328  case Kwave::REC_EMPTY: return "REC_EMPTY";
329  case Kwave::REC_BUFFERING: return "REC_BUFFERING";
330  case Kwave::REC_WAITING_FOR_TRIGGER: return "REC_WAITING_FOR_TRIGGER";
331  case Kwave::REC_PRERECORDING: return "REC_PRERECORDING";
332  case Kwave::REC_RECORDING: return "REC_RECORDING";
333  case Kwave::REC_PAUSED: return "REC_PAUSED";
334  case Kwave::REC_DONE: return "REC_DONE";
335  }
336  return "-INVALID-";
337 }
338 
339 //***************************************************************************
340 //***************************************************************************
void enablePrerecording(bool enable)
Definition: App.h:33
const char * stateName(const Kwave::RecordState state)
void sigStopRecord(int errorcode)
void sigReset(bool &accepted)
void stateChanged(Kwave::RecordState state)
void enableTrigger(bool enable)
Kwave::RecordState m_state
Kwave::RecordState m_next_state
void setInitialized(bool initialized)
RecordState
Definition: RecordState.h:25