/[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 1767 - (show annotations) (download)
Mon Sep 8 00:19:27 2008 UTC (15 years, 7 months ago) by iliev
File size: 14674 byte(s)
* Added `Copy To' and `Move To' commands to the MIDI bank context menu
  and to the MIDI instrument context menu
* Added commands to the MIDI instrument context menu for moving
  a MIDI instrument to another program
  (right-click on a MIDI instrument and choose `Change Program')
* Added option to choose between zero-based and one-based
  MIDI bank/program numbering
  (choose Edit/Preferences, then click the `Advanced' button)
* Added option to choose whether to include MIDI instrument
  mappings when exporting a sampler configuration to LSCP script.
  (choose Edit/Preferences, then click the `Advanced' button)
* Added option to set the MIDI instrument loading in background
  when exporting MIDI instrument mappings to LSCP script.
  (choose Edit/Preferences, then click the `Advanced' button)
* Implemented an option to change the socket read timeout
  (choose Edit/Preferences, then click the `Backend' tab)
* Updated LscpTree
* Fantasia: Added option to hide the active stream/voice count statistic
  in the sampler channel's small view
  (choose Edit/Preferences, then click the `Channels' tab)
* Fantasia: `Turn off animation effects' checkbox moved to the `View' tab

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[32];
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("VOLUME", true, false);
158 get.setChildren(nodes);
159
160 // GET CHANNEL command
161 nodes = new LscpNode[4];
162 LscpNode getChnBufFill = new LscpNode("BUFFER_FILL");
163 nodes[0] = getChnBufFill;
164 nodes[1] = new LscpNode("INFO", true);
165 nodes[2] = new LscpNode("STREAM_COUNT", true);
166 nodes[3] = new LscpNode("VOICE_COUNT", true);
167 getChn.setChildren(nodes);
168
169 // GET CHANNEL BUFFER_FILL command
170 nodes = new LscpNode[2];
171 nodes[0] = new LscpNode("BYTES", true);
172 nodes[1] = new LscpNode("PERCENTAGE", true);
173 getChnBufFill.setChildren(nodes);
174
175 // GET FILE command
176 nodes = new LscpNode[2];
177 nodes[0] = new LscpNode("INSTRUMENT", new LscpNode("INFO", true));
178 nodes[1] = new LscpNode("INSTRUMENTS", true);
179 getFile.setChildren(nodes);
180
181 // LIST command
182 nodes = new LscpNode[12];
183 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
184 nodes[1] = new LscpNode("AVAILABLE_AUDIO_OUTPUT_DRIVERS", true, false);
185 nodes[2] = new LscpNode("AVAILABLE_ENGINES", true, false);
186 nodes[3] = new LscpNode("AVAILABLE_MIDI_INPUT_DRIVERS", true, false);
187 nodes[4] = new LscpNode("CHANNELS", true, false);
188 nodes[5] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
189 nodes[6] = new LscpNode("DB_INSTRUMENTS", true);
190 nodes[7] = new LscpNode("FILE", new LscpNode("INSTRUMENTS", true));
191 nodes[8] = new LscpNode("FX_SENDS");
192 nodes[9] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
193 nodes[10] = new LscpNode("MIDI_INSTRUMENT_MAPS", true, false);
194 nodes[11] = new LscpNode("MIDI_INSTRUMENTS", true);
195 list.setChildren(nodes);
196
197 // LOAD command
198 nodes = new LscpNode[2];
199 nodes[0] = new LscpNode("ENGINE", true);
200 nodes[1] = new LscpNode("INSTRUMENT", new LscpNode("NON_MODAL"), true);
201 load.setChildren(nodes);
202
203 // MOVE command
204 nodes = new LscpNode[2];
205 nodes[0] = new LscpNode("DB_INSTRUMENT", true);
206 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY", true);
207 move.setChildren(nodes);
208
209 // REMOVE command
210 nodes = new LscpNode[4];
211 nodes[0] = new LscpNode("CHANNEL", true);
212 nodes[1] = new LscpNode("DB_INSTRUMENT", true);
213 nodes[2] = new LscpNode("DB_INSTRUMENT_DIRECTORY", new LscpNode("FORCE", true), true);
214 nodes[3] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("ALL", true, false), true);
215 remove.setChildren(nodes);
216
217 // SET command
218 nodes = new LscpNode[11];
219 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", true);
220 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_PARAMETER", true);
221 LscpNode setChn = new LscpNode("CHANNEL");
222 nodes[2] = setChn;
223 LscpNode setDbInstr = new LscpNode("DB_INSTRUMENT");
224 nodes[3] = setDbInstr;
225 LscpNode setDbDir = new LscpNode("DB_INSTRUMENT_DIRECTORY");
226 nodes[4] = setDbDir;
227 nodes[5] = new LscpNode("ECHO", true);
228 LscpNode setFxSend = new LscpNode("FX_SEND");
229 nodes[6] = setFxSend;
230 nodes[7] = new LscpNode("MIDI_INPUT_DEVICE_PARAMETER", true);
231 nodes[8] = new LscpNode("MIDI_INPUT_PORT_PARAMETER", true);
232 nodes[9] = new LscpNode("MIDI_INSTRUMENT_MAP", new LscpNode("NAME", true));
233 nodes[10] = new LscpNode("VOLUME", true);
234 set.setChildren(nodes);
235
236 // SET CHANNEL command
237 nodes = new LscpNode[12];
238 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
239 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE", true);
240 nodes[2] = new LscpNode("AUDIO_OUTPUT_TYPE", true);
241 nodes[3] = new LscpNode("MIDI_INPUT", true);
242 nodes[4] = new LscpNode("MIDI_INPUT_CHANNEL", true);
243 nodes[5] = new LscpNode("MIDI_INPUT_DEVICE", true);
244 nodes[6] = new LscpNode("MIDI_INPUT_PORT", true);
245 nodes[7] = new LscpNode("MIDI_INPUT_TYPE", true);
246 nodes[8] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
247 nodes[9] = new LscpNode("MUTE", true);
248 nodes[10] = new LscpNode("SOLO", true);
249 nodes[11] = new LscpNode("VOLUME", true);
250 setChn.setChildren(nodes);
251
252 // SET DB_INSTRUMENT
253 nodes = new LscpNode[3];
254 nodes[0] = new LscpNode("DESCRIPTION", true);
255 nodes[1] = new LscpNode("FILE_PATH", true);
256 nodes[2] = new LscpNode("NAME", true);
257 setDbInstr.setChildren(nodes);
258
259 // SET DB_INSTRUMENT_DIRECTORY
260 nodes = new LscpNode[2];
261 nodes[0] = new LscpNode("NAME", true);
262 nodes[1] = new LscpNode("DESCRIPTION", true);
263 setDbDir.setChildren(nodes);
264
265 // SET FX_SEND command
266 nodes = new LscpNode[4];
267 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL", true);
268 nodes[1] = new LscpNode("LEVEL", true);
269 nodes[2] = new LscpNode("MIDI_CONTROLLER", true);
270 nodes[3] = new LscpNode("NAME", true);
271 setFxSend.setChildren(nodes);
272
273 // SUBSCRIBE command
274 nodes = new LscpNode[25];
275 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
276 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
277 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
278 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
279 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
280 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
281 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
282 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
283 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
284 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
285 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
286 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
287 nodes[12] = new LscpNode("FX_SEND_COUNT", true, false);
288 nodes[13] = new LscpNode("FX_SEND_INFO", true, false);
289 nodes[14] = new LscpNode("GLOBAL_INFO", true, false);
290 nodes[15] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
291 nodes[16] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
292 nodes[17] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
293 nodes[18] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
294 nodes[19] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
295 nodes[20] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
296 nodes[21] = new LscpNode("MISCELLANEOUS", true, false);
297 nodes[22] = new LscpNode("STREAM_COUNT", true, false);
298 nodes[23] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
299 nodes[24] = new LscpNode("VOICE_COUNT", true, false);
300 subscribe.setChildren(nodes);
301
302 // UNSUBSCRIBE command
303 nodes = new LscpNode[25];
304 nodes[0] = new LscpNode("AUDIO_OUTPUT_DEVICE_COUNT", true, false);
305 nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_INFO", true, false);
306 nodes[2] = new LscpNode("BUFFER_FILL", true, false);
307 nodes[3] = new LscpNode("CHANNEL_COUNT", true, false);
308 nodes[4] = new LscpNode("CHANNEL_INFO", true, false);
309 nodes[5] = new LscpNode("CHANNEL_MIDI", true, false);
310 nodes[6] = new LscpNode("DB_INSTRUMENT_DIRECTORY_COUNT", true, false);
311 nodes[7] = new LscpNode("DB_INSTRUMENT_DIRECTORY_INFO", true, false);
312 nodes[8] = new LscpNode("DB_INSTRUMENT_COUNT", true, false);
313 nodes[9] = new LscpNode("DB_INSTRUMENT_INFO", true, false);
314 nodes[10] = new LscpNode("DB_INSTRUMENTS_JOB_INFO", true, false);
315 nodes[11] = new LscpNode("DEVICE_MIDI", true, false);
316 nodes[12] = new LscpNode("FX_SEND_COUNT", true, false);
317 nodes[13] = new LscpNode("FX_SEND_INFO", true, false);
318 nodes[14] = new LscpNode("GLOBAL_INFO", true, false);
319 nodes[15] = new LscpNode("MIDI_INPUT_DEVICE_COUNT", true, false);
320 nodes[16] = new LscpNode("MIDI_INPUT_DEVICE_INFO", true, false);
321 nodes[17] = new LscpNode("MIDI_INSTRUMENT_COUNT", true, false);
322 nodes[18] = new LscpNode("MIDI_INSTRUMENT_INFO", true, false);
323 nodes[19] = new LscpNode("MIDI_INSTRUMENT_MAP_COUNT", true, false);
324 nodes[20] = new LscpNode("MIDI_INSTRUMENT_MAP_INFO", true, false);
325 nodes[21] = new LscpNode("MISCELLANEOUS", true, false);
326 nodes[22] = new LscpNode("STREAM_COUNT", true, false);
327 nodes[23] = new LscpNode("TOTAL_VOICE_COUNT", true, false);
328 nodes[24] = new LscpNode("VOICE_COUNT", true, false);
329 unsubscribe.setChildren(nodes);
330 }
331
332 /** Forbits the instantiation of this class. */
333 private
334 LscpTree() { }
335
336 /**
337 * Gets the root node of the tree.
338 */
339 public static LscpNode
340 getRoot() { return rootNode; }
341 }

  ViewVC Help
Powered by ViewVC