Use Tree Navigation
public class

DLSModulator

extends Object
/*
 * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package com.sun.media.sound;

/**
 * This class is used to store modulator/artiuclation data.
 * A modulator connects one synthesizer source to
 * a destination. For example a note on velocity
 * can be mapped to the gain of the synthesized voice.
 * It is stored as a "art1" or "art2" chunk inside DLS files.
 *
 * @author Karl Helgason
 */

public class DLSModulator {

   
// DLS1 Destinations
   
public static final int CONN_DST_NONE = 0x000; // 0
   
public static final int CONN_DST_GAIN = 0x001; // cB
   
public static final int CONN_DST_PITCH = 0x003; // cent
   
public static final int CONN_DST_PAN = 0x004; // 0.1%
   
public static final int CONN_DST_LFO_FREQUENCY = 0x104; // cent (default 5 Hz)
   
public static final int CONN_DST_LFO_STARTDELAY = 0x105; // timecent
   
public static final int CONN_DST_EG1_ATTACKTIME = 0x206; // timecent
   
public static final int CONN_DST_EG1_DECAYTIME = 0x207; // timecent
   
public static final int CONN_DST_EG1_RELEASETIME = 0x209; // timecent
   
public static final int CONN_DST_EG1_SUSTAINLEVEL = 0x20A; // 0.1%
   
public static final int CONN_DST_EG2_ATTACKTIME = 0x30A; // timecent
   
public static final int CONN_DST_EG2_DECAYTIME = 0x30B; // timecent
   
public static final int CONN_DST_EG2_RELEASETIME = 0x30D; // timecent
   
public static final int CONN_DST_EG2_SUSTAINLEVEL = 0x30E; // 0.1%
   
// DLS2 Destinations
   
public static final int CONN_DST_KEYNUMBER = 0x005;
   
public static final int CONN_DST_LEFT = 0x010; // 0.1%
   
public static final int CONN_DST_RIGHT = 0x011; // 0.1%
   
public static final int CONN_DST_CENTER = 0x012; // 0.1%
   
public static final int CONN_DST_LEFTREAR = 0x013; // 0.1%
   
public static final int CONN_DST_RIGHTREAR = 0x014; // 0.1%
   
public static final int CONN_DST_LFE_CHANNEL = 0x015; // 0.1%
   
public static final int CONN_DST_CHORUS = 0x080; // 0.1%
   
public static final int CONN_DST_REVERB = 0x081; // 0.1%
   
public static final int CONN_DST_VIB_FREQUENCY = 0x114; // cent
   
public static final int CONN_DST_VIB_STARTDELAY = 0x115; // dB
   
public static final int CONN_DST_EG1_DELAYTIME = 0x20B; // timecent
   
public static final int CONN_DST_EG1_HOLDTIME = 0x20C; // timecent
   
public static final int CONN_DST_EG1_SHUTDOWNTIME = 0x20D; // timecent
   
public static final int CONN_DST_EG2_DELAYTIME = 0x30F; // timecent
   
public static final int CONN_DST_EG2_HOLDTIME = 0x310; // timecent
   
public static final int CONN_DST_FILTER_CUTOFF = 0x500; // cent
   
public static final int CONN_DST_FILTER_Q = 0x501; // dB

   
// DLS1 Sources
   
public static final int CONN_SRC_NONE = 0x000; // 1
   
public static final int CONN_SRC_LFO = 0x001; // linear (sine wave)
   
public static final int CONN_SRC_KEYONVELOCITY = 0x002; // ??db or velocity??
   
public static final int CONN_SRC_KEYNUMBER = 0x003; // ??cent or keynumber??
   
public static final int CONN_SRC_EG1 = 0x004; // linear direct from eg
   
public static final int CONN_SRC_EG2 = 0x005; // linear direct from eg
   
public static final int CONN_SRC_PITCHWHEEL = 0x006; // linear -1..1
   
public static final int CONN_SRC_CC1 = 0x081; // linear 0..1
   
public static final int CONN_SRC_CC7 = 0x087; // linear 0..1
   
public static final int CONN_SRC_CC10 = 0x08A; // linear 0..1
   
public static final int CONN_SRC_CC11 = 0x08B; // linear 0..1
   
public static final int CONN_SRC_RPN0 = 0x100; // ?? // Pitch Bend Range
   
public static final int CONN_SRC_RPN1 = 0x101; // ?? // Fine Tune
   
public static final int CONN_SRC_RPN2 = 0x102; // ?? // Course Tune
   
// DLS2 Sources
   
public static final int CONN_SRC_POLYPRESSURE = 0x007; // linear 0..1
   
public static final int CONN_SRC_CHANNELPRESSURE = 0x008; // linear 0..1
   
public static final int CONN_SRC_VIBRATO = 0x009; // linear 0..1
   
public static final int CONN_SRC_MONOPRESSURE = 0x00A; // linear 0..1
   
public static final int CONN_SRC_CC91 = 0x0DB; // linear 0..1
   
public static final int CONN_SRC_CC93 = 0x0DD; // linear 0..1
   
// DLS1 Transforms
   
public static final int CONN_TRN_NONE = 0x000;
   
public static final int CONN_TRN_CONCAVE = 0x001;
   
// DLS2 Transforms
   
public static final int CONN_TRN_CONVEX = 0x002;
   
public static final int CONN_TRN_SWITCH = 0x003;
   
public static final int DST_FORMAT_CB = 1;
   
public static final int DST_FORMAT_CENT = 1;
   
public static final int DST_FORMAT_TIMECENT = 2;
   
public static final int DST_FORMAT_PERCENT = 3;
   
protected int source;
   
protected int control;
   
protected int destination;
   
protected int transform;
   
protected int scale;
   
protected int version = 1;

   
public int getControl() {
       
return control;
   
}

   
public void setControl(int control) {
       
this.control = control;
   
}

   
public static int getDestinationFormat(int destination) {

       
if (destination == CONN_DST_GAIN)
           
return DST_FORMAT_CB;
       
if (destination == CONN_DST_PITCH)
           
return DST_FORMAT_CENT;
       
if (destination == CONN_DST_PAN)
           
return DST_FORMAT_PERCENT;

       
if (destination == CONN_DST_LFO_FREQUENCY)
           
return DST_FORMAT_CENT;
       
if (destination == CONN_DST_LFO_STARTDELAY)
           
return DST_FORMAT_TIMECENT;

       
if (destination == CONN_DST_EG1_ATTACKTIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG1_DECAYTIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG1_RELEASETIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG1_SUSTAINLEVEL)
           
return DST_FORMAT_PERCENT;

       
if (destination == CONN_DST_EG2_ATTACKTIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG2_DECAYTIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG2_RELEASETIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG2_SUSTAINLEVEL)
           
return DST_FORMAT_PERCENT;

       
if (destination == CONN_DST_KEYNUMBER)
           
return DST_FORMAT_CENT; // NOT SURE WITHOUT DLS 2 SPEC
       
if (destination == CONN_DST_LEFT)
           
return DST_FORMAT_CB;
       
if (destination == CONN_DST_RIGHT)
           
return DST_FORMAT_CB;
       
if (destination == CONN_DST_CENTER)
           
return DST_FORMAT_CB;
       
if (destination == CONN_DST_LEFTREAR)
           
return DST_FORMAT_CB;
       
if (destination == CONN_DST_RIGHTREAR)
           
return DST_FORMAT_CB;
       
if (destination == CONN_DST_LFE_CHANNEL)
           
return DST_FORMAT_CB;
       
if (destination == CONN_DST_CHORUS)
           
return DST_FORMAT_PERCENT;
       
if (destination == CONN_DST_REVERB)
           
return DST_FORMAT_PERCENT;

       
if (destination == CONN_DST_VIB_FREQUENCY)
           
return DST_FORMAT_CENT;
       
if (destination == CONN_DST_VIB_STARTDELAY)
           
return DST_FORMAT_TIMECENT;

       
if (destination == CONN_DST_EG1_DELAYTIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG1_HOLDTIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG1_SHUTDOWNTIME)
           
return DST_FORMAT_TIMECENT;

       
if (destination == CONN_DST_EG2_DELAYTIME)
           
return DST_FORMAT_TIMECENT;
       
if (destination == CONN_DST_EG2_HOLDTIME)
           
return DST_FORMAT_TIMECENT;

       
if (destination == CONN_DST_FILTER_CUTOFF)
           
return DST_FORMAT_CENT;
       
if (destination == CONN_DST_FILTER_Q)
           
return DST_FORMAT_CB;

       
return -1;
   
}

   
public static String getDestinationName(int destination) {

       
if (destination == CONN_DST_GAIN)
           
return "gain";
       
if (destination == CONN_DST_PITCH)
           
return "pitch";
       
if (destination == CONN_DST_PAN)
           
return "pan";

       
if (destination == CONN_DST_LFO_FREQUENCY)
           
return "lfo1.freq";
       
if (destination == CONN_DST_LFO_STARTDELAY)
           
return "lfo1.delay";

       
if (destination == CONN_DST_EG1_ATTACKTIME)
           
return "eg1.attack";
       
if (destination == CONN_DST_EG1_DECAYTIME)
           
return "eg1.decay";
       
if (destination == CONN_DST_EG1_RELEASETIME)
           
return "eg1.release";
       
if (destination == CONN_DST_EG1_SUSTAINLEVEL)
           
return "eg1.sustain";

       
if (destination == CONN_DST_EG2_ATTACKTIME)
           
return "eg2.attack";
       
if (destination == CONN_DST_EG2_DECAYTIME)
           
return "eg2.decay";
       
if (destination == CONN_DST_EG2_RELEASETIME)
           
return "eg2.release";
       
if (destination == CONN_DST_EG2_SUSTAINLEVEL)
           
return "eg2.sustain";

       
if (destination == CONN_DST_KEYNUMBER)
           
return "keynumber";
       
if (destination == CONN_DST_LEFT)
           
return "left";
       
if (destination == CONN_DST_RIGHT)
           
return "right";
       
if (destination == CONN_DST_CENTER)
           
return "center";
       
if (destination == CONN_DST_LEFTREAR)
           
return "leftrear";
       
if (destination == CONN_DST_RIGHTREAR)
           
return "rightrear";
       
if (destination == CONN_DST_LFE_CHANNEL)
           
return "lfe_channel";
       
if (destination == CONN_DST_CHORUS)
           
return "chorus";
       
if (destination == CONN_DST_REVERB)
           
return "reverb";

       
if (destination == CONN_DST_VIB_FREQUENCY)
           
return "vib.freq";
       
if (destination == CONN_DST_VIB_STARTDELAY)
           
return "vib.delay";

       
if (destination == CONN_DST_EG1_DELAYTIME)
           
return "eg1.delay";
       
if (destination == CONN_DST_EG1_HOLDTIME)
           
return "eg1.hold";
       
if (destination == CONN_DST_EG1_SHUTDOWNTIME)
           
return "eg1.shutdown";

       
if (destination == CONN_DST_EG2_DELAYTIME)
           
return "eg2.delay";
       
if (destination == CONN_DST_EG2_HOLDTIME)
           
return "eg.2hold";

       
if (destination == CONN_DST_FILTER_CUTOFF)
           
return "filter.cutoff"; // NOT SURE WITHOUT DLS 2 SPEC
       
if (destination == CONN_DST_FILTER_Q)
           
return "filter.q"; // NOT SURE WITHOUT DLS 2 SPEC

       
return null;
   
}

   
public static String getSourceName(int source) {

       
if (source == CONN_SRC_NONE)
           
return "none";
       
if (source == CONN_SRC_LFO)
           
return "lfo";
       
if (source == CONN_SRC_KEYONVELOCITY)
           
return "keyonvelocity";
       
if (source == CONN_SRC_KEYNUMBER)
           
return "keynumber";
       
if (source == CONN_SRC_EG1)
           
return "eg1";
       
if (source == CONN_SRC_EG2)
           
return "eg2";
       
if (source == CONN_SRC_PITCHWHEEL)
           
return "pitchweel";
       
if (source == CONN_SRC_CC1)
           
return "cc1";
       
if (source == CONN_SRC_CC7)
           
return "cc7";
       
if (source == CONN_SRC_CC10)
           
return "c10";
       
if (source == CONN_SRC_CC11)
           
return "cc11";

       
if (source == CONN_SRC_POLYPRESSURE)
           
return "polypressure";
       
if (source == CONN_SRC_CHANNELPRESSURE)
           
return "channelpressure";
       
if (source == CONN_SRC_VIBRATO)
           
return "vibrato";
       
if (source == CONN_SRC_MONOPRESSURE)
           
return "monopressure";
       
if (source == CONN_SRC_CC91)
           
return "cc91";
       
if (source == CONN_SRC_CC93)
           
return "cc93";
       
return null;
   
}

   
public int getDestination() {
       
return destination;
   
}

   
public void setDestination(int destination) {
       
this.destination = destination;
   
}

   
public int getScale() {
       
return scale;
   
}

   
public void setScale(int scale) {
       
this.scale = scale;
   
}

   
public int getSource() {
       
return source;
   
}

   
public void setSource(int source) {
       
this.source = source;
   
}

   
public int getVersion() {
       
return version;
   
}

   
public void setVersion(int version) {
       
this.version = version;
   
}

   
public int getTransform() {
       
return transform;
   
}

   
public void setTransform(int transform) {
       
this.transform = transform;
   
}
}