Save This Page
Home » openjdk-7 » com.sun.media » sound » [javadoc | source]
    1   /*
    2    * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Oracle designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Oracle in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22    * or visit www.oracle.com if you need additional information or have any
   23    * questions.
   24    */
   25   package com.sun.media.sound;
   26   
   27   import java.io.IOException;
   28   import javax.sound.midi.Instrument;
   29   import javax.sound.midi.MidiChannel;
   30   import javax.sound.midi.Patch;
   31   import javax.sound.midi.Soundbank;
   32   import javax.sound.midi.SoundbankResource;
   33   import javax.sound.midi.VoiceStatus;
   34   
   35   /**
   36    * A abstract class used to simplify creating custom ModelOscillator.
   37    *
   38    * @author Karl Helgason
   39    */
   40   public abstract class ModelAbstractOscillator
   41           implements ModelOscillator, ModelOscillatorStream, Soundbank {
   42   
   43       protected float pitch = 6000;
   44       protected float samplerate;
   45       protected MidiChannel channel;
   46       protected VoiceStatus voice;
   47       protected int noteNumber;
   48       protected int velocity;
   49       protected boolean on = false;
   50   
   51       public void init() {
   52       }
   53   
   54       public void close() throws IOException {
   55       }
   56   
   57       public void noteOff(int velocity) {
   58           on = false;
   59       }
   60   
   61       public void noteOn(MidiChannel channel, VoiceStatus voice, int noteNumber,
   62               int velocity) {
   63           this.channel = channel;
   64           this.voice = voice;
   65           this.noteNumber = noteNumber;
   66           this.velocity = velocity;
   67           on = true;
   68       }
   69   
   70       public int read(float[][] buffer, int offset, int len) throws IOException {
   71           return -1;
   72       }
   73   
   74       public MidiChannel getChannel() {
   75           return channel;
   76       }
   77   
   78       public VoiceStatus getVoice() {
   79           return voice;
   80       }
   81   
   82       public int getNoteNumber() {
   83           return noteNumber;
   84       }
   85   
   86       public int getVelocity() {
   87           return velocity;
   88       }
   89   
   90       public boolean isOn() {
   91           return on;
   92       }
   93   
   94       public void setPitch(float pitch) {
   95           this.pitch = pitch;
   96       }
   97   
   98       public float getPitch() {
   99           return pitch;
  100       }
  101   
  102       public void setSampleRate(float samplerate) {
  103           this.samplerate = samplerate;
  104       }
  105   
  106       public float getSampleRate() {
  107           return samplerate;
  108       }
  109   
  110       public float getAttenuation() {
  111           return 0;
  112       }
  113   
  114       public int getChannels() {
  115           return 1;
  116       }
  117   
  118       public String getName() {
  119           return getClass().getName();
  120       }
  121   
  122       public Patch getPatch() {
  123           return new Patch(0, 0);
  124       }
  125   
  126       public ModelOscillatorStream open(float samplerate) {
  127           ModelAbstractOscillator oscs;
  128           try {
  129               oscs = this.getClass().newInstance();
  130           } catch (InstantiationException e) {
  131               throw new IllegalArgumentException(e);
  132           } catch (IllegalAccessException e) {
  133               throw new IllegalArgumentException(e);
  134           }
  135           oscs.setSampleRate(samplerate);
  136           oscs.init();
  137           return oscs;
  138       }
  139   
  140       public ModelPerformer getPerformer() {
  141           // Create performer for my custom oscillirator
  142           ModelPerformer performer = new ModelPerformer();
  143           performer.getOscillators().add(this);
  144           return performer;
  145   
  146       }
  147   
  148       public ModelInstrument getInstrument() {
  149           // Create Instrument object around my performer
  150           SimpleInstrument ins = new SimpleInstrument();
  151           ins.setName(getName());
  152           ins.add(getPerformer());
  153           ins.setPatch(getPatch());
  154           return ins;
  155   
  156       }
  157   
  158       public Soundbank getSoundBank() {
  159           // Create Soundbank object around the instrument
  160           SimpleSoundbank sbk = new SimpleSoundbank();
  161           sbk.addInstrument(getInstrument());
  162           return sbk;
  163       }
  164   
  165       public String getDescription() {
  166           return getName();
  167       }
  168   
  169       public Instrument getInstrument(Patch patch) {
  170           Instrument ins = getInstrument();
  171           Patch p = ins.getPatch();
  172           if (p.getBank() != patch.getBank())
  173               return null;
  174           if (p.getProgram() != patch.getProgram())
  175               return null;
  176           if (p instanceof ModelPatch && patch instanceof ModelPatch) {
  177               if (((ModelPatch)p).isPercussion()
  178                       != ((ModelPatch)patch).isPercussion()) {
  179                   return null;
  180               }
  181           }
  182           return ins;
  183       }
  184   
  185       public Instrument[] getInstruments() {
  186           return new Instrument[]{getInstrument()};
  187       }
  188   
  189       public SoundbankResource[] getResources() {
  190           return new SoundbankResource[0];
  191       }
  192   
  193       public String getVendor() {
  194           return null;
  195       }
  196   
  197       public String getVersion() {
  198           return null;
  199       }
  200   }

Save This Page
Home » openjdk-7 » com.sun.media » sound » [javadoc | source]