1 /* 2 * Copyright (c) 2007, 2013, 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 /** 28 * This class is used to store modulator/artiuclation data. 29 * A modulator connects one synthesizer source to 30 * a destination. For example a note on velocity 31 * can be mapped to the gain of the synthesized voice. 32 * It is stored as a "art1" or "art2" chunk inside DLS files. 33 * 34 * @author Karl Helgason 35 */ 36 public final class DLSModulator { 37 38 // DLS1 Destinations 39 public static final int CONN_DST_NONE = 0x000; // 0 40 public static final int CONN_DST_GAIN = 0x001; // cB 41 public static final int CONN_DST_PITCH = 0x003; // cent 42 public static final int CONN_DST_PAN = 0x004; // 0.1% 43 public static final int CONN_DST_LFO_FREQUENCY = 0x104; // cent (default 5 Hz) 44 public static final int CONN_DST_LFO_STARTDELAY = 0x105; // timecent 45 public static final int CONN_DST_EG1_ATTACKTIME = 0x206; // timecent 46 public static final int CONN_DST_EG1_DECAYTIME = 0x207; // timecent 47 public static final int CONN_DST_EG1_RELEASETIME = 0x209; // timecent 48 public static final int CONN_DST_EG1_SUSTAINLEVEL = 0x20A; // 0.1% 49 public static final int CONN_DST_EG2_ATTACKTIME = 0x30A; // timecent 50 public static final int CONN_DST_EG2_DECAYTIME = 0x30B; // timecent 51 public static final int CONN_DST_EG2_RELEASETIME = 0x30D; // timecent 52 public static final int CONN_DST_EG2_SUSTAINLEVEL = 0x30E; // 0.1% 53 // DLS2 Destinations 54 public static final int CONN_DST_KEYNUMBER = 0x005; 55 public static final int CONN_DST_LEFT = 0x010; // 0.1% 56 public static final int CONN_DST_RIGHT = 0x011; // 0.1% 57 public static final int CONN_DST_CENTER = 0x012; // 0.1% 58 public static final int CONN_DST_LEFTREAR = 0x013; // 0.1% 59 public static final int CONN_DST_RIGHTREAR = 0x014; // 0.1% 60 public static final int CONN_DST_LFE_CHANNEL = 0x015; // 0.1% 61 public static final int CONN_DST_CHORUS = 0x080; // 0.1% 62 public static final int CONN_DST_REVERB = 0x081; // 0.1% 63 public static final int CONN_DST_VIB_FREQUENCY = 0x114; // cent 64 public static final int CONN_DST_VIB_STARTDELAY = 0x115; // dB 65 public static final int CONN_DST_EG1_DELAYTIME = 0x20B; // timecent 66 public static final int CONN_DST_EG1_HOLDTIME = 0x20C; // timecent 67 public static final int CONN_DST_EG1_SHUTDOWNTIME = 0x20D; // timecent 68 public static final int CONN_DST_EG2_DELAYTIME = 0x30F; // timecent 69 public static final int CONN_DST_EG2_HOLDTIME = 0x310; // timecent 70 public static final int CONN_DST_FILTER_CUTOFF = 0x500; // cent 71 public static final int CONN_DST_FILTER_Q = 0x501; // dB 72 73 // DLS1 Sources 74 public static final int CONN_SRC_NONE = 0x000; // 1 75 public static final int CONN_SRC_LFO = 0x001; // linear (sine wave) 76 public static final int CONN_SRC_KEYONVELOCITY = 0x002; // ??db or velocity?? 77 public static final int CONN_SRC_KEYNUMBER = 0x003; // ??cent or keynumber?? 78 public static final int CONN_SRC_EG1 = 0x004; // linear direct from eg 79 public static final int CONN_SRC_EG2 = 0x005; // linear direct from eg 80 public static final int CONN_SRC_PITCHWHEEL = 0x006; // linear -1..1 81 public static final int CONN_SRC_CC1 = 0x081; // linear 0..1 82 public static final int CONN_SRC_CC7 = 0x087; // linear 0..1 83 public static final int CONN_SRC_CC10 = 0x08A; // linear 0..1 84 public static final int CONN_SRC_CC11 = 0x08B; // linear 0..1 85 public static final int CONN_SRC_RPN0 = 0x100; // ?? // Pitch Bend Range 86 public static final int CONN_SRC_RPN1 = 0x101; // ?? // Fine Tune 87 public static final int CONN_SRC_RPN2 = 0x102; // ?? // Course Tune 88 // DLS2 Sources 89 public static final int CONN_SRC_POLYPRESSURE = 0x007; // linear 0..1 90 public static final int CONN_SRC_CHANNELPRESSURE = 0x008; // linear 0..1 91 public static final int CONN_SRC_VIBRATO = 0x009; // linear 0..1 92 public static final int CONN_SRC_MONOPRESSURE = 0x00A; // linear 0..1 93 public static final int CONN_SRC_CC91 = 0x0DB; // linear 0..1 94 public static final int CONN_SRC_CC93 = 0x0DD; // linear 0..1 95 // DLS1 Transforms 96 public static final int CONN_TRN_NONE = 0x000; 97 public static final int CONN_TRN_CONCAVE = 0x001; 98 // DLS2 Transforms 99 public static final int CONN_TRN_CONVEX = 0x002; 100 public static final int CONN_TRN_SWITCH = 0x003; 101 public static final int DST_FORMAT_CB = 1; 102 public static final int DST_FORMAT_CENT = 1; 103 public static final int DST_FORMAT_TIMECENT = 2; 104 public static final int DST_FORMAT_PERCENT = 3; 105 int source; 106 int control; 107 int destination; 108 int transform; 109 int scale; 110 int version = 1; 111 112 public int getControl() { 113 return control; 114 } 115 116 public void setControl(int control) { 117 this.control = control; 118 } 119 120 public static int getDestinationFormat(int destination) { 121 122 if (destination == CONN_DST_GAIN) 123 return DST_FORMAT_CB; 124 if (destination == CONN_DST_PITCH) 125 return DST_FORMAT_CENT; 126 if (destination == CONN_DST_PAN) 127 return DST_FORMAT_PERCENT; 128 129 if (destination == CONN_DST_LFO_FREQUENCY) 130 return DST_FORMAT_CENT; 131 if (destination == CONN_DST_LFO_STARTDELAY) 132 return DST_FORMAT_TIMECENT; 133 134 if (destination == CONN_DST_EG1_ATTACKTIME) 135 return DST_FORMAT_TIMECENT; 136 if (destination == CONN_DST_EG1_DECAYTIME) 137 return DST_FORMAT_TIMECENT; 138 if (destination == CONN_DST_EG1_RELEASETIME) 139 return DST_FORMAT_TIMECENT; 140 if (destination == CONN_DST_EG1_SUSTAINLEVEL) 141 return DST_FORMAT_PERCENT; 142 143 if (destination == CONN_DST_EG2_ATTACKTIME) 144 return DST_FORMAT_TIMECENT; 145 if (destination == CONN_DST_EG2_DECAYTIME) 146 return DST_FORMAT_TIMECENT; 147 if (destination == CONN_DST_EG2_RELEASETIME) 148 return DST_FORMAT_TIMECENT; 149 if (destination == CONN_DST_EG2_SUSTAINLEVEL) 150 return DST_FORMAT_PERCENT; 151 152 if (destination == CONN_DST_KEYNUMBER) 153 return DST_FORMAT_CENT; // NOT SURE WITHOUT DLS 2 SPEC 154 if (destination == CONN_DST_LEFT) 155 return DST_FORMAT_CB; 156 if (destination == CONN_DST_RIGHT) 157 return DST_FORMAT_CB; 158 if (destination == CONN_DST_CENTER) 159 return DST_FORMAT_CB; 160 if (destination == CONN_DST_LEFTREAR) 161 return DST_FORMAT_CB; 162 if (destination == CONN_DST_RIGHTREAR) 163 return DST_FORMAT_CB; 164 if (destination == CONN_DST_LFE_CHANNEL) 165 return DST_FORMAT_CB; 166 if (destination == CONN_DST_CHORUS) 167 return DST_FORMAT_PERCENT; 168 if (destination == CONN_DST_REVERB) 169 return DST_FORMAT_PERCENT; 170 171 if (destination == CONN_DST_VIB_FREQUENCY) 172 return DST_FORMAT_CENT; 173 if (destination == CONN_DST_VIB_STARTDELAY) 174 return DST_FORMAT_TIMECENT; 175 176 if (destination == CONN_DST_EG1_DELAYTIME) 177 return DST_FORMAT_TIMECENT; 178 if (destination == CONN_DST_EG1_HOLDTIME) 179 return DST_FORMAT_TIMECENT; 180 if (destination == CONN_DST_EG1_SHUTDOWNTIME) 181 return DST_FORMAT_TIMECENT; 182 183 if (destination == CONN_DST_EG2_DELAYTIME) 184 return DST_FORMAT_TIMECENT; 185 if (destination == CONN_DST_EG2_HOLDTIME) 186 return DST_FORMAT_TIMECENT; 187 188 if (destination == CONN_DST_FILTER_CUTOFF) 189 return DST_FORMAT_CENT; 190 if (destination == CONN_DST_FILTER_Q) 191 return DST_FORMAT_CB; 192 193 return -1; 194 } 195 196 public static String getDestinationName(int destination) { 197 198 if (destination == CONN_DST_GAIN) 199 return "gain"; 200 if (destination == CONN_DST_PITCH) 201 return "pitch"; 202 if (destination == CONN_DST_PAN) 203 return "pan"; 204 205 if (destination == CONN_DST_LFO_FREQUENCY) 206 return "lfo1.freq"; 207 if (destination == CONN_DST_LFO_STARTDELAY) 208 return "lfo1.delay"; 209 210 if (destination == CONN_DST_EG1_ATTACKTIME) 211 return "eg1.attack"; 212 if (destination == CONN_DST_EG1_DECAYTIME) 213 return "eg1.decay"; 214 if (destination == CONN_DST_EG1_RELEASETIME) 215 return "eg1.release"; 216 if (destination == CONN_DST_EG1_SUSTAINLEVEL) 217 return "eg1.sustain"; 218 219 if (destination == CONN_DST_EG2_ATTACKTIME) 220 return "eg2.attack"; 221 if (destination == CONN_DST_EG2_DECAYTIME) 222 return "eg2.decay"; 223 if (destination == CONN_DST_EG2_RELEASETIME) 224 return "eg2.release"; 225 if (destination == CONN_DST_EG2_SUSTAINLEVEL) 226 return "eg2.sustain"; 227 228 if (destination == CONN_DST_KEYNUMBER) 229 return "keynumber"; 230 if (destination == CONN_DST_LEFT) 231 return "left"; 232 if (destination == CONN_DST_RIGHT) 233 return "right"; 234 if (destination == CONN_DST_CENTER) 235 return "center"; 236 if (destination == CONN_DST_LEFTREAR) 237 return "leftrear"; 238 if (destination == CONN_DST_RIGHTREAR) 239 return "rightrear"; 240 if (destination == CONN_DST_LFE_CHANNEL) 241 return "lfe_channel"; 242 if (destination == CONN_DST_CHORUS) 243 return "chorus"; 244 if (destination == CONN_DST_REVERB) 245 return "reverb"; 246 247 if (destination == CONN_DST_VIB_FREQUENCY) 248 return "vib.freq"; 249 if (destination == CONN_DST_VIB_STARTDELAY) 250 return "vib.delay"; 251 252 if (destination == CONN_DST_EG1_DELAYTIME) 253 return "eg1.delay"; 254 if (destination == CONN_DST_EG1_HOLDTIME) 255 return "eg1.hold"; 256 if (destination == CONN_DST_EG1_SHUTDOWNTIME) 257 return "eg1.shutdown"; 258 259 if (destination == CONN_DST_EG2_DELAYTIME) 260 return "eg2.delay"; 261 if (destination == CONN_DST_EG2_HOLDTIME) 262 return "eg.2hold"; 263 264 if (destination == CONN_DST_FILTER_CUTOFF) 265 return "filter.cutoff"; // NOT SURE WITHOUT DLS 2 SPEC 266 if (destination == CONN_DST_FILTER_Q) 267 return "filter.q"; // NOT SURE WITHOUT DLS 2 SPEC 268 269 return null; 270 } 271 272 public static String getSourceName(int source) { 273 274 if (source == CONN_SRC_NONE) 275 return "none"; 276 if (source == CONN_SRC_LFO) 277 return "lfo"; 278 if (source == CONN_SRC_KEYONVELOCITY) 279 return "keyonvelocity"; 280 if (source == CONN_SRC_KEYNUMBER) 281 return "keynumber"; 282 if (source == CONN_SRC_EG1) 283 return "eg1"; 284 if (source == CONN_SRC_EG2) 285 return "eg2"; 286 if (source == CONN_SRC_PITCHWHEEL) 287 return "pitchweel"; 288 if (source == CONN_SRC_CC1) 289 return "cc1"; 290 if (source == CONN_SRC_CC7) 291 return "cc7"; 292 if (source == CONN_SRC_CC10) 293 return "c10"; 294 if (source == CONN_SRC_CC11) 295 return "cc11"; 296 297 if (source == CONN_SRC_POLYPRESSURE) 298 return "polypressure"; 299 if (source == CONN_SRC_CHANNELPRESSURE) 300 return "channelpressure"; 301 if (source == CONN_SRC_VIBRATO) 302 return "vibrato"; 303 if (source == CONN_SRC_MONOPRESSURE) 304 return "monopressure"; 305 if (source == CONN_SRC_CC91) 306 return "cc91"; 307 if (source == CONN_SRC_CC93) 308 return "cc93"; 309 return null; 310 } 311 312 public int getDestination() { 313 return destination; 314 } 315 316 public void setDestination(int destination) { 317 this.destination = destination; 318 } 319 320 public int getScale() { 321 return scale; 322 } 323 324 public void setScale(int scale) { 325 this.scale = scale; 326 } 327 328 public int getSource() { 329 return source; 330 } 331 332 public void setSource(int source) { 333 this.source = source; 334 } 335 336 public int getVersion() { 337 return version; 338 } 339 340 public void setVersion(int version) { 341 this.version = version; 342 } 343 344 public int getTransform() { 345 return transform; 346 } 347 348 public void setTransform(int transform) { 349 this.transform = transform; 350 } 351 }