001 /* Floating point control 002 Copyright (C) 2005 Free Software Foundation, Inc. 003 004 This file is part of GNU Classpath. 005 006 GNU Classpath is free software; you can redistribute it and/or modify 007 it under the terms of the GNU General Public License as published by 008 the Free Software Foundation; either version 2, or (at your option) 009 any later version. 010 011 GNU Classpath is distributed in the hope that it will be useful, but 012 WITHOUT ANY WARRANTY; without even the implied warranty of 013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 General Public License for more details. 015 016 You should have received a copy of the GNU General Public License 017 along with GNU Classpath; see the file COPYING. If not, write to the 018 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 019 02110-1301 USA. 020 021 Linking this library statically or dynamically with other modules is 022 making a combined work based on this library. Thus, the terms and 023 conditions of the GNU General Public License cover the whole 024 combination. 025 026 As a special exception, the copyright holders of this library give you 027 permission to link this library with independent modules to produce an 028 executable, regardless of the license terms of these independent 029 modules, and to copy and distribute the resulting executable under 030 terms of your choice, provided that you also meet, for each linked 031 independent module, the terms and conditions of the license of that 032 module. An independent module is a module which is not derived from 033 or based on this library. If you modify this library, you may extend 034 this exception to your version of the library, but you are not 035 obligated to do so. If you do not wish to do so, delete this 036 exception statement from your version. */ 037 038 039 package javax.sound.sampled; 040 041 /** @since 1.3 */ 042 public abstract class FloatControl extends Control 043 { 044 /** 045 * An instance of this class describes a particular floating point control. 046 * @since 1.3 047 */ 048 public static class Type extends Control.Type 049 { 050 /** Auxiliary return gain. */ 051 public static final Type AUX_RETURN = new Type("AUX return"); 052 053 /** Auxiliary send gain. */ 054 public static final Type AUX_SEND = new Type("AUX send"); 055 056 /** Balance. */ 057 public static final Type BALANCE = new Type("Balance"); 058 059 /** Master gain control. */ 060 public static final Type MASTER_GAIN = new Type("Master gain"); 061 062 /** Control for panning. */ 063 public static final Type PAN = new Type("Pan"); 064 065 /** Post-reverb gain. */ 066 public static final Type REVERB_RETURN = new Type("Reverb return"); 067 068 /** Pre-reverb gain. */ 069 public static final Type REVERB_SEND = new Type("Reverb send"); 070 071 /** Control the sample rate. */ 072 public static final Type SAMPLE_RATE = new Type("Sample rate"); 073 074 /** Volume control. */ 075 public static final Type VOLUME = new Type("Volume"); 076 077 /** 078 * Create a new type given its name. 079 * @param name the name of the type 080 */ 081 protected Type(String name) 082 { 083 super(name); 084 } 085 } 086 087 private float minimum; 088 private float maximum; 089 private float precision; 090 private int updatePeriod; 091 private float value; 092 private String units; 093 private String minLabel; 094 private String maxLabel; 095 private String midLabel; 096 097 /** 098 * Create a new FloatControl given its type and various parameters. 099 * The minimum, maximum, and midpoint labels will all be the empty string. 100 * 101 * @param type the type 102 * @param min the minimum valuee 103 * @param max the maximum value 104 * @param prec the precision 105 * @param update the update period 106 * @param init the initial value 107 * @param units the description of the units 108 */ 109 protected FloatControl(Type type, float min, float max, float prec, 110 int update, float init, String units) 111 { 112 super(type); 113 this.minimum = min; 114 this.maximum = max; 115 this.precision = prec; 116 this.updatePeriod = update; 117 this.value = init; 118 this.units = units; 119 this.minLabel = ""; 120 this.maxLabel = ""; 121 this.midLabel = ""; 122 } 123 124 /** 125 * Create a new FloatControl given its type and various parameters. 126 * 127 * @param type the type 128 * @param min the minimum valuee 129 * @param max the maximum value 130 * @param prec the precision 131 * @param update the update period 132 * @param init the initial value 133 * @param units the description of the units 134 * @param minLabel the label for the minimum value 135 * @param midLabel the label for the midpoint 136 * @param maxLabel the label for the maximum value 137 */ 138 protected FloatControl(Type type, float min, float max, float prec, 139 int update, float init, String units, 140 String minLabel, String midLabel, String maxLabel) 141 { 142 super(type); 143 this.minimum = min; 144 this.maximum = max; 145 this.precision = prec; 146 this.updatePeriod = update; 147 this.value = init; 148 this.units = units; 149 this.minLabel = minLabel; 150 this.maxLabel = maxLabel; 151 this.midLabel = midLabel; 152 } 153 154 /** 155 * Return the maximum value of this control. 156 */ 157 public float getMaximum() 158 { 159 return maximum; 160 } 161 162 /** 163 * Return the label for the minimum value of this control. 164 */ 165 public String getMaxLabel() 166 { 167 return maxLabel; 168 } 169 170 /** 171 * Return the label for the midpoint of this control. 172 */ 173 public String getMidLabel() 174 { 175 return midLabel; 176 } 177 178 /** 179 * Return the minimum value of this control. 180 */ 181 public float getMinimum() 182 { 183 return minimum; 184 } 185 186 /** 187 * Return the label for the minimum value of this control. 188 */ 189 public String getMinLabel() 190 { 191 return minLabel; 192 } 193 194 /** 195 * Return the precision of this control. 196 */ 197 public float getPrecision() 198 { 199 return precision; 200 } 201 202 /** 203 * Return the name of the units for this control. 204 */ 205 public String getUnits() 206 { 207 return units; 208 } 209 210 /** 211 * Return the update period of this control. 212 */ 213 public int getUpdatePeriod() 214 { 215 return updatePeriod; 216 } 217 218 /** 219 * Return the current value of this control. 220 */ 221 public float getValue() 222 { 223 return value; 224 } 225 226 /** 227 * Set the new value of this control. 228 * @param value the new value 229 * @throws IllegalArgumentException if the new value is greater than the 230 * maximum or less than the minimum. 231 */ 232 public void setValue(float value) 233 { 234 if (value < minimum || value > maximum) 235 throw new IllegalArgumentException("value out of range"); 236 this.value = value; 237 } 238 239 /** 240 * This tells the control to start at the starting value 241 * and to shift its value incrementally to the final value 242 * over the given time interval, specified in microseconds. 243 * The default implementation does not do this, but instead 244 * simply sets the value to the final value immediately. 245 * 246 * @param from the starting value 247 * @param to the final value 248 * @param ms the number of microseconds 249 */ 250 public void shift(float from, float to, int ms) 251 { 252 if (from < minimum || from > maximum 253 || to < minimum || to > maximum 254 || ms < 0) 255 throw new IllegalArgumentException("argument out of range"); 256 // The default just sets the value to TO. 257 this.value = to; 258 } 259 260 /** 261 * Return a string describing this control. 262 */ 263 public String toString() 264 { 265 return super.toString() + ": " + value; 266 } 267 }