1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
//=============================================================================
// MusE
// Linux Music Editor
// $Id:$
//
// Copyright (C) 2002-2006 by Werner Schweer and others
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//=============================================================================
#ifndef __AUDIOTRACK_H__
#define __AUDIOTRACK_H__
#include "fifo.h"
#include "track.h"
class Pipeline;
class SndFile;
class PluginI;
class AuxPluginIF;
//---------------------------------------------------------
// AudioTrack
//---------------------------------------------------------
class AudioTrack : public Track {
Q_OBJECT
bool _prefader; // prefader metering
Pipeline* _prePipe;
Pipeline* _postPipe;
QList<AuxPluginIF*> _preAux;
QList<AuxPluginIF*> _postAux;
void readRecfile(QDomNode);
protected:
float* buffer[MAX_CHANNELS]; // this buffer is filled by process()
bool bufferEmpty; // set by process() to optimize
// data flow
SndFile* _recFile;
Fifo fifo; // fifo -> _recFile
virtual bool setMute(bool val);
virtual bool setOff(bool val);
virtual bool setSolo(bool val);
virtual void collectInputData();
private slots:
virtual void setAutoRead(bool);
virtual void setAutoWrite(bool);
public:
AudioTrack();
virtual ~AudioTrack();
bool readProperties(QDomNode);
void writeProperties(Xml&) const;
virtual Part* newPart(Part*p=0, bool clone=false);
SndFile* recFile() const { return _recFile; }
void setRecFile(SndFile* sf) { _recFile = sf; }
virtual void setChannels(int n);
virtual bool isMute() const;
void putFifo(int channels, unsigned long n, float** bp);
void record();
virtual void startRecording();
virtual void stopRecording(const AL::Pos&, const AL::Pos&) {}
bool prefader() const { return _prefader; }
void addAuxSend(int n);
void setPrefader(bool val);
Pipeline* prePipe() { return _prePipe; }
Pipeline* postPipe() { return _postPipe; }
void addPlugin(PluginI* plugin, int idx, bool pre);
PluginI* plugin(int idx, bool prefader) const;
virtual bool hasAuxSend() const { return false; }
virtual void process();
void add(int channel, float**);
bool copy(int channel, float**);
bool isBufferEmpty() const { return bufferEmpty; }
QList<AuxPluginIF*> preAux() const { return _preAux; }
QList<AuxPluginIF*> postAux() const { return _postAux; }
};
#endif
|