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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1767 - (hide annotations) (download)
Mon Sep 8 00:19:27 2008 UTC (15 years, 8 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 iliev 912 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4 iliev 1729 * Copyright (C) 2005-2008 Grigor Iliev <grigor@grigoriliev.com>
5 iliev 912 *
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 iliev 1143 * Provides the LSCP grammar represented in a tree structure.
27 iliev 912 * @author Grigor Iliev
28     */
29     public class LscpTree {
30     private static LscpNode rootNode;
31    
32     static {
33     LscpNode add = new LscpNode("ADD");
34 iliev 1143 LscpNode clear = new LscpNode("CLEAR", new LscpNode("MIDI_INSTRUMENTS", true, false));
35 iliev 1204 LscpNode copy = new LscpNode("COPY");
36 iliev 912 LscpNode create = new LscpNode("CREATE");
37     LscpNode destroy = new LscpNode("DESTROY");
38 iliev 1467 LscpNode edit = new LscpNode("EDIT");
39 iliev 1204 LscpNode find = new LscpNode("FIND");
40 iliev 1355 LscpNode format = new LscpNode("FORMAT", new LscpNode("INSTRUMENTS_DB", true, false));
41 iliev 912 LscpNode get = new LscpNode("GET");
42     LscpNode list = new LscpNode("LIST");
43     LscpNode load = new LscpNode("LOAD");
44 iliev 1143 LscpNode map = new LscpNode("MAP", new LscpNode("MIDI_INSTRUMENT", true));
45 iliev 1204 LscpNode move = new LscpNode("MOVE");
46 iliev 912 LscpNode quit = new LscpNode("QUIT", true, false);
47 iliev 1143 LscpNode remove = new LscpNode("REMOVE");
48 iliev 912 LscpNode reset = new LscpNode("RESET", new LscpNode("CHANNEL"), true, false);
49     LscpNode set = new LscpNode("SET");
50     LscpNode subscribe = new LscpNode("SUBSCRIBE");
51 iliev 1143 LscpNode unmap = new LscpNode("UNMAP", new LscpNode("MIDI_INSTRUMENT"), true);
52 iliev 912 LscpNode unsubscribe = new LscpNode("UNSUBSCRIBE");
53    
54     LscpNode[] cmds = {
55 iliev 1355 add, clear, copy, create, destroy, edit, find, format, get, list, load,
56     map, move, quit, remove, reset, set, subscribe, unmap, unsubscribe
57 iliev 912 };
58    
59     rootNode = new LscpNode("", cmds);
60    
61     // ADD command
62 iliev 1204 LscpNode[] nodes = new LscpNode[4];
63 iliev 1143 nodes[0] = new LscpNode("CHANNEL", true, false);
64 iliev 1204 nodes[1] = new LscpNode("DB_INSTRUMENT_DIRECTORY");
65     LscpNode addDbInstr = new LscpNode("DB_INSTRUMENTS", true);
66     nodes[2] = addDbInstr;
67 iliev 1767 nodes[3] = new LscpNode("MIDI_INSTRUMENT_MAP", true);
68 iliev 912 add.setChildren(nodes);
69    
70 iliev 1204 // 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 iliev 912 // CREATE command
93 iliev 1143 nodes = new LscpNode[3];
94 iliev 1767 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 iliev 912 create.setChildren(nodes);
98    
99     // DESTROY command
100 iliev 1143 nodes = new LscpNode[3];
101 iliev 1767 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 iliev 912 destroy.setChildren(nodes);
105    
106 iliev 1467 //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 iliev 1204 // FIND command
114 iliev 1767 nodes = new LscpNode[3];
115 iliev 1204 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 iliev 1767 nodes[2] = new LscpNode("LOST", new LscpNode("DB_INSTRUMENT_FILES", true, false));
120 iliev 1204 find.setChildren(nodes);
121    
122 iliev 912 // GET command
123 iliev 1729 nodes = new LscpNode[32];
124 iliev 1767 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 iliev 912 nodes[3] = new LscpNode("AUDIO_OUTPUT_DEVICES", true, false);
128 iliev 1767 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 iliev 912 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 iliev 1204 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 iliev 1767 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 iliev 1729 nodes[19] = new LscpNode("FX_SENDS");
146 iliev 1767 nodes[20] = new LscpNode("MIDI_INPUT_DEVICE", new LscpNode("INFO", true));
147 iliev 1729 nodes[21] = new LscpNode("MIDI_INPUT_DEVICES", true, false);
148 iliev 1767 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 iliev 1729 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 iliev 912 get.setChildren(nodes);
159    
160     // GET CHANNEL command
161     nodes = new LscpNode[4];
162 iliev 1767 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 iliev 912 getChn.setChildren(nodes);
168    
169 iliev 1767 // 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 iliev 912 // LIST command
182 iliev 1767 nodes = new LscpNode[12];
183 iliev 912 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 iliev 1204 nodes[5] = new LscpNode("DB_INSTRUMENT_DIRECTORIES", true);
189     nodes[6] = new LscpNode("DB_INSTRUMENTS", true);
190 iliev 1767 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 iliev 912 list.setChildren(nodes);
196    
197     // LOAD command
198     nodes = new LscpNode[2];
199 iliev 1767 nodes[0] = new LscpNode("ENGINE", true);
200 iliev 912 nodes[1] = new LscpNode("INSTRUMENT", new LscpNode("NON_MODAL"), true);
201     load.setChildren(nodes);
202    
203 iliev 1204 // 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 iliev 1143 // REMOVE command
210 iliev 1204 nodes = new LscpNode[4];
211 iliev 1767 nodes[0] = new LscpNode("CHANNEL", true);
212 iliev 1204 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 iliev 1143 remove.setChildren(nodes);
216    
217 iliev 912 // SET command
218 iliev 1204 nodes = new LscpNode[11];
219 iliev 1767 nodes[0] = new LscpNode("AUDIO_OUTPUT_CHANNEL_PARAMETER", true);
220     nodes[1] = new LscpNode("AUDIO_OUTPUT_DEVICE_PARAMETER", true);
221 iliev 912 LscpNode setChn = new LscpNode("CHANNEL");
222     nodes[2] = setChn;
223 iliev 1204 LscpNode setDbInstr = new LscpNode("DB_INSTRUMENT");
224     nodes[3] = setDbInstr;
225     LscpNode setDbDir = new LscpNode("DB_INSTRUMENT_DIRECTORY");
226     nodes[4] = setDbDir;
227 iliev 1767 nodes[5] = new LscpNode("ECHO", true);
228 iliev 1204 LscpNode setFxSend = new LscpNode("FX_SEND");
229     nodes[6] = setFxSend;
230 iliev 1767 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 iliev 912 set.setChildren(nodes);
235    
236     // SET CHANNEL command
237 iliev 1143 nodes = new LscpNode[12];
238 iliev 1767 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 iliev 912 setChn.setChildren(nodes);
251    
252 iliev 1204 // SET DB_INSTRUMENT
253 iliev 1767 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 iliev 1204 setDbInstr.setChildren(nodes);
258    
259     // SET DB_INSTRUMENT_DIRECTORY
260     nodes = new LscpNode[2];
261 iliev 1767 nodes[0] = new LscpNode("NAME", true);
262     nodes[1] = new LscpNode("DESCRIPTION", true);
263 iliev 1204 setDbDir.setChildren(nodes);
264    
265 iliev 1143 // SET FX_SEND command
266     nodes = new LscpNode[4];
267 iliev 1767 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 iliev 1204 setFxSend.setChildren(nodes);
272 iliev 1143
273 iliev 912 // SUBSCRIBE command
274 iliev 1767 nodes = new LscpNode[25];
275 iliev 1143 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 iliev 1767 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 iliev 912 subscribe.setChildren(nodes);
301    
302     // UNSUBSCRIBE command
303 iliev 1767 nodes = new LscpNode[25];
304 iliev 1143 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 iliev 1767 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 iliev 912 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