/[svn]/jsampler/trunk/src/org/jsampler/view/std/JSFxSendsPane.java
ViewVC logotype

Diff of /jsampler/trunk/src/org/jsampler/view/std/JSFxSendsPane.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1865 by iliev, Sat May 31 23:04:01 2008 UTC revision 1866 by iliev, Sun Mar 15 19:40:29 2009 UTC
# Line 1  Line 1 
1  /*  /*
2   *   JSampler - a java front-end for LinuxSampler   *   JSampler - a java front-end for LinuxSampler
3   *   *
4   *   Copyright (C) 2005-2008 Grigor Iliev <grigor@grigoriliev.com>   *   Copyright (C) 2005-2009 Grigor Iliev <grigor@grigoriliev.com>
5   *   *
6   *   This file is part of JSampler.   *   This file is part of JSampler.
7   *   *
# Line 28  import java.awt.Dimension; Line 28  import java.awt.Dimension;
28  import java.awt.event.ActionEvent;  import java.awt.event.ActionEvent;
29  import java.awt.event.ActionListener;  import java.awt.event.ActionListener;
30    
31    import java.util.Vector;
32    
33  import javax.swing.AbstractAction;  import javax.swing.AbstractAction;
34  import javax.swing.Action;  import javax.swing.Action;
35  import javax.swing.BorderFactory;  import javax.swing.BorderFactory;
# Line 58  import net.sf.juife.event.TaskListener; Line 60  import net.sf.juife.event.TaskListener;
60    
61  import org.jsampler.AudioDeviceModel;  import org.jsampler.AudioDeviceModel;
62  import org.jsampler.CC;  import org.jsampler.CC;
 import org.jsampler.HF;  
63  import org.jsampler.JSPrefs;  import org.jsampler.JSPrefs;
64  import org.jsampler.SamplerChannelModel;  import org.jsampler.SamplerChannelModel;
65    
# Line 96  public class JSFxSendsPane extends JPane Line 97  public class JSFxSendsPane extends JPane
97          private final ChannelRoutingTable channelRoutingTable;          private final ChannelRoutingTable channelRoutingTable;
98                    
99          private FxSend fxSend = null;          private FxSend fxSend = null;
100    
101            private final int[] undefinedControllers = {
102                    3, 9, 14, 15, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 85, 86, 87, 88, 89, 90,
103                    102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119
104            };
105    
106            private int lastUsedController = 0;
107                    
108          /**          /**
109           * Creates a new instance of <code>JSFxSendsPane</code>.           * Creates a new instance of <code>JSFxSendsPane</code>.
# Line 139  public class JSFxSendsPane extends JPane Line 147  public class JSFxSendsPane extends JPane
147                  updateFxSend();                  updateFxSend();
148                                    
149                  Dimension d = getMinimumSize();                  Dimension d = getMinimumSize();
150                  int w = d.width > 500 ? d.width : 500;                  int w = d.width > 600 ? d.width : 600;
151                  int h = d.height > 300 ? d.height : 300;                  int h = d.height > 300 ? d.height : 300;
152                  setPreferredSize(new Dimension(w, h));                  setPreferredSize(new Dimension(w, h));
153                  splitPane.setDividerLocation(200);                  splitPane.setDividerLocation(200);
# Line 177  public class JSFxSendsPane extends JPane Line 185  public class JSFxSendsPane extends JPane
185                    
186          protected JPanel          protected JPanel
187          createRightPane() {          createRightPane() {
188                  for(int i = 0; i < 128; i++) cbMidiCtrls.addItem(new Integer(i));                  for(int i = 0; i < 128; i++) {
189                            String s = "[" + i + "] " + getMidiControllerName(i);
190                            cbMidiCtrls.addItem(s);
191                    }
192                    
193                    cbMidiCtrls.setMinimumSize(new Dimension(100, cbMidiCtrls.getMinimumSize().height));
194                                    
195                  cbMidiCtrls.addActionListener(new ActionListener() {                  cbMidiCtrls.addActionListener(new ActionListener() {
196                          public void                          public void
# Line 190  public class JSFxSendsPane extends JPane Line 203  public class JSFxSendsPane extends JPane
203                                  if(ctrl == fxSend.getMidiController()) {                                  if(ctrl == fxSend.getMidiController()) {
204                                          return;                                          return;
205                                  }                                  }
206                                    
207                                    lastUsedController = ctrl;
208                                  channelModel.setBackendFxSendMidiController(fxs, ctrl);                                  channelModel.setBackendFxSendMidiController(fxs, ctrl);
209                          }                          }
210                  });                  });
# Line 232  public class JSFxSendsPane extends JPane Line 246  public class JSFxSendsPane extends JPane
246                  return rightPane;                  return rightPane;
247          }          }
248                    
249            private String
250            getMidiControllerName(int i) {
251                    switch(i) {
252                            case 0: return "Bank Select";
253                            case 1: return "Modulation Wheel or Lever";
254                            case 2: return "Breath Controller";
255                            case 4: return "Foot Controller";
256                            case 5: return "Portamento Time";
257                            case 6: return "Data Entry MSB";
258                            case 7: return "Channel Volume";
259                            case 8: return "Balance";
260                            case 10: return "Pan";
261                            case 11: return "Expression Controller";
262                            case 12: return "Effect Control 1";
263                            case 13: return "Effect Control 2";
264                            case 16: return "General Purpose Controller 1";
265                            case 17: return "General Purpose Controller 2";
266                            case 18: return "General Purpose Controller 3";
267                            case 19: return "General Purpose Controller 4";
268                            case 32: return "LSB for Control 0 (Bank Select)";
269                            case 33: return "LSB for Control 1 (Modulation Wheel or Lever)";
270                            case 34: return "LSB for Control 2 (Breath Controller)";
271                            case 35: return "LSB for Control 3 (Undefined)";
272                            case 36: return "LSB for Control 4 (Foot Controller)";
273                            case 37: return "LSB for Control 5 (Portamento Time)";
274                            case 38: return "LSB for Control 6 (Data Entry)";
275                            case 39: return "LSB for Control 7 (Channel Volume)";
276                            case 40: return "LSB for Control 8 (Balance)";
277                            case 41: return "LSB for Control 9 (Undefined)";
278                            case 42: return "LSB for Control 10 (Pan)";
279                            case 43: return "LSB for Control 11 (Expression Controller)";
280                            case 44: return "LSB for Control 12 (Effect control 1)";
281                            case 45: return "LSB for Control 13 (Effect control 2)";
282                            case 46: return "LSB for Control 14 (Undefined)";
283                            case 47: return "LSB for Control 15 (Undefined)";
284                            case 48: return "LSB for Control 16 (General Purpose Controller 1)";
285                            case 49: return "LSB for Control 17 (General Purpose Controller 2)";
286                            case 50: return "LSB for Control 18 (General Purpose Controller 3)";
287                            case 51: return "LSB for Control 19 (General Purpose Controller 4)";
288                            case 52: return "LSB for Control 20 (Undefined)";
289                            case 53: return "LSB for Control 21 (Undefined)";
290                            case 54: return "LSB for Control 22 (Undefined)";
291                            case 55: return "LSB for Control 23 (Undefined)";
292                            case 56: return "LSB for Control 24 (Undefined)";
293                            case 57: return "LSB for Control 25 (Undefined)";
294                            case 58: return "LSB for Control 26 (Undefined)";
295                            case 59: return "LSB for Control 27 (Undefined)";
296                            case 60: return "LSB for Control 28 (Undefined)";
297                            case 61: return "LSB for Control 29 (Undefined)";
298                            case 62: return "LSB for Control 30 (Undefined)";
299                            case 63: return "LSB for Control 31 (Undefined)";
300                            case 64: return "Damper Pedal on/off (Sustain)";
301                            case 65: return "Portamento On/Off";
302                            case 66: return "Sostenuto On/Off";
303                            case 67: return "Soft Pedal On/Off";
304                            case 68: return "Legato Footswitch";
305                            case 69: return "Hold 2";
306                            case 70: return "Sound Controller 1 (default: Sound Variation)";
307                            case 71: return "Sound Controller 2 (default: Timbre/Harmonic Intens.)";
308                            case 72: return "Sound Controller 3 (default: Release Time)";
309                            case 73: return "Sound Controller 4 (default: Attack Time)";
310                            case 74: return "Sound Controller 5 (default: Brightness)";
311                            case 75: return "Sound Controller 6 (default: Decay Time";
312                            case 76: return "Sound Controller 7 (default: Vibrato Rate)";
313                            case 77: return "Sound Controller 8 (default: Vibrato Depth)";
314                            case 78: return "Sound Controller 9 (default: Vibrato Delay)";
315                            case 79: return "Sound Controller 10 (default: undefined)";
316                            case 80: return "General Purpose Controller 5";
317                            case 81: return "General Purpose Controller 6";
318                            case 82: return "General Purpose Controller 7";
319                            case 83: return "General Purpose Controller 8";
320                            case 84: return "Portamento Control";
321                            case 91: return "Effects 1 Depth (default: Reverb Send Level)";
322                            case 92: return "Effects 2 Depth (formerly Tremolo Depth)";
323                            case 93: return "Effects 3 Depth(default: Chorus Send Level)";
324                            case 94: return "Effects 4 Depth (formerly Celeste [Detune] Depth)";
325                            case 95: return "Effects 5 Depth (formerly Phaser Depth)";
326                            case 96: return "Data Increment (Data Entry +1)";
327                            case 97: return "Data Decrement (Data Entry -1)";
328                            case 98: return "Non-Registered Parameter Number (NRPN) - LSB";
329                            case 99: return "Non-Registered Parameter Number (NRPN) - MSB";
330                            case 100: return "Registered Parameter Number (RPN) - LSB";
331                            case 101: return "Registered Parameter Number (RPN) - MSB";
332                            case 120: return "All Sound Off (Channel Mode Message)";
333                            case 121: return "Reset All Controllers (Channel Mode Message)";
334                            case 122: return "Local Control On/Off (Channel Mode Message)";
335                            case 123: return "All Notes Off (Channel Mode Message)";
336                            case 124: return "Omni Mode Off (Channel Mode Message)";
337                            case 125: return "Omni Mode On (Channel Mode Message)";
338                            case 126: return "Mono Mode On (Channel Mode Message)";
339                            case 127: return "Poly Mode On (Channel Mode Message)";
340                            default: return "Undefined";
341                    }
342            }
343    
344            public boolean
345            isUndefinedController(int ctrl) {
346                    for(int i = 0; i < undefinedControllers.length; i++) {
347                            if(ctrl == undefinedControllers[i]) return true;
348                    }
349    
350                    return false;
351            }
352    
353            private int
354            findUndefinedController(int ctrl, Vector<Integer> excludes) {
355                    for(int i = 0; i < undefinedControllers.length; i++) {
356                            int c = undefinedControllers[i];
357                            if(c > ctrl) { if(!excludes.contains(c)) return c; }
358                    }
359    
360                    for(int i = 0; i < undefinedControllers.length; i++) {
361                            int c = undefinedControllers[i];
362                            if(c < ctrl) { if(!excludes.contains(c)) return c; }
363                            else break;
364                    }
365    
366                    return -1;
367            }
368    
369            public int
370            getUndefinedController() {
371                    int c = lastUsedController;
372                    if(c > 119) c = 0;
373                    FxSend[] fxSends = getChannelModel().getFxSends();
374                    Vector<Integer> v = new Vector<Integer>();
375    
376                    for(int i = fxSends.length - 1; i >= 0; i--) {
377                            int c2 = fxSends[i].getMidiController();
378                            if(isUndefinedController(c2)) v.add(c2);
379                    }
380    
381                    int ctrl = findUndefinedController(c, v);
382    
383                    return ctrl != -1 ? ctrl : 3;
384            }
385            
386          private void          private void
387          setVolume() {          setVolume() {
388                  if(fxSend == null || slVolume.getValueIsAdjusting()) return;                  if(fxSend == null || slVolume.getValueIsAdjusting()) return;
# Line 244  public class JSFxSendsPane extends JPane Line 395  public class JSFxSendsPane extends JPane
395                  channelModel.setBackendFxSendLevel(fxSend.getFxSendId(), vol);                  channelModel.setBackendFxSendLevel(fxSend.getFxSendId(), vol);
396          }          }
397                    
398            @Override
399          public void          public void
400          valueChanged(ListSelectionEvent e) {          valueChanged(ListSelectionEvent e) {
401                  if(e.getValueIsAdjusting()) return;                  if(e.getValueIsAdjusting()) return;
# Line 279  public class JSFxSendsPane extends JPane Line 431  public class JSFxSendsPane extends JPane
431                          putValue(SHORT_DESCRIPTION, s);                          putValue(SHORT_DESCRIPTION, s);
432                  }                  }
433                                    
434                    @Override
435                  public void                  public void
436                  actionPerformed(ActionEvent e) {                  actionPerformed(ActionEvent e) {
437                          int id = channelModel.getChannelId();                          int id = channelModel.getChannelId();
438                          final Channel.AddFxSend t = new Channel.AddFxSend(id, 0, "New effect send");                          int c = getUndefinedController();
439                            lastUsedController = c;
440                            final Channel.AddFxSend t = new Channel.AddFxSend(id, c, "New effect send");
441                                                    
442                          t.addTaskListener(new TaskListener() {                          t.addTaskListener(new TaskListener() {
443                                  public void                                  public void
# Line 312  public class JSFxSendsPane extends JPane Line 467  public class JSFxSendsPane extends JPane
467                          putValue(SHORT_DESCRIPTION, s);                          putValue(SHORT_DESCRIPTION, s);
468                  }                  }
469                                    
470                    @Override
471                  public void                  public void
472                  actionPerformed(ActionEvent e) {                  actionPerformed(ActionEvent e) {
473                          FxSend fxs = fxSendsTable.getSelectedFxSend();                          FxSend fxs = fxSendsTable.getSelectedFxSend();
# Line 346  public class JSFxSendsPane extends JPane Line 502  public class JSFxSendsPane extends JPane
502                          column.setCellEditor(new DefaultCellEditor(cb));                          column.setCellEditor(new DefaultCellEditor(cb));
503                  }                  }
504                                    
505                    @Override
506                  protected JTableHeader                  protected JTableHeader
507                  createDefaultTableHeader() {                  createDefaultTableHeader() {
508                           return new JTableHeader(columnModel) {                           return new JTableHeader(columnModel) {
# Line 386  public class JSFxSendsPane extends JPane Line 543  public class JSFxSendsPane extends JPane
543                          fxSendsTable.getSelectionModel().addListSelectionListener(this);                          fxSendsTable.getSelectionModel().addListSelectionListener(this);
544                  }                  }
545                                    
546                    @Override
547                  public int                  public int
548                  getColumnCount() { return columnNames.length; }                  getColumnCount() { return columnNames.length; }
549                                    
550                    @Override
551                  public String                  public String
552                  getColumnName(int column) { return columnNames[column]; }                  getColumnName(int column) { return columnNames[column]; }
553                                    
554                    @Override
555                  public int                  public int
556                  getRowCount() {                  getRowCount() {
557                          if(fxSend == null) return 0;                          if(fxSend == null) return 0;
558                          return fxSend.getAudioOutputRouting().length;                          return fxSend.getAudioOutputRouting().length;
559                  }                  }
560                                    
561                    @Override
562                  public Object                  public Object
563                  getValueAt(int row, int column) {                  getValueAt(int row, int column) {
564                          switch(column) {                          switch(column) {
# Line 410  public class JSFxSendsPane extends JPane Line 571  public class JSFxSendsPane extends JPane
571                                                    
572                  }                  }
573                                    
574                    @Override
575                  public boolean                  public boolean
576                  isCellEditable(int row, int column) {                  isCellEditable(int row, int column) {
577                          switch(column) {                          switch(column) {
# Line 421  public class JSFxSendsPane extends JPane Line 583  public class JSFxSendsPane extends JPane
583                          }                          }
584                  }                  }
585                                    
586                    @Override
587                  public void                  public void
588                  setValueAt(Object value, int row, int column) {                  setValueAt(Object value, int row, int column) {
589                          if(column == 0) return;                          if(column == 0) return;
# Line 433  public class JSFxSendsPane extends JPane Line 596  public class JSFxSendsPane extends JPane
596                          fireTableCellUpdated(row, column);                          fireTableCellUpdated(row, column);
597                  }                  }
598                                    
599                    @Override
600                  public void                  public void
601                  valueChanged(ListSelectionEvent e) {                  valueChanged(ListSelectionEvent e) {
602                          if(e.getValueIsAdjusting()) return;                          if(e.getValueIsAdjusting()) return;
# Line 448  public class JSFxSendsPane extends JPane Line 612  public class JSFxSendsPane extends JPane
612                    
613          private class Handler implements EffectSendsListener {          private class Handler implements EffectSendsListener {
614                  /** Invoked when a new effect send is added to a sampler channel. */                  /** Invoked when a new effect send is added to a sampler channel. */
615                    @Override
616                  public void                  public void
617                  effectSendAdded(EffectSendsEvent e) {                  effectSendAdded(EffectSendsEvent e) {
618                          FxSend fxs = fxSendsTable.getSelectedFxSend();                          FxSend fxs = fxSendsTable.getSelectedFxSend();
# Line 461  public class JSFxSendsPane extends JPane Line 626  public class JSFxSendsPane extends JPane
626                  }                  }
627                                    
628                  /** Invoked when an effect send is removed from a sampler channel. */                  /** Invoked when an effect send is removed from a sampler channel. */
629                    @Override
630                  public void                  public void
631                  effectSendRemoved(EffectSendsEvent e) {                  effectSendRemoved(EffectSendsEvent e) {
632                          if(channelModel.getFxSendCount() == 0) return;                          if(channelModel.getFxSendCount() == 0) return;
# Line 476  public class JSFxSendsPane extends JPane Line 642  public class JSFxSendsPane extends JPane
642                  }                  }
643                                    
644                  /** Invoked when an effect send's setting are changed. */                  /** Invoked when an effect send's setting are changed. */
645                    @Override
646                  public void                  public void
647                  effectSendChanged(EffectSendsEvent e) {                  effectSendChanged(EffectSendsEvent e) {
648                          if(fxSend == null) return;                          if(fxSend == null) return;

Legend:
Removed from v.1865  
changed lines
  Added in v.1866

  ViewVC Help
Powered by ViewVC