/[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 1818 - (show annotations) (download)
Wed Dec 24 17:29:47 2008 UTC (15 years, 4 months ago) by iliev
File size: 14929 byte(s)
* Added support for controlling the global sampler-wide limit of
  maximum voices and disk streams
  (choose Edit/Preferences, then click the `General' tab)
* Fantasia: store the view configuration of audio/MIDI devices and sampler
  channels in the LSCP script when exporting sampler configuration
* Fantasia: Implemented multiple sampler channels' selection
* Fantasia: Added option to move sampler channels up and down
  in the channels list
* Fantasia: Added option to move sampler channels
  to another channels panels

1 /*
2 * JSampler - a java front-end for LinuxSampler
3 *
4 * Copyright (C) 2005-2008 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 clear = new LscpNode("CLEAR", new LscpNode("MIDI_INSTRUMENTS", true, false));
35 LscpNode copy = new LscpNode("COPY");
36 LscpNode create = new LscpNode("CREATE");
37 LscpNode destroy = new LscpNode("DESTROY");
38 LscpNode edit = new LscpNode("EDIT");
39 LscpNode find = new LscpNode("FIND");
40 LscpNode format = new LscpNode("FORMAT", new LscpNode("INSTRUMENTS_DB", true, false));
41 LscpNode get = new LscpNode("GET");
42 LscpNode list = new LscpNode("LIST");
43 LscpNode load = new LscpNode("LOAD");
44 LscpNode map = new LscpNode("MAP", new LscpNode("MIDI_INSTRUMENT", true));
45 LscpNode move = new LscpNode("MOVE");
46 LscpNode quit = new LscpNode("QUIT", true, false);
47 LscpNode remove = new LscpNode("REMOVE");
48 LscpNode reset = new LscpNode("RESET", new LscpNode("CHANNEL"), true, false);
49 LscpNode set = new LscpNode("SET");
50 LscpNode subscribe = new LscpNode("SUBSCRIBE");
51 LscpNode unmap = new LscpNode("UNMAP", new LscpNode("MIDI_INSTRUMENT"), true);
52 LscpNode unsubscribe = new LscpNode("UNSUBSCRIBE");
53
54 LscpNode[] cmds = {
55 add, clear, copy, create, destroy, edit, find, format, get, list, load,
56 map, move, quit, remove, reset, set, subscribe, unmap, unsubscribe
57 };
58
59 rootNode = new LscpNode("", cmds);
60
61 // ADD command
62 LscpNode[] nodes = new LscpNode[4];
63 nodes[0] = new LscpNode("CHANNEL", true, false);
64 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY");
65 LscpNode addDbInstr = new LscpNode("DB_INSTRUMENTS", true);
66 nodes[2] = addDbInstr;
67 nodes[3] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
68 add.setChildren(nodes);
69
70 // ADD DB_INSTRUMENTS command
71 nodes = new LscpNode[4];
72 nodes[0] = new LscpNode("FLAT", true);
73 LscpNode addDbInstrnNonModal = new LscpNode("NON_MODAL", true);
74 nodes[1] = addDbInstrnNonModal;
75 nodes[2] = new LscpNode("NON_RECURSIVE", true);
76 nodes[3] = new LscpNode("RECURSIVE", true);
77 addDbInstr.setChildren(nodes);
78
79 // ADD DB_INSTRUMENTS NON_MODAL command
80 nodes = new LscpNode[3];
81 nodes[0] = new LscpNode("FLAT", true);
82 nodes[1] = new LscpNode("NON_RECURSIVE", true);
83 nodes[2] = new LscpNode("RECURSIVE", true);
84 addDbInstrnNonModal.setChildren(nodes);
85
86 // COPY command
87 nodes = new LscpNode[2];
88 nodes[0] = new LscpNode("DB_INSTRUMENT", true);
89 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY", true);
90 copy.setChildren(nodes);
91
92 // CREATE command
93 nodes = new LscpNode[3];
94 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
95 nodes[1] = new LscpNode("FX_SEND", true);
96 nodes[2] = new LscpNode("MIDI_INPUT_DEVICE", true);
97 create.setChildren(nodes);
98
99 // DESTROY command
100 nodes = new LscpNode[3];
101 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
102 nodes[1] = new LscpNode("FX_SEND", true);
103 nodes[2] = new LscpNode("MIDI_INPUT_DEVICE", true);
104 destroy.setChildren(nodes);
105
106 //EDIT command
107 nodes = new LscpNode[1];
108 LscpNode editChn = new LscpNode("CHANNEL", new LscpNode("INSTRUMENT", true, true));
109 nodes[0] = editChn;
110 edit.setChildren(nodes);
111
112
113 // FIND command
114 nodes = new LscpNode[3];
115 LscpNode n = new LscpNode("NON_RECURSIVE", true);
116 nodes[0] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", n, true);
117 n = new LscpNode("NON_RECURSIVE", true);
118 nodes[1] = new LscpNode("DB_INSTRUMENTS", n, true);
119 nodes[2] = new LscpNode("LOST", new LscpNode("DB_INSTRUMENT_FILES", true, false));
120 find.setChildren(nodes);
121
122 // GET command
123 nodes = new LscpNode[34];
124 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", new LscpNode("INFO", true));
125 nodes[1] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", new LscpNode("INFO", true));
126 nodes[2] = new LscpNode("AUDIO_OUTPUT_DEVICE", new LscpNode("INFO", true));
127 nodes[3] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
128 nodes[4] = new LscpNode("AUDIO_OUTPUT_DRIVER", new LscpNode("INFO", true));
129 nodes[5] = new LscpNode("AUDIO_OUTPUT_DRIVER_PARAMETER", new LscpNode("INFO", true));
130 nodes[6] = new LscpNode("AVAILABLE_AUDIO_OUTPUT_DRIVERS", true, false);
131 nodes[7] = new LscpNode("AVAILABLE_ENGINES", true, false);
132 nodes[8] = new LscpNode("AVAILABLE_MIDI_INPUT_DRIVERS", true, false);
133 LscpNode getChn = new LscpNode("CHANNEL");
134 nodes[9] = getChn;
135 nodes[10] = new LscpNode("CHANNELS", true, false);
136 nodes[11] = new LscpNode("DB_INSTRUMENT", new LscpNode("INFO", true));
137 nodes[12] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
138 nodes[13] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("INFO", true));
139 nodes[14] = new LscpNode("DB_INSTRUMENTS", true);
140 nodes[15] = new LscpNode("DB_INSTRUMENTS_JOB", new LscpNode("INFO", true));
141 nodes[16] = new LscpNode("ENGINE", new LscpNode("INFO", true));
142 LscpNode getFile = new LscpNode("FILE");
143 nodes[17] = getFile;
144 nodes[18] = new LscpNode("FX_SEND", new LscpNode("INFO", true));
145 nodes[19] = new LscpNode("FX_SENDS");
146 nodes[20] = new LscpNode("MIDI_INPUT_DEVICE", new LscpNode("INFO", true));
147 nodes[21] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
148 nodes[22] = new LscpNode("MIDI_INPUT_DRIVER", new LscpNode("INFO", true));
149 nodes[23] = new LscpNode("MIDI_INPUT_DRIVER_PARAMETER", new LscpNode("INFO", true));
150 nodes[24] = new LscpNode("MIDI_INPUT_PORT", new LscpNode("INFO", true));
151 nodes[25] = new LscpNode("MIDI_INPUT_PORT_PARAMETER", new LscpNode("INFO", true));
152 nodes[26] = new LscpNode("MIDI_INSTRUMENT", new LscpNode("INFO", true));
153 nodes[27] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("INFO", true));
154 nodes[28] = new LscpNode("MIDI_INSTRUMENT_MAPS", true, false);
155 nodes[29] = new LscpNode("MIDI_INSTRUMENTS", new LscpNode("ALL", true, false), true);
156 nodes[30] = new LscpNode("SERVER", new LscpNode("INFO", true, false));
157 nodes[31] = new LscpNode("STREAMS", true, false);
158 nodes[32] = new LscpNode("VOICES", true, false);
159 nodes[33] = new LscpNode("VOLUME", true, false);
160 get.setChildren(nodes);
161
162 // GET CHANNEL command
163 nodes = new LscpNode[4];
164 LscpNode getChnBufFill = new LscpNode("BUFFER_FILL");
165 nodes[0] = getChnBufFill;
166 nodes[1] = new LscpNode("INFO", true);
167 nodes[2] = new LscpNode("STREAM_COUNT", true);
168 nodes[3] = new LscpNode("VOICE_COUNT", true);
169 getChn.setChildren(nodes);
170
171 // GET CHANNEL BUFFER_FILL command
172 nodes = new LscpNode[2];
173 nodes[0] = new LscpNode("BYTES", true);
174 nodes[1] = new LscpNode("PERCENTAGE", true);
175 getChnBufFill.setChildren(nodes);
176
177 // GET FILE command
178 nodes = new LscpNode[2];
179 nodes[0] = new LscpNode("INSTRUMENT", new LscpNode("INFO", true));
180 nodes[1] = new LscpNode("INSTRUMENTS", true);
181 getFile.setChildren(nodes);
182
183 // LIST command
184 nodes = new LscpNode[12];
185 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
186 nodes[1] = new LscpNode("AVAILABLE_AUDIO_OUTPUT_DRIVERS", true, false);
187 nodes[2] = new LscpNode("AVAILABLE_ENGINES", true, false);
188 nodes[3] = new LscpNode("AVAILABLE_MIDI_INPUT_DRIVERS", true, false);
189 nodes[4] = new LscpNode("CHANNELS", true, false);
190 nodes[5] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
191 nodes[6] = new LscpNode("DB_INSTRUMENTS", true);
192 nodes[7] = new LscpNode("FILE", new LscpNode("INSTRUMENTS", true));
193 nodes[8] = new LscpNode("FX_SENDS");
194 nodes[9] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
195 nodes[10] = new LscpNode("MIDI_INSTRUMENT_MAPS", true, false);
196 nodes[11] = new LscpNode("MIDI_INSTRUMENTS", true);
197 list.setChildren(nodes);
198
199 // LOAD command
200 nodes = new LscpNode[2];
201 nodes[0] = new LscpNode("ENGINE", true);
202 nodes[1] = new LscpNode("INSTRUMENT", new LscpNode("NON_MODAL"), true);
203 load.setChildren(nodes);
204
205 // MOVE command
206 nodes = new LscpNode[2];
207 nodes[0] = new LscpNode("DB_INSTRUMENT", true);
208 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY", true);
209 move.setChildren(nodes);
210
211 // REMOVE command
212 nodes = new LscpNode[4];
213 nodes[0] = new LscpNode("CHANNEL", true);
214 nodes[1] = new LscpNode("DB_INSTRUMENT", true);
215 nodes[2] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("FORCE", true), true);
216 nodes[3] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("ALL", true, false), true);
217 remove.setChildren(nodes);
218
219 // SET command
220 nodes = new LscpNode[13];
221 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", true);
222 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_PARAMETER", true);
223 LscpNode setChn = new LscpNode("CHANNEL");
224 nodes[2] = setChn;
225 LscpNode setDbInstr = new LscpNode("DB_INSTRUMENT");
226 nodes[3] = setDbInstr;
227 LscpNode setDbDir = new LscpNode("DB_INSTRUMENT_DIRECTORY");
228 nodes[4] = setDbDir;
229 nodes[5] = new LscpNode("ECHO", true);
230 LscpNode setFxSend = new LscpNode("FX_SEND");
231 nodes[6] = setFxSend;
232 nodes[7] = new LscpNode("MIDI_INPUT_DEVICE_PARAMETER", true);
233 nodes[8] = new LscpNode("MIDI_INPUT_PORT_PARAMETER", true);
234 nodes[9] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("NAME", true));
235 nodes[10] = new LscpNode("STREAMS", true);
236 nodes[11] = new LscpNode("VOICES", true);
237 nodes[12] = new LscpNode("VOLUME", true);
238 set.setChildren(nodes);
239
240 // SET CHANNEL command
241 nodes = new LscpNode[12];
242 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
243 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
244 nodes[2] = new LscpNode("AUDIO_OUTPUT_TYPE", true);
245 nodes[3] = new LscpNode("MIDI_INPUT", true);
246 nodes[4] = new LscpNode("MIDI_INPUT_CHANNEL", true);
247 nodes[5] = new LscpNode("MIDI_INPUT_DEVICE", true);
248 nodes[6] = new LscpNode("MIDI_INPUT_PORT", true);
249 nodes[7] = new LscpNode("MIDI_INPUT_TYPE", true);
250 nodes[8] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
251 nodes[9] = new LscpNode("MUTE", true);
252 nodes[10] = new LscpNode("SOLO", true);
253 nodes[11] = new LscpNode("VOLUME", true);
254 setChn.setChildren(nodes);
255
256 // SET DB_INSTRUMENT
257 nodes = new LscpNode[3];
258 nodes[0] = new LscpNode("DESCRIPTION", true);
259 nodes[1] = new LscpNode("FILE_PATH", true);
260 nodes[2] = new LscpNode("NAME", true);
261 setDbInstr.setChildren(nodes);
262
263 // SET DB_INSTRUMENT_DIRECTORY
264 nodes = new LscpNode[2];
265 nodes[0] = new LscpNode("NAME", true);
266 nodes[1] = new LscpNode("DESCRIPTION", true);
267 setDbDir.setChildren(nodes);
268
269 // SET FX_SEND command
270 nodes = new LscpNode[4];
271 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
272 nodes[1] = new LscpNode("LEVEL", true);
273 nodes[2] = new LscpNode("MIDI_CONTROLLER", true);
274 nodes[3] = new LscpNode("NAME", true);
275 setFxSend.setChildren(nodes);
276
277 // SUBSCRIBE command
278 nodes = new LscpNode[26];
279 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
280 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
281 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
282 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
283 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
284 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
285 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
286 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
287 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
288 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
289 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
290 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
291 nodes[12] = new LscpNode("FX_SEND_COUNT", true, false);
292 nodes[13] = new LscpNode("FX_SEND_INFO", true, false);
293 nodes[14] = new LscpNode("GLOBAL_INFO", true, false);
294 nodes[15] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
295 nodes[16] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
296 nodes[17] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
297 nodes[18] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
298 nodes[19] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
299 nodes[20] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
300 nodes[21] = new LscpNode("MISCELLANEOUS", true, false);
301 nodes[22] = new LscpNode("STREAM_COUNT", true, false);
302 nodes[23] = new LscpNode("TOTAL_STREAM_COUNT", true, false);
303 nodes[24] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
304 nodes[25] = new LscpNode("VOICE_COUNT", true, false);
305 subscribe.setChildren(nodes);
306
307 // UNSUBSCRIBE command
308 nodes = new LscpNode[25];
309 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
310 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
311 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
312 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
313 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
314 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
315 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
316 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
317 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
318 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
319 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
320 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
321 nodes[12] = new LscpNode("FX_SEND_COUNT", true, false);
322 nodes[13] = new LscpNode("FX_SEND_INFO", true, false);
323 nodes[14] = new LscpNode("GLOBAL_INFO", true, false);
324 nodes[15] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
325 nodes[16] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
326 nodes[17] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
327 nodes[18] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
328 nodes[19] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
329 nodes[20] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
330 nodes[21] = new LscpNode("MISCELLANEOUS", true, false);
331 nodes[22] = new LscpNode("STREAM_COUNT", true, false);
332 nodes[23] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
333 nodes[24] = new LscpNode("VOICE_COUNT", true, false);
334 unsubscribe.setChildren(nodes);
335 }
336
337 /** Forbits the instantiation of this class. */
338 private
339 LscpTree() { }
340
341 /**
342 * Gets the root node of the tree.
343 */
344 public static LscpNode
345 getRoot() { return rootNode; }
346 }

  ViewVC Help
Powered by ViewVC