/[classpath]/classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java
ViewVC logotype

Diff of /classpath/gnu/javax/sound/midi/dssi/DSSISynthesizer.java

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

revision 1.2 by green, Fri Oct 7 03:21:06 2005 UTC revision 1.3 by green, Fri Oct 7 15:49:03 2005 UTC
# Line 38  exception statement from your version. * Line 38  exception statement from your version. *
38    
39  package gnu.javax.sound.midi.dssi;  package gnu.javax.sound.midi.dssi;
40    
41    import java.util.ArrayList;
42    import java.util.Iterator;
43    import java.util.List;
44    
45  import javax.sound.midi.Instrument;  import javax.sound.midi.Instrument;
46  import javax.sound.midi.MidiChannel;  import javax.sound.midi.MidiChannel;
47  import javax.sound.midi.MidiMessage;  import javax.sound.midi.MidiMessage;
# Line 46  import javax.sound.midi.Patch; Line 50  import javax.sound.midi.Patch;
50  import javax.sound.midi.Receiver;  import javax.sound.midi.Receiver;
51  import javax.sound.midi.ShortMessage;  import javax.sound.midi.ShortMessage;
52  import javax.sound.midi.Soundbank;  import javax.sound.midi.Soundbank;
53    import javax.sound.midi.SoundbankResource;
54  import javax.sound.midi.Synthesizer;  import javax.sound.midi.Synthesizer;
55  import javax.sound.midi.Transmitter;  import javax.sound.midi.Transmitter;
56  import javax.sound.midi.VoiceStatus;  import javax.sound.midi.VoiceStatus;
# Line 54  import javax.sound.midi.VoiceStatus; Line 59  import javax.sound.midi.VoiceStatus;
59  import javax.sound.midi.MidiDevice.Info;  import javax.sound.midi.MidiDevice.Info;
60    
61  /**  /**
62   * @author green   * DSSI soft-synth support.
63     *
64     * All DSSI soft-synths are expected to be installed in /usr/lib/dssi.
65     *
66     * @author Anthony Green (green@redhat.com)
67   *   *
68   */   */
69  public class DSSISynthesizer implements Synthesizer  public class DSSISynthesizer implements Synthesizer
70  {  {
71    /**    /**
72     * @author green     * The DSSI Instrument class.
73       *
74       * @author Anthony Green (green@redhat.com)
75       *
76       */
77      class DSSIInstrument extends Instrument
78      {
79        DSSIInstrument (Soundbank soundbank, Patch patch, String name)
80        {
81          super (soundbank, patch, name, null);
82        }
83        
84        /* @see javax.sound.midi.SoundbankResource#getData()
85         */
86        public Object getData()
87        {
88          return null;
89        }
90    
91      }
92    
93    /**
94       * DSSISoundbank holds all instruments.
95       *
96       * @author Anthony Green (green@redhat.com)
97       *
98       */
99      class DSSISoundbank implements Soundbank
100      {
101        private String name;
102        private String description;
103        private List instruments = new ArrayList();
104        private List resources = new ArrayList();
105        private String vendor;
106        private String version;
107        
108        public DSSISoundbank(String name, String description, String vendor, String version)
109        {
110          this.name = name;
111          this.description = description;
112          this.vendor = vendor;
113          this.version = version;
114        }
115        
116        void add(Instrument instrument)
117        {
118          instruments.add(instrument);
119        }
120        
121        /* @see javax.sound.midi.Soundbank#getName()
122         */
123        public String getName()
124        {
125          return name;
126        }
127    
128        /* @see javax.sound.midi.Soundbank#getVersion()
129         */
130        public String getVersion()
131        {
132          return version;
133        }
134    
135        /* @see javax.sound.midi.Soundbank#getVendor()
136         */
137        public String getVendor()
138        {
139          return vendor;
140        }
141    
142        /* @see javax.sound.midi.Soundbank#getDescription()
143         */
144        public String getDescription()
145        {
146          return description;
147        }
148    
149        /* @see javax.sound.midi.Soundbank#getResources()
150         */
151        public SoundbankResource[] getResources()
152        {
153          return (SoundbankResource[])
154            resources.toArray(new SoundbankResource[resources.size()]);
155        }
156    
157        /* @see javax.sound.midi.Soundbank#getInstruments()
158         */
159        public Instrument[] getInstruments()
160        {
161          return (Instrument[])
162            instruments.toArray(new Instrument[instruments.size()]);
163        }
164    
165        /* @see javax.sound.midi.Soundbank#getInstrument(javax.sound.midi.Patch)
166         */
167        public Instrument getInstrument(Patch patch)
168        {
169          Iterator itr = instruments.iterator();
170          
171          while (itr.hasNext())
172          {
173            Instrument i = (Instrument) itr.next();
174            if (i.getPatch().equals(patch))
175              return i;
176          }
177          
178          return null;
179        }
180      }
181    
182    /**
183       * The Receiver class receives all MIDI messages from a connected
184       * Transmitter.
185       *
186       * @author Anthony Green (green@redhat.com)
187     *     *
188     */     */
189    class DSSIReceiver implements Receiver    class DSSIReceiver implements Receiver
# Line 113  public class DSSISynthesizer implements Line 236  public class DSSISynthesizer implements
236    static native void controlChange_(long handle, int channel, int control, int value);    static native void controlChange_(long handle, int channel, int control, int value);
237    static native void open_(long handle);    static native void open_(long handle);
238    static native void close_(long handle);    static native void close_(long handle);
239      static native String getProgramName_(long handle, int index);
240      static native int getProgramBank_(long handle, int index);
241      static native int getProgramProgram_(long handle, int index);
242                
243    /**    /**
244     * @author Anthony Green (green@redhat.com)     * @author Anthony Green (green@redhat.com)
# Line 365  public class DSSISynthesizer implements Line 491  public class DSSISynthesizer implements
491        
492    MidiChannel channels[] = new MidiChannel[16];    MidiChannel channels[] = new MidiChannel[16];
493        
494      // The list of known soundbanks, and the default one.
495      List soundbanks = new ArrayList();
496      DSSISoundbank defaultSoundbank;
497      
498    /**    /**
499       * Create a DSSI Synthesizer.
500     *     *
501       * @param info the DSSIInfo for this soft-synth
502       * @param soname the name of the .so file for this DSSI synth
503       * @param index the DSSI index for this soft-synth
504     */     */
505    public DSSISynthesizer(Info info, String soname, long index)    public DSSISynthesizer(Info info, String soname, long index)
506    {    {
# Line 375  public class DSSISynthesizer implements Line 509  public class DSSISynthesizer implements
509      sohandle = DSSIMidiDeviceProvider.dlopen_(soname);      sohandle = DSSIMidiDeviceProvider.dlopen_(soname);
510      handle = DSSIMidiDeviceProvider.getDSSIHandle_(sohandle, index);      handle = DSSIMidiDeviceProvider.getDSSIHandle_(sohandle, index);
511      channels[0] = new DSSIMidiChannel(0);      channels[0] = new DSSIMidiChannel(0);
512        defaultSoundbank = new DSSISoundbank("name", "description",
513                                             "vendor", "version");
514        soundbanks.add(defaultSoundbank);
515        
516        int i = 0;
517        String name;
518        do
519        {
520          name = getProgramName_(sohandle, i);
521          if (name != null)
522          {
523            defaultSoundbank.
524              add(new DSSIInstrument(defaultSoundbank,
525                                     new Patch(getProgramBank_(sohandle, i),
526                                               getProgramProgram_(sohandle, i)),
527                                     name));
528            i++;
529          }
530        } while (name != null);
531    }    }
532    
533    /* (non-Javadoc)    /* (non-Javadoc)
# Line 449  public class DSSISynthesizer implements Line 602  public class DSSISynthesizer implements
602      return false;      return false;
603    }    }
604    
605    /* (non-Javadoc)    /* @see javax.sound.midi.Synthesizer#getDefaultSoundbank()
    * @see javax.sound.midi.Synthesizer#getDefaultSoundbank()  
606     */     */
607    public Soundbank getDefaultSoundbank()    public Soundbank getDefaultSoundbank()
608    {    {
609      // TODO Auto-generated method stub      return defaultSoundbank;
     return null;  
610    }    }
611    
612    /* (non-Javadoc)    /* @see javax.sound.midi.Synthesizer#getAvailableInstruments()
    * @see javax.sound.midi.Synthesizer#getAvailableInstruments()  
613     */     */
614    public Instrument[] getAvailableInstruments()    public Instrument[] getAvailableInstruments()
615    {    {
616      // TODO Auto-generated method stub      List instruments = new ArrayList();
617      return null;      Iterator itr = soundbanks.iterator();
618        while (itr.hasNext())
619        {
620          Soundbank sb = (Soundbank) itr.next();
621          Instrument ins[] = sb.getInstruments();
622          for (int i = 0; i < ins.length; i++)
623            instruments.add(ins[i]);
624        }
625        return (Instrument[])
626          instruments.toArray(new Instrument[instruments.size()]);
627    }    }
628    
629    /* (non-Javadoc)    /* (non-Javadoc)
# Line 511  public class DSSISynthesizer implements Line 670  public class DSSISynthesizer implements
670    
671    }    }
672    
673    /* (non-Javadoc)    /* @see javax.sound.midi.MidiDevice#getDeviceInfo()
    * @see javax.sound.midi.MidiDevice#getDeviceInfo()  
674     */     */
675    public Info getDeviceInfo()    public Info getDeviceInfo()
676    {    {
677      return info;      return info;
678    }    }
679    
680    /* (non-Javadoc)    /* @see javax.sound.midi.MidiDevice#open()
    * @see javax.sound.midi.MidiDevice#open()  
681     */     */
682    public void open() throws MidiUnavailableException    public void open() throws MidiUnavailableException
683    {    {
684      open_(sohandle);      open_(sohandle);
685    }    }
686    
687    /* (non-Javadoc)    /* @see javax.sound.midi.MidiDevice#close()
    * @see javax.sound.midi.MidiDevice#close()  
688     */     */
689    public void close()    public void close()
690    {    {
# Line 553  public class DSSISynthesizer implements Line 709  public class DSSISynthesizer implements
709      return 0;      return 0;
710    }    }
711    
712    /* (non-Javadoc)    /* @see javax.sound.midi.MidiDevice#getMaxReceivers()
    * @see javax.sound.midi.MidiDevice#getMaxReceivers()  
713     */     */
714    public int getMaxReceivers()    public int getMaxReceivers()
715    {    {
716      return 1;      return 1;
717    }    }
718    
719    /* (non-Javadoc)    /* @see javax.sound.midi.MidiDevice#getMaxTransmitters()
    * @see javax.sound.midi.MidiDevice#getMaxTransmitters()  
720     */     */
721    public int getMaxTransmitters()    public int getMaxTransmitters()
722    {    {
723      return 0;      return 0;
724    }    }
725    
726    /* (non-Javadoc)    /* @see javax.sound.midi.MidiDevice#getReceiver()
    * @see javax.sound.midi.MidiDevice#getReceiver()  
727     */     */
728    public Receiver getReceiver() throws MidiUnavailableException    public Receiver getReceiver() throws MidiUnavailableException
729    {    {
730      return new DSSIReceiver();      return new DSSIReceiver();
731    }    }
732    
733    /* (non-Javadoc)    /* @see javax.sound.midi.MidiDevice#getTransmitter()
    * @see javax.sound.midi.MidiDevice#getTransmitter()  
734     */     */
735    public Transmitter getTransmitter() throws MidiUnavailableException    public Transmitter getTransmitter() throws MidiUnavailableException
736    {    {

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26