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

Annotation of /jsampler/trunk/src/org/jsampler/task/Audio.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1867 - (hide annotations) (download)
Mon Mar 16 22:12:32 2009 UTC (15 years, 1 month ago) by iliev
File size: 9233 byte(s)
* proper handling of connection failures
* renamed Channels Panels to Channel Lanes
* code cleanup

1 iliev 1144 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4 iliev 1867 * Copyright (C) 2005-2009 Grigor Iliev <grigor@grigoriliev.com>
5 iliev 1144 *
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.task;
24    
25     import org.jsampler.AudioDeviceModel;
26     import org.jsampler.CC;
27     import org.jsampler.SamplerModel;
28    
29     import org.linuxsampler.lscp.AudioOutputDevice;
30     import org.linuxsampler.lscp.AudioOutputDriver;
31     import org.linuxsampler.lscp.Parameter;
32    
33     import static org.jsampler.JSI18n.i18n;
34    
35    
36     /**
37     * Provides the audio specific tasks.
38     * @author Grigor Iliev
39     */
40     public class Audio {
41     /** Forbits the instantiation of this class. */
42     private Audio() { }
43    
44     /**
45     * This task retrieves all audio output drivers currently
46     * available for the LinuxSampler instance.
47     */
48     public static class GetDrivers extends EnhancedTask<AudioOutputDriver[]> {
49     /** Creates a new instance of <code>GetDrivers</code>. */
50     public
51     GetDrivers() {
52     setTitle("Audio.GetDrivers_task");
53     setDescription(i18n.getMessage("Audio.GetDrivers.desc"));
54     }
55    
56     /** The entry point of the task. */
57 iliev 1867 @Override
58 iliev 1144 public void
59 iliev 1867 exec() throws Exception { setResult(CC.getClient().getAudioOutputDrivers()); }
60 iliev 1144 }
61 iliev 1327
62     /**
63     * This task retrieves detailed information about all parameters
64     * of the specified audio output driver.
65     */
66     public static class GetDriverParametersInfo extends EnhancedTask<Parameter[]> {
67     private String driver;
68     Parameter[] depList;
69    
70     /**
71     * Creates a new instance of <code>GetDriverParametersInfo</code>.
72     * @param depList - A dependences list.
73     */
74     public
75     GetDriverParametersInfo(String driver, Parameter... depList) {
76     setTitle("Audio.GetDriverParametersInfo_task");
77     setDescription(i18n.getMessage("Audio.GetDriverParametersInfo.desc"));
78    
79     this.driver = driver;
80     this.depList = depList;
81     }
82    
83     /** The entry point of the task. */
84 iliev 1867 @Override
85 iliev 1327 public void
86 iliev 1867 exec() throws Exception {
87     AudioOutputDriver d;
88     d = CC.getClient().getAudioOutputDriverInfo(driver, depList);
89     setResult(d.getParameters());
90 iliev 1327 }
91     }
92 iliev 1144
93     /**
94     * This task creates a new audio output device.
95     */
96     public static class CreateDevice extends EnhancedTask<Integer> {
97     private String driver;
98     private Parameter[] parameters;
99    
100    
101     /**
102     * Creates a new instance of <code>CreateDevice</code>.
103     * @param driver The desired audio output system.
104     * @param parameters An optional list of driver specific parameters.
105     */
106     public
107     CreateDevice(String driver, Parameter... parameters) {
108     setTitle("Audio.CreateDevice_task");
109     setDescription(i18n.getMessage("Audio.CreateDevice.desc"));
110    
111     this.driver = driver;
112     this.parameters = parameters;
113     }
114    
115     /** The entry point of the task. */
116 iliev 1867 @Override
117 iliev 1144 public void
118 iliev 1867 exec() throws Exception {
119     Integer deviceId = CC.getClient().createAudioOutputDevice(driver, parameters);
120     setResult(deviceId);
121 iliev 1144 }
122     }
123    
124     /**
125     * This task destroys the specified audio output device.
126     */
127     public static class DestroyDevice extends EnhancedTask {
128     private int deviceId;
129    
130    
131     /**
132     * Creates a new instance of <code>DestroyDevice</code>.
133     * @param deviceId The ID of the audio output device to be destroyed.
134     */
135     public
136     DestroyDevice(int deviceId) {
137     setTitle("Audio.DestroyDevice_task");
138     setDescription(i18n.getMessage("Audio.DestroyDevice.desc", deviceId));
139    
140     this.deviceId = deviceId;
141     }
142    
143     /** The entry point of the task. */
144 iliev 1867 @Override
145 iliev 1144 public void
146 iliev 1867 exec() throws Exception { CC.getClient().destroyAudioOutputDevice(deviceId); }
147 iliev 1144 }
148    
149     /**
150     * This task enables/disables a specific audio output device.
151     */
152     public static class EnableDevice extends EnhancedTask {
153     private int dev;
154     private boolean enable;
155    
156     /**
157     * Creates new instance of <code>EnableDevice</code>.
158     * @param dev The id of the device to be enabled/disabled.
159     * @param enable Specify <code>true</code> to enable the audio device;
160     * code>false</code> to disable it.
161     */
162     public
163     EnableDevice(int dev, boolean enable) {
164     setTitle("Audio.EnableDevice_task");
165     setDescription(i18n.getMessage("Audio.EnableDevice.desc", dev));
166    
167     this.dev = dev;
168     this.enable = enable;
169     }
170    
171     /** The entry point of the task. */
172 iliev 1867 @Override
173 iliev 1144 public void
174 iliev 1867 exec() throws Exception {
175     CC.getClient().enableAudioOutputDevice(dev, enable);
176 iliev 1144
177 iliev 1867 // Not needed, but eventually speeds up the change.
178     CC.getSamplerModel().getAudioDeviceById(dev).setActive(enable);
179 iliev 1144 }
180     }
181    
182     /**
183 iliev 1357 * This task alters a specific setting of an audio output device.
184     */
185     public static class SetDeviceParameter extends EnhancedTask {
186     private int dev;
187     private Parameter prm;
188    
189     /**
190     * Creates new instance of <code>SetDeviceParameter</code>.
191     * @param dev The id of the device whose parameter should be set.
192     * @param prm The parameter to be set.
193     */
194     public
195     SetDeviceParameter(int dev, Parameter prm) {
196     setTitle("Audio.SetDeviceParameter_task");
197     setDescription(i18n.getMessage("Audio.SetDeviceParameter.desc", dev));
198    
199     this.dev = dev;
200     this.prm = prm;
201     }
202    
203     /** The entry point of the task. */
204 iliev 1867 @Override
205 iliev 1357 public void
206 iliev 1867 exec() throws Exception {
207     CC.getClient().setAudioOutputDeviceParameter(dev, prm);
208 iliev 1357 }
209     }
210    
211     /**
212 iliev 1144 * This task alters a specific setting of an audio output channel.
213     */
214     public static class SetChannelParameter extends EnhancedTask {
215     private int dev;
216     private int channel;
217     private Parameter prm;
218    
219     /**
220     * Creates new instance of <code>SetChannelParameter</code>.
221 iliev 1357 * @param dev The id of the device whose channel parameter should be set.
222 iliev 1144 * @param channel The channel number.
223     * @param prm The parameter to be set.
224     */
225     public
226     SetChannelParameter(int dev, int channel, Parameter prm) {
227     setTitle("Audio.SetChannelParameter_task");
228     setDescription(i18n.getMessage("Audio.SetChannelParameter.desc"));
229    
230     this.dev = dev;
231     this.channel = channel;
232     this.prm = prm;
233     }
234    
235     /** The entry point of the task. */
236 iliev 1867 @Override
237 iliev 1144 public void
238 iliev 1867 exec() throws Exception {
239     CC.getClient().setAudioOutputChannelParameter(dev, channel, prm);
240 iliev 1144 }
241     }
242    
243     /**
244     * This task changes the channel number of the speicifed audio output device.
245     */
246     public static class SetChannelCount extends EnhancedTask {
247     private int deviceId;
248     private int channels;
249    
250     /**
251     * Creates new instance of <code>SetChannelCount</code>.
252     * @param deviceId The id of the device whose channels number will be changed.
253     * @param channels The new number of audio channels.
254     */
255     public
256     SetChannelCount(int deviceId, int channels) {
257     setTitle("SetAudioOutputChannelCount_task");
258     setDescription(i18n.getMessage("Audio.SetChannelCount.desc", deviceId));
259    
260     this.deviceId = deviceId;
261     this.channels = channels;
262     }
263    
264     /** The entry point of the task. */
265 iliev 1867 @Override
266 iliev 1144 public void
267 iliev 1867 exec() throws Exception {
268     CC.getClient().setAudioOutputChannelCount(deviceId, channels);
269 iliev 1144 }
270     }
271    
272    
273     /**
274     * This task updates the setting of an audio output device.
275     */
276     public static class UpdateDeviceInfo extends EnhancedTask {
277     private int dev;
278    
279     /**
280     * Creates new instance of <code>UpdateDeviceInfo</code>.
281     * @param dev The id of the device, which settings should be updated.
282     */
283     public
284     UpdateDeviceInfo(int dev) {
285     setTitle("Audio.UpdateDeviceInfo_task");
286     setDescription(i18n.getMessage("Audio.UpdateDeviceInfo.desc", dev));
287    
288     this.dev = dev;
289     }
290    
291     /** The entry point of the task. */
292 iliev 1867 @Override
293 iliev 1144 public void
294 iliev 1867 exec() throws Exception {
295     AudioOutputDevice d = CC.getClient().getAudioOutputDeviceInfo(dev);
296     CC.getSamplerModel().getAudioDeviceById(dev).setDeviceInfo(d);
297 iliev 1144 }
298     }
299    
300     /**
301     * This task updates the audio output device list.
302     */
303     public static class UpdateDevices extends EnhancedTask {
304     /** Creates a new instance of <code>UpdateDevices</code>. */
305     public
306     UpdateDevices() {
307     setTitle("Audio.UpdateDevices_task");
308     setDescription(i18n.getMessage("Audio.UpdateDevices.desc"));
309     }
310    
311     /** The entry point of the task. */
312 iliev 1867 @Override
313 iliev 1144 public void
314 iliev 1867 exec() throws Exception {
315     SamplerModel sm = CC.getSamplerModel();
316     Integer[] devIDs = CC.getClient().getAudioOutputDeviceIDs();
317    
318     boolean found = false;
319 iliev 1144
320 iliev 1867 for(AudioDeviceModel m : sm.getAudioDevices()) {
321     for(int i = 0; i < devIDs.length; i++) {
322     if(m.getDeviceId() == devIDs[i]) {
323     devIDs[i] = -1;
324     found = true;
325 iliev 1144 }
326     }
327    
328 iliev 1867 if(!found) sm.removeAudioDeviceById(m.getDeviceId());
329     found = false;
330     }
331    
332     AudioOutputDevice d;
333    
334     for(int id : devIDs) {
335     if(id >= 0) {
336     d = CC.getClient().getAudioOutputDeviceInfo(id);
337     sm.addAudioDevice(d);
338 iliev 1144 }
339     }
340     }
341     }
342    
343     }

  ViewVC Help
Powered by ViewVC