/[svn]/jlscp/trunk/src/org/linuxsampler/lscp/SamplerChannel.java
ViewVC logotype

Contents of /jlscp/trunk/src/org/linuxsampler/lscp/SamplerChannel.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1421 - (show annotations) (download)
Sun Oct 14 18:08:45 2007 UTC (16 years, 6 months ago) by iliev
File size: 11248 byte(s)
* Client: renamed editInstrument to editChannelInstrument
* added extended support for escape sequences in LSCP response fields

1 /*
2 * jlscp - a java LinuxSampler control protocol API
3 *
4 * Copyright (C) 2005-2006 Grigor Iliev <grigor@grigoriliev.com>
5 *
6 * This file is part of jlscp.
7 *
8 * jlscp 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 * jlscp 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 jlscp; 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.linuxsampler.lscp;
24
25 import static org.linuxsampler.lscp.Parser.*;
26
27 /**
28 * Provides information about the current settings of a specific sampler channel.
29 * @author Grigor Iliev
30 */
31 public class SamplerChannel implements Parseable {
32 /** Indicates that the channel is muted because of the presence of a solo channel. */
33 private final static int MUTED_BY_SOLO = -1;
34
35 private int chnId = -1;
36
37 private SamplerEngine engine = null;
38 private int aoDevice = -1;
39 private int aoChannels = 0;
40 private Integer[] aor = null;
41 private String instrFile = null;
42 private int instrIdx = 0;
43 private String instrName = null;
44 private int instrStat = 0;
45 private int miDev = -1;
46 private int miPort = 0;
47 private int miChn = -1;
48 private float vol = 0;
49 private int mute = 0;
50 private boolean solo = false;
51 private int midiInstrumentMapId = -1;
52
53 /** Creates a new instance of SamplerChannel */
54 public
55 SamplerChannel() {
56 }
57
58 /**
59 * Creates a new instance of <code>SamplerChannel</code> and parses the information
60 * about a specific sampler channel described by <code>resultSet</code>.
61 * @param resultSet An array with information categories about a sampler channel.
62 * @throws LscpException If the parse fail.
63 */
64 public
65 SamplerChannel(String[] resultSet) throws LscpException {
66 for(String s : resultSet)
67 if(!parse(s)) Client.getLogger().info(LscpI18n.getLogMsg("unknownLine", s));
68 }
69
70 /**
71 * Gets the sampler channel number.
72 * @return The sampler channel number or -1 if the sampler channel number is not set.
73 */
74 public int
75 getChannelId() { return chnId; }
76
77 /**
78 * Sets the sampler channel number.
79 * @param id The new sampler channel number.
80 */
81 public void
82 setChannelId(int id) { chnId = id; }
83
84 /**
85 * Gets the engine that is deployed on the sampler channel.
86 * @return The engine that is deployed on the sampler channel
87 * or <code>null</code> if there is no engine deployed yet for this sampler channel.
88 */
89 public SamplerEngine
90 getEngine() { return engine; }
91
92 /**
93 * Associates the specified sampler engine to this sampler channel.
94 * @param engine A <code>SamplerEngine</code> instance containing the information
95 * about the engine to be assigned to this channel.
96 */
97 public void
98 setEngine(SamplerEngine engine) { this.engine = engine; }
99
100 /**
101 * Gets the numerical ID of the audio output device which is currently connected
102 * to this sampler channel to output the audio signal.
103 *
104 * @return The numerical ID of the audio output device or -1 if there is no
105 * device connected to this sampler channel.
106 */
107 public int
108 getAudioOutputDevice() { return aoDevice; }
109
110 /**
111 * Gets the number of output channels the sampler channel offers.
112 * @return The number of output channels the sampler channel offers.
113 */
114 public int
115 getAudioOutputChannels() { return aoChannels; }
116
117 /**
118 * Gets a list which reflects to which audio channel of the selected audio output device
119 * each sampler output channel is routed to. The number of the array's position represents
120 * the sampler output channel and the value at the specified position represents
121 * to which channel of the selected audio output device the
122 * sampler output channel is routed to.
123 * @return A list which reflects to which audio channel of the selected audio output device
124 * each sampler output channel is routed to.
125 */
126 public Integer[]
127 getAudioOutputRouting() { return aor; }
128
129 /**
130 * Gets the file name of the loaded instrument.
131 * @return The file name of the loaded instrument.
132 * or <code>null</code> if there is no instrument yet loaded for this sampler channel.
133 */
134 public String
135 getInstrumentFile() { return instrFile; }
136
137 /**
138 * Gets the instrument index number of the loaded instrument.
139 * @return The instrument index number of the loaded instrument.
140 */
141 public int
142 getInstrumentIndex() { return instrIdx; }
143
144 /**
145 * Gets the name of the loaded instrument.
146 * @return The name of the loaded instrument or
147 * <code>null</code> if there is no instrument loaded.
148 */
149 public String
150 getInstrumentName() { return instrName; }
151
152 /**
153 * Gets the instrument status - an integer values from 0 to 100 indicating loading
154 * progress percentage for the instrument. Negative value indicates a loading exception.
155 * Value of 100 indicates that the instrument is fully loaded.
156 * @return The instrument status.
157 */
158 public int
159 getInstrumentStatus() { return instrStat; }
160
161 /**
162 * Gets the numerical ID of the MIDI input device which is currently connected
163 * to this sampler channel to deliver MIDI input commands.
164 * @return The numerical ID of the MIDI input device which is currently connected
165 * to this sampler channel to deliver MIDI input commands or -1 if there is no device
166 * connected to this sampler channel.
167 */
168 public int
169 getMidiInputDevice() { return miDev; }
170
171 /**
172 * Gets the port number of the MIDI input device.
173 * @return The port number of the MIDI input device.
174 */
175 public int
176 getMidiInputPort() { return miPort; }
177
178 /**
179 * Gets the MIDI input channel number this sampler channel should listen to
180 * or -1 to listen on all MIDI channels.
181 * @return The MIDI input channel number this sampler channel should listen to
182 * or -1 to listen on all MIDI channels.
183 */
184 public int
185 getMidiInputChannel() { return miChn; }
186
187 /**
188 * Gets the channel volume factor. Value less then 1.0 means attenuation,
189 * value greater then 1.0 means amplification.
190 * @return The channel volume factor.
191 */
192 public float
193 getVolume() { return vol; }
194
195 /**
196 * Determines whether this channel is muted.
197 * @return <code>true</code> if the channel is muted, <code>false</code> otherwise.
198 */
199 public boolean
200 isMuted() { return mute != 0; }
201
202 /**
203 * Determines whether this channel is muted because of the presence of a solo channel.
204 * All channels, muted because of the presence of a solo channel, will be
205 * automatically unmuted when there are no solo channels left.
206 * @return <code>true</code> if the channel is muted because of the presence of a solo
207 * channel, <code>false</code> otherwise.
208 */
209 public boolean
210 isMutedBySolo() { return mute == MUTED_BY_SOLO; }
211
212 /**
213 * Determines whether this channel is a solo channel.
214 * @return <code>true</code> if the channel is a solo channel, <code>false</code> otherwise.
215 */
216 public boolean
217 isSoloChannel() { return solo; }
218
219 /**
220 * Gets the numerical id of the MIDI instrument
221 * map, to which this sampler channel is assigned to.
222 * @return The numerical id of the MIDI instrument map, to
223 * which this sampler channel is assigned to, or <code>-1</code>
224 * if no MIDI instrument map is assigned to this sampler
225 * channel and <code>-2</code> if the channel is assigned
226 * to the default MIDI instrument map.
227 * @see #isUsingDefaultMidiInstrumentMap
228 */
229 public int
230 getMidiInstrumentMapId() { return midiInstrumentMapId; }
231
232 /**
233 * Determines whether the sampler channel is
234 * assigned to the default MIDI instrument map.
235 * @return <code>true</code> if the sampler channel is assigned
236 * to the default MIDI instrument map, <code>false</code> otherwise.
237 */
238 public boolean
239 isUsingDefaultMidiInstrumentMap() { return getMidiInstrumentMapId() == -2; }
240
241 /**
242 * Parses a line of text.
243 * @param s The string to be parsed.
244 * @return <code>true</code> if the line has been processed, <code>false</code> otherwise.
245 * @throws LscpException If some error occurs.
246 */
247 public boolean
248 parse(String s) throws LscpException {
249 if(s.startsWith("ENGINE_NAME: ")) {
250 s = s.substring("ENGINE_NAME: ".length());
251 if(s.equals("NONE")) engine = null;
252 else {
253 engine = new SamplerEngine();
254 engine.setName(s);
255 }
256 } else if(s.startsWith("AUDIO_OUTPUT_DEVICE: ")) {
257 s = s.substring("AUDIO_OUTPUT_DEVICE: ".length());
258 if(s.equals("NONE")) aoDevice = -1;
259 else aoDevice = Parser.parseInt(s);
260 } else if(s.startsWith("AUDIO_OUTPUT_CHANNELS: ")) {
261 s = s.substring("AUDIO_OUTPUT_CHANNELS: ".length());
262 if(s.equals("NONE")) aoChannels = -1;
263 else aoChannels = Parser.parseInt(s);
264 } else if(s.startsWith("AUDIO_OUTPUT_ROUTING: ")) {
265 s = s.substring("AUDIO_OUTPUT_ROUTING: ".length());
266 aor = Parser.parseIntList(s);
267 } else if(s.startsWith("INSTRUMENT_FILE: ")) {
268 s = s.substring("INSTRUMENT_FILE: ".length());
269 if(s.equals("NONE")) instrFile = null;
270 else instrFile = s;
271 } else if(s.startsWith("INSTRUMENT_NR: ")) {
272 s = s.substring("INSTRUMENT_NR: ".length());
273 if(s.equals("NONE")) instrIdx = -1;
274 else instrIdx = Parser.parseInt(s);
275 } else if(s.startsWith("INSTRUMENT_NAME: ")) {
276 s = s.substring("INSTRUMENT_NAME: ".length());
277 if(s.equals("NONE")) instrName = null;
278 else instrName = toNonEscapedString(s);
279 } else if(s.startsWith("INSTRUMENT_STATUS: ")) {
280 s = s.substring("INSTRUMENT_STATUS: ".length());
281 instrStat = Parser.parseInt(s);
282 } else if(s.startsWith("MIDI_INPUT_DEVICE: ")) {
283 s = s.substring("MIDI_INPUT_DEVICE: ".length());
284 if(s.equals("NONE")) miDev = -1;
285 else miDev = Parser.parseInt(s);
286 } else if(s.startsWith("MIDI_INPUT_PORT: ")) {
287 s = s.substring("MIDI_INPUT_PORT: ".length());
288 if(s.equals("NONE")) miPort = -1;
289 else miPort = Parser.parseInt(s);
290 } else if(s.startsWith("MIDI_INPUT_CHANNEL: ")) {
291 s = s.substring("MIDI_INPUT_CHANNEL: ".length());
292 if(s.equals("ALL")) miChn = -1;
293 else miChn = Parser.parseInt(s);
294 } else if(s.startsWith("VOLUME: ")) {
295 s = s.substring("VOLUME: ".length());
296 try { vol = Float.parseFloat(s); }
297 catch(NumberFormatException x) { throw new LscpException (
298 LscpI18n.getLogMsg("CommandFailed!"), x
299 );}
300 } else if(s.startsWith("MUTE: ")) {
301 s = s.substring("MUTE: ".length());
302 if(s.equals("MUTED_BY_SOLO")) mute = MUTED_BY_SOLO;
303 else mute = Boolean.parseBoolean(s) ? 1 : 0;
304 } else if(s.startsWith("SOLO: ")) {
305 s = s.substring("SOLO: ".length());
306 solo = Boolean.parseBoolean(s);
307 } else if(s.startsWith("MIDI_INSTRUMENT_MAP: ")) {
308 s = s.substring("MIDI_INSTRUMENT_MAP: ".length());
309 if(s.equals("NONE")) midiInstrumentMapId = -1;
310 else if(s.equals("DEFAULT")) midiInstrumentMapId = -2;
311 else midiInstrumentMapId = Parser.parseInt(s);
312 } else return false;
313
314 return true;
315 }
316
317 /**
318 * Returns the numerical ID of this sampler channel.
319 * @return The numerical ID of this sampler channel.
320 */
321 public String
322 toString() { return String.valueOf(getChannelId()); }
323 }

  ViewVC Help
Powered by ViewVC