/[svn]/jsampler/trunk/src/org/jsampler/LscpTree.java
ViewVC logotype

Contents of /jsampler/trunk/src/org/jsampler/LscpTree.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2200 - (show annotations) (download)
Sun Jul 3 22:01:16 2011 UTC (12 years, 9 months ago) by iliev
File size: 17066 byte(s)
* added support for exporting effects to LSCP script
* Sampler Browser (work in progress): initial
  implementation of sampler channels

1 /*
2 * JSampler - a java front-end for LinuxSampler
3 *
4 * Copyright (C) 2005-2011 Grigor Iliev <grigor@grigoriliev.com>
5 *
6 * This file is part of JSampler.
7 *
8 * JSampler is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2
10 * as published by the Free Software Foundation.
11 *
12 * JSampler is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with JSampler; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20 * MA 02111-1307 USA
21 */
22
23 package org.jsampler;
24
25 /**
26 * Provides the LSCP grammar represented in a tree structure.
27 * @author Grigor Iliev
28 */
29 public class LscpTree {
30 private static LscpNode rootNode;
31
32 static {
33 LscpNode add = new LscpNode("ADD");
34 LscpNode append = new LscpNode("APPEND");
35 LscpNode clear = new LscpNode("CLEAR", new LscpNode("MIDI_INSTRUMENTS", true, false));
36 LscpNode copy = new LscpNode("COPY");
37 LscpNode create = new LscpNode("CREATE");
38 LscpNode destroy = new LscpNode("DESTROY");
39 LscpNode edit = new LscpNode("EDIT");
40 LscpNode find = new LscpNode("FIND");
41 LscpNode format = new LscpNode("FORMAT", new LscpNode("INSTRUMENTS_DB", true, false));
42 LscpNode get = new LscpNode("GET");
43 LscpNode insert = new LscpNode("INSERT");
44 LscpNode list = new LscpNode("LIST");
45 LscpNode load = new LscpNode("LOAD");
46 LscpNode map = new LscpNode("MAP", new LscpNode("MIDI_INSTRUMENT", true));
47 LscpNode move = new LscpNode("MOVE");
48 LscpNode quit = new LscpNode("QUIT", true, false);
49 LscpNode remove = new LscpNode("REMOVE");
50 LscpNode reset = new LscpNode("RESET", new LscpNode("CHANNEL"), true, false);
51 LscpNode set = new LscpNode("SET");
52 LscpNode subscribe = new LscpNode("SUBSCRIBE");
53 LscpNode unmap = new LscpNode("UNMAP", new LscpNode("MIDI_INSTRUMENT"), true);
54 LscpNode unsubscribe = new LscpNode("UNSUBSCRIBE");
55
56 LscpNode[] cmds = {
57 add, append, clear, copy, create, destroy, edit, find, format, get, insert,
58 list, load, map, move, quit, remove, reset, set, subscribe, unmap, unsubscribe
59 };
60
61 rootNode = new LscpNode("", cmds);
62
63 // ADD command
64 LscpNode[] nodes = new LscpNode[5];
65 nodes[0] = new LscpNode("CHANNEL", true, false);
66 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY");
67 LscpNode addDbInstr = new LscpNode("DB_INSTRUMENTS", true);
68 nodes[2] = addDbInstr;
69 nodes[3] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
70 nodes[4] = new LscpNode("SEND_EFFECT_CHAIN", true);
71 add.setChildren(nodes);
72
73 // ADD DB_INSTRUMENTS command
74 nodes = new LscpNode[4];
75 nodes[0] = new LscpNode("FLAT", true);
76 LscpNode addDbInstrnNonModal = new LscpNode("NON_MODAL", true);
77 nodes[1] = addDbInstrnNonModal;
78 nodes[2] = new LscpNode("NON_RECURSIVE", true);
79 nodes[3] = new LscpNode("RECURSIVE", true);
80 addDbInstr.setChildren(nodes);
81
82 // ADD DB_INSTRUMENTS NON_MODAL command
83 nodes = new LscpNode[3];
84 nodes[0] = new LscpNode("FLAT", true);
85 nodes[1] = new LscpNode("NON_RECURSIVE", true);
86 nodes[2] = new LscpNode("RECURSIVE", true);
87 addDbInstrnNonModal.setChildren(nodes);
88
89 // APPEND command
90 nodes = new LscpNode[1];
91 nodes[0] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("EFFECT", true));
92 append.setChildren(nodes);
93
94 // COPY command
95 nodes = new LscpNode[2];
96 nodes[0] = new LscpNode("DB_INSTRUMENT", true);
97 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY", true);
98 copy.setChildren(nodes);
99
100 // CREATE command
101 nodes = new LscpNode[4];
102 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
103 nodes[1] = new LscpNode("EFFECT_INSTANCE", true);
104 nodes[2] = new LscpNode("FX_SEND", true);
105 nodes[3] = new LscpNode("MIDI_INPUT_DEVICE", true);
106 create.setChildren(nodes);
107
108 // DESTROY command
109 nodes = new LscpNode[4];
110 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
111 nodes[1] = new LscpNode("EFFECT_INSTANCE", true);
112 nodes[2] = new LscpNode("FX_SEND", true);
113 nodes[3] = new LscpNode("MIDI_INPUT_DEVICE", true);
114 destroy.setChildren(nodes);
115
116 //EDIT command
117 nodes = new LscpNode[1];
118 LscpNode editChn = new LscpNode("CHANNEL", new LscpNode("INSTRUMENT", true, true));
119 nodes[0] = editChn;
120 edit.setChildren(nodes);
121
122
123 // FIND command
124 nodes = new LscpNode[3];
125 LscpNode n = new LscpNode("NON_RECURSIVE", true);
126 nodes[0] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", n, true);
127 n = new LscpNode("NON_RECURSIVE", true);
128 nodes[1] = new LscpNode("DB_INSTRUMENTS", n, true);
129 nodes[2] = new LscpNode("LOST", new LscpNode("DB_INSTRUMENT_FILES", true, false));
130 find.setChildren(nodes);
131
132 // GET command
133 nodes = new LscpNode[41];
134 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", new LscpNode("INFO", true));
135 nodes[1] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", new LscpNode("INFO", true));
136 nodes[2] = new LscpNode("AUDIO_OUTPUT_DEVICE", new LscpNode("INFO", true));
137 nodes[3] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
138 nodes[4] = new LscpNode("AUDIO_OUTPUT_DRIVER", new LscpNode("INFO", true));
139 nodes[5] = new LscpNode("AUDIO_OUTPUT_DRIVER_PARAMETER", new LscpNode("INFO", true));
140 nodes[6] = new LscpNode("AVAILABLE_AUDIO_OUTPUT_DRIVERS", true, false);
141 nodes[7] = new LscpNode("AVAILABLE_EFFECTS", true, false);
142 nodes[8] = new LscpNode("AVAILABLE_ENGINES", true, false);
143 nodes[9] = new LscpNode("AVAILABLE_MIDI_INPUT_DRIVERS", true, false);
144 LscpNode getChn = new LscpNode("CHANNEL");
145 nodes[10] = getChn;
146 nodes[11] = new LscpNode("CHANNELS", true, false);
147 nodes[12] = new LscpNode("DB_INSTRUMENT", new LscpNode("INFO", true));
148 nodes[13] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
149 nodes[14] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("INFO", true));
150 nodes[15] = new LscpNode("DB_INSTRUMENTS", true);
151 nodes[16] = new LscpNode("DB_INSTRUMENTS_JOB", new LscpNode("INFO", true));
152 nodes[17] = new LscpNode("EFFECT", new LscpNode("INFO", true));
153 nodes[18] = new LscpNode("EFFECT_INSTANCE", new LscpNode("INFO", true));
154 nodes[19] = new LscpNode("EFFECT_INSTANCE_INPUT_CONTROL", new LscpNode("INFO", true));
155 nodes[20] = new LscpNode("EFFECT_INSTANCES", true, false);
156 nodes[21] = new LscpNode("ENGINE", new LscpNode("INFO", true));
157 LscpNode getFile = new LscpNode("FILE");
158 nodes[22] = getFile;
159 nodes[23] = new LscpNode("FX_SEND", new LscpNode("INFO", true));
160 nodes[24] = new LscpNode("FX_SENDS");
161 nodes[25] = new LscpNode("MIDI_INPUT_DEVICE", new LscpNode("INFO", true));
162 nodes[26] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
163 nodes[27] = new LscpNode("MIDI_INPUT_DRIVER", new LscpNode("INFO", true));
164 nodes[28] = new LscpNode("MIDI_INPUT_DRIVER_PARAMETER", new LscpNode("INFO", true));
165 nodes[29] = new LscpNode("MIDI_INPUT_PORT", new LscpNode("INFO", true));
166 nodes[30] = new LscpNode("MIDI_INPUT_PORT_PARAMETER", new LscpNode("INFO", true));
167 nodes[31] = new LscpNode("MIDI_INSTRUMENT", new LscpNode("INFO", true));
168 nodes[32] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("INFO", true));
169 nodes[33] = new LscpNode("MIDI_INSTRUMENT_MAPS", true, false);
170 nodes[34] = new LscpNode("MIDI_INSTRUMENTS", new LscpNode("ALL", true, false), true);
171 nodes[35] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("INFO", true));
172 nodes[36] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("INFO", true));
173 nodes[37] = new LscpNode("SEND_EFFECT_CHAINS", true);
174 nodes[38] = new LscpNode("STREAMS", true, false);
175 nodes[39] = new LscpNode("VOICES", true, false);
176 nodes[40] = new LscpNode("VOLUME", true, false);
177 get.setChildren(nodes);
178
179 // GET CHANNEL command
180 nodes = new LscpNode[4];
181 LscpNode getChnBufFill = new LscpNode("BUFFER_FILL");
182 nodes[0] = getChnBufFill;
183 nodes[1] = new LscpNode("INFO", true);
184 nodes[2] = new LscpNode("STREAM_COUNT", true);
185 nodes[3] = new LscpNode("VOICE_COUNT", true);
186 getChn.setChildren(nodes);
187
188 // GET CHANNEL BUFFER_FILL command
189 nodes = new LscpNode[2];
190 nodes[0] = new LscpNode("BYTES", true);
191 nodes[1] = new LscpNode("PERCENTAGE", true);
192 getChnBufFill.setChildren(nodes);
193
194 // GET FILE command
195 nodes = new LscpNode[2];
196 nodes[0] = new LscpNode("INSTRUMENT", new LscpNode("INFO", true));
197 nodes[1] = new LscpNode("INSTRUMENTS", true);
198 getFile.setChildren(nodes);
199
200 // INSERT command
201 nodes = new LscpNode[1];
202 nodes[0] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("EFFECT", true));
203 insert.setChildren(nodes);
204
205 // LIST command
206 nodes = new LscpNode[15];
207 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
208 nodes[1] = new LscpNode("AVAILABLE_AUDIO_OUTPUT_DRIVERS", true, false);
209 nodes[2] = new LscpNode("AVAILABLE_EFFECTS", true, false);
210 nodes[3] = new LscpNode("AVAILABLE_ENGINES", true, false);
211 nodes[4] = new LscpNode("AVAILABLE_MIDI_INPUT_DRIVERS", true, false);
212 nodes[5] = new LscpNode("CHANNELS", true, false);
213 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
214 nodes[7] = new LscpNode("DB_INSTRUMENTS", true);
215 nodes[8] = new LscpNode("EFFECT_INSTANCES", true, false);
216 nodes[9] = new LscpNode("FILE", new LscpNode("INSTRUMENTS", true));
217 nodes[10] = new LscpNode("FX_SENDS");
218 nodes[11] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
219 nodes[12] = new LscpNode("MIDI_INSTRUMENT_MAPS", true, false);
220 nodes[13] = new LscpNode("MIDI_INSTRUMENTS", true);
221 nodes[14] = new LscpNode("SEND_EFFECT_CHAINS", true);
222 list.setChildren(nodes);
223
224 // LOAD command
225 nodes = new LscpNode[2];
226 nodes[0] = new LscpNode("ENGINE", true);
227 nodes[1] = new LscpNode("INSTRUMENT", new LscpNode("NON_MODAL"), true);
228 load.setChildren(nodes);
229
230 // MOVE command
231 nodes = new LscpNode[2];
232 nodes[0] = new LscpNode("DB_INSTRUMENT", true);
233 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY", true);
234 move.setChildren(nodes);
235
236 // REMOVE command
237 nodes = new LscpNode[6];
238 nodes[0] = new LscpNode("CHANNEL", true);
239 nodes[1] = new LscpNode("DB_INSTRUMENT", true);
240 nodes[2] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("FORCE", true), true);
241 nodes[3] = new LscpNode("FX_SEND", new LscpNode("EFFECT", true), true);
242 nodes[4] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("ALL", true, false), true);
243 nodes[5] = new LscpNode("SEND_EFFECT_CHAIN", new LscpNode("EFFECT", true), true);
244 remove.setChildren(nodes);
245
246 // SET command
247 nodes = new LscpNode[14];
248 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", true);
249 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_PARAMETER", true);
250 LscpNode setChn = new LscpNode("CHANNEL");
251 nodes[2] = setChn;
252 LscpNode setDbInstr = new LscpNode("DB_INSTRUMENT");
253 nodes[3] = setDbInstr;
254 LscpNode setDbDir = new LscpNode("DB_INSTRUMENT_DIRECTORY");
255 nodes[4] = setDbDir;
256 nodes[5] = new LscpNode("ECHO", true);
257 nodes[6] = new LscpNode("EFFECT_INSTANCE_INPUT_CONTROL", new LscpNode("VALUE", true));
258 LscpNode setFxSend = new LscpNode("FX_SEND");
259 nodes[7] = setFxSend;
260 nodes[8] = new LscpNode("MIDI_INPUT_DEVICE_PARAMETER", true);
261 nodes[9] = new LscpNode("MIDI_INPUT_PORT_PARAMETER", true);
262 nodes[10] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("NAME", true));
263 nodes[11] = new LscpNode("STREAMS", true);
264 nodes[12] = new LscpNode("VOICES", true);
265 nodes[13] = new LscpNode("VOLUME", true);
266 set.setChildren(nodes);
267
268 // SET CHANNEL command
269 nodes = new LscpNode[12];
270 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
271 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
272 nodes[2] = new LscpNode("AUDIO_OUTPUT_TYPE", true);
273 nodes[3] = new LscpNode("MIDI_INPUT", true);
274 nodes[4] = new LscpNode("MIDI_INPUT_CHANNEL", true);
275 nodes[5] = new LscpNode("MIDI_INPUT_DEVICE", true);
276 nodes[6] = new LscpNode("MIDI_INPUT_PORT", true);
277 nodes[7] = new LscpNode("MIDI_INPUT_TYPE", true);
278 nodes[8] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
279 nodes[9] = new LscpNode("MUTE", true);
280 nodes[10] = new LscpNode("SOLO", true);
281 nodes[11] = new LscpNode("VOLUME", true);
282 setChn.setChildren(nodes);
283
284 // SET DB_INSTRUMENT
285 nodes = new LscpNode[3];
286 nodes[0] = new LscpNode("DESCRIPTION", true);
287 nodes[1] = new LscpNode("FILE_PATH", true);
288 nodes[2] = new LscpNode("NAME", true);
289 setDbInstr.setChildren(nodes);
290
291 // SET DB_INSTRUMENT_DIRECTORY
292 nodes = new LscpNode[2];
293 nodes[0] = new LscpNode("NAME", true);
294 nodes[1] = new LscpNode("DESCRIPTION", true);
295 setDbDir.setChildren(nodes);
296
297 // SET FX_SEND command
298 nodes = new LscpNode[5];
299 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
300 nodes[1] = new LscpNode("EFFECT", true);
301 nodes[2] = new LscpNode("LEVEL", true);
302 nodes[3] = new LscpNode("MIDI_CONTROLLER", true);
303 nodes[4] = new LscpNode("NAME", true);
304 setFxSend.setChildren(nodes);
305
306 // SUBSCRIBE command
307 nodes = new LscpNode[30];
308 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
309 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
310 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
311 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
312 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
313 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
314 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
315 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
316 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
317 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
318 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
319 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
320 nodes[12] = new LscpNode("EFFECT_INSTANCE_COUNT", true, false);
321 nodes[13] = new LscpNode("EFFECT_INSTANCE_INFO", true, false);
322 nodes[14] = new LscpNode("FX_SEND_COUNT", true, false);
323 nodes[15] = new LscpNode("FX_SEND_INFO", true, false);
324 nodes[16] = new LscpNode("GLOBAL_INFO", true, false);
325 nodes[17] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
326 nodes[18] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
327 nodes[19] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
328 nodes[20] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
329 nodes[21] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
330 nodes[22] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
331 nodes[23] = new LscpNode("MISCELLANEOUS", true, false);
332 nodes[24] = new LscpNode("SEND_EFFECT_CHAIN_COUNT", true, false);
333 nodes[25] = new LscpNode("SEND_EFFECT_CHAIN_INFO", true, false);
334 nodes[26] = new LscpNode("STREAM_COUNT", true, false);
335 nodes[27] = new LscpNode("TOTAL_STREAM_COUNT", true, false);
336 nodes[28] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
337 nodes[29] = new LscpNode("VOICE_COUNT", true, false);
338 subscribe.setChildren(nodes);
339
340 // UNSUBSCRIBE command
341 nodes = new LscpNode[30];
342 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
343 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
344 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
345 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
346 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
347 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
348 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
349 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
350 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
351 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
352 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
353 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
354 nodes[12] = new LscpNode("EFFECT_INSTANCE_COUNT", true, false);
355 nodes[13] = new LscpNode("EFFECT_INSTANCE_INFO", true, false);
356 nodes[14] = new LscpNode("FX_SEND_COUNT", true, false);
357 nodes[15] = new LscpNode("FX_SEND_INFO", true, false);
358 nodes[16] = new LscpNode("GLOBAL_INFO", true, false);
359 nodes[17] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
360 nodes[18] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
361 nodes[19] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
362 nodes[20] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
363 nodes[21] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
364 nodes[22] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
365 nodes[23] = new LscpNode("MISCELLANEOUS", true, false);
366 nodes[24] = new LscpNode("SEND_EFFECT_CHAIN_COUNT", true, false);
367 nodes[25] = new LscpNode("SEND_EFFECT_CHAIN_INFO", true, false);
368 nodes[26] = new LscpNode("STREAM_COUNT", true, false);
369 nodes[27] = new LscpNode("TOTAL_STREAM_COUNT", true, false);
370 nodes[28] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
371 nodes[29] = new LscpNode("VOICE_COUNT", true, false);
372 unsubscribe.setChildren(nodes);
373 }
374
375 /** Forbits the instantiation of this class. */
376 private
377 LscpTree() { }
378
379 /**
380 * Gets the root node of the tree.
381 */
382 public static LscpNode
383 getRoot() { return rootNode; }
384 }

  ViewVC Help
Powered by ViewVC