1 /*
2  * Author: Harry van Haaren 2013
3  *         harryhaaren@gmail.com
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef LUPPP_BUFFERS_H
20 #define LUPPP_BUFFERS_H
21 
22 #include <cstring>
23 #include <jack/transport.h>
24 
25 class Buffers
26 {
27 public:
28 
29 	enum BUFFER {
30 		// AUDIO
31 		MASTER_INPUT_L = 0,
32 		MASTER_INPUT_R,
33 
34 		MASTER_OUT_L,
35 		MASTER_OUT_R,
36 
37 		JACK_SEND_OUT_L,
38 		JACK_SEND_OUT_R,
39 		JACK_MASTER_OUT_L,
40 		JACK_MASTER_OUT_R,
41 		JACK_SIDECHAIN_KEY_L,
42 		JACK_SIDECHAIN_KEY_R,
43 		JACK_SIDECHAIN_SIGNAL_L,
44 		JACK_SIDECHAIN_SIGNAL_R,
45 
46 		SEND_L,
47 		SEND_R,
48 		SIDECHAIN_KEY_L,
49 		SIDECHAIN_KEY_R,
50 		SIDECHAIN_SIGNAL_L,
51 		SIDECHAIN_SIGNAL_R,
52 
53 		MASTER_RETURN_L,
54 		MASTER_RETURN_R,
55 
56 		HEADPHONES_OUT_L,
57 		HEADPHONES_OUT_R,
58 
59 		// MIDI
60 		MASTER_MIDI_INPUT,
61 
62 		// track buffers: they are the "working" buffers per track:
63 		// the end result is mixed into the master output, while each
64 		// stage along the way the amplitude etc can be analysed
65 		TRACK_0_L,
66 		TRACK_0_R,
67 		TRACK_1_L,
68 		TRACK_1_R,
69 		TRACK_2_L,
70 		TRACK_2_R,
71 		TRACK_3_L,
72 		TRACK_3_R,
73 		TRACK_4_L,
74 		TRACK_4_R,
75 		TRACK_5_L,
76 		TRACK_5_R,
77 		TRACK_6_L,
78 		TRACK_6_R,
79 		TRACK_7_L,
80 		TRACK_7_R,
81 		//Per track sends/returns
82 		SEND_TRACK_0_L,
83 		SEND_TRACK_0_R,
84 		SEND_TRACK_1_L,
85 		SEND_TRACK_1_R,
86 		SEND_TRACK_2_L,
87 		SEND_TRACK_2_R,
88 		SEND_TRACK_3_L,
89 		SEND_TRACK_3_R,
90 		SEND_TRACK_4_L,
91 		SEND_TRACK_4_R,
92 		SEND_TRACK_5_L,
93 		SEND_TRACK_5_R,
94 		SEND_TRACK_6_L,
95 		SEND_TRACK_6_R,
96 		SEND_TRACK_7_L,
97 		SEND_TRACK_7_R,
98 		RETURN_TRACK_0_L,
99 		RETURN_TRACK_0_R,
100 		RETURN_TRACK_1_L,
101 		RETURN_TRACK_1_R,
102 		RETURN_TRACK_2_L,
103 		RETURN_TRACK_2_R,
104 		RETURN_TRACK_3_L,
105 		RETURN_TRACK_3_R,
106 		RETURN_TRACK_4_L,
107 		RETURN_TRACK_4_R,
108 		RETURN_TRACK_5_L,
109 		RETURN_TRACK_5_R,
110 		RETURN_TRACK_6_L,
111 		RETURN_TRACK_6_R,
112 		RETURN_TRACK_7_L,
113 		RETURN_TRACK_7_R,
114 
115 		JACK_TRACK_0_L,
116 		JACK_TRACK_0_R,
117 		JACK_TRACK_1_L,
118 		JACK_TRACK_1_R,
119 		JACK_TRACK_2_L,
120 		JACK_TRACK_2_R,
121 		JACK_TRACK_3_L,
122 		JACK_TRACK_3_R,
123 		JACK_TRACK_4_L,
124 		JACK_TRACK_4_R,
125 		JACK_TRACK_5_L,
126 		JACK_TRACK_5_R,
127 		JACK_TRACK_6_L,
128 		JACK_TRACK_6_R,
129 		JACK_TRACK_7_L,
130 		JACK_TRACK_7_R,
131 
132 
133 		BUFFER_COUNT,
134 	};
135 
Buffers()136 	Buffers()
137 	{
138 		memset( audio, 0, sizeof(float*)*BUFFER_COUNT);
139 		memset( midi , 0, sizeof(void *)*BUFFER_COUNT);
140 	}
141 	float* audio[BUFFER_COUNT];
142 	void*  midi [BUFFER_COUNT];
143 
144 	// Jack details
145 	jack_nframes_t         nframes;
146 	jack_nframes_t         samplerate;
147 
148 	jack_nframes_t          transportFrame;
149 	jack_position_t*        transportPosition;
150 	jack_transport_state_t* transportState;
151 
152 };
153 
154 #endif // LUPPP_BUFFERS_H
155 
156