# Class FloatControl

java.lang.Object
javax.sound.sampled.Control
javax.sound.sampled.FloatControl

public abstract class FloatControl extends Control
A `FloatControl` object provides control over a range of floating-point values. Float controls are often represented in graphical user interfaces by continuously adjustable objects such as sliders or rotary knobs. Concrete subclasses of `FloatControl` implement controls, such as gain and pan, that affect a line's audio signal in some way that an application can manipulate. The `FloatControl.Type` inner class provides static instances of types that are used to identify some common kinds of float control.

The `FloatControl` abstract class provides methods to set and get the control's current floating-point value. Other methods obtain the possible range of values and the control's resolution (the smallest increment between returned values). Some float controls allow ramping to a new value over a specified period of time. `FloatControl` also includes methods that return string labels for the minimum, maximum, and midpoint positions of the control.

Since:
  1.3
See Also:
  - `Line.getControls()`
  - `Line.isControlSupported(Control.Type)`

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static class`
  `FloatControl.Type`
  An instance of the `FloatControl.Type` inner class identifies one kind of float control.

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `FloatControl(FloatControl.Type type, float minimum, float maximum, float precision, int updatePeriod, float initialValue, String units)`
  Constructs a new float control object with the given parameters.
  `protected`
  `FloatControl(FloatControl.Type type, float minimum, float maximum, float precision, int updatePeriod, float initialValue, String units, String minLabel, String midLabel, String maxLabel)`
  Constructs a new float control object with the given parameters.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `float`
  `getMaximum()`
  Obtains the maximum value permitted.
  `String`
  `getMaxLabel()`
  Obtains the label for the maximum value, such as "Right" or "Full".
  `String`
  `getMidLabel()`
  Obtains the label for the mid-point value, such as "Center" or "Default".
  `float`
  `getMinimum()`
  Obtains the minimum value permitted.
  `String`
  `getMinLabel()`
  Obtains the label for the minimum value, such as "Left" or "Off".
  `float`
  `getPrecision()`
  Obtains the resolution or granularity of the control, in the units that the control measures.
  `String`
  `getUnits()`
  Obtains the label for the units in which the control's values are expressed, such as "dB" or "frames per second."
  `int`
  `getUpdatePeriod()`
  Obtains the smallest time interval, in microseconds, over which the control's value can change during a shift.
  `float`
  `getValue()`
  Obtains this control's current value.
  `void`
  `setValue(float newValue)`
  Sets the current value for the control.
  `void`
  `shift(float from, float to, int microseconds)`
  Changes the control value from the initial value to the final value linearly over the specified time period, specified in microseconds.
  `String`
  `toString()`
  Returns a string representation of the float control.

  ### Methods declared in class Control

  `getType`
  Modifier and Type
  Method
  Description
  `Control.Type`
  `getType()`
  Obtains the control's type.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### FloatControl

    protected FloatControl(FloatControl.Type type, float minimum, float maximum, float precision, int updatePeriod, float initialValue, String units, String minLabel, String midLabel, String maxLabel)
    Constructs a new float control object with the given parameters.
    Parameters:
      `type` - the kind of control represented by this float control object
      `minimum` - the smallest value permitted for the control
      `maximum` - the largest value permitted for the control
      `precision` - the resolution or granularity of the control. This is the size of the increment between discrete valid values.
      `updatePeriod` - the smallest time interval, in microseconds, over which the control can change from one discrete value to the next during a `shift`
      `initialValue` - the value that the control starts with when constructed
      `units` - the label for the units in which the control's values are expressed, such as "dB" or "frames per second"
      `minLabel` - the label for the minimum value, such as "Left" or "Off"
      `midLabel` - the label for the midpoint value, such as "Center" or "Default"
      `maxLabel` - the label for the maximum value, such as "Right" or "Full"
    Throws:
      `IllegalArgumentException` - if `minimum` is greater than `maximum` or `initialValue` does not fall within the allowable range

  - ### FloatControl

    protected FloatControl(FloatControl.Type type, float minimum, float maximum, float precision, int updatePeriod, float initialValue, String units)
    Constructs a new float control object with the given parameters. The labels for the minimum, maximum, and mid-point values are set to zero-length strings.
    Parameters:
      `type` - the kind of control represented by this float control object
      `minimum` - the smallest value permitted for the control
      `maximum` - the largest value permitted for the control
      `precision` - the resolution or granularity of the control. This is the size of the increment between discrete valid values.
      `updatePeriod` - the smallest time interval, in microseconds, over which the control can change from one discrete value to the next during a `shift`
      `initialValue` - the value that the control starts with when constructed
      `units` - the label for the units in which the control's values are expressed, such as "dB" or "frames per second"
    Throws:
      `IllegalArgumentException` - if `minimum` is greater than `maximum` or `initialValue` does not fall within the allowable range

- ## Method Details

  - ### setValue

    public void setValue(float newValue)
    Sets the current value for the control. The default implementation simply sets the value as indicated. If the value indicated is greater than the maximum value, or smaller than the minimum value, an `IllegalArgumentException` is thrown. Some controls require that their line be open before they can be affected by setting a value.
    Parameters:
      `newValue` - desired new value
    Throws:
      `IllegalArgumentException` - if the value indicated does not fall within the allowable range

  - ### getValue

    public float getValue()
    Obtains this control's current value.
    Returns:
      the current value

  - ### getMaximum

    public float getMaximum()
    Obtains the maximum value permitted.
    Returns:
      the maximum allowable value

  - ### getMinimum

    public float getMinimum()
    Obtains the minimum value permitted.
    Returns:
      the minimum allowable value

  - ### getUnits

    public String getUnits()
    Obtains the label for the units in which the control's values are expressed, such as "dB" or "frames per second."
    Returns:
      the units label, or a zero-length string if no label

  - ### getMinLabel

    public String getMinLabel()
    Obtains the label for the minimum value, such as "Left" or "Off".
    Returns:
      the minimum value label, or a zero-length string if no label has been set

  - ### getMidLabel

    public String getMidLabel()
    Obtains the label for the mid-point value, such as "Center" or "Default".
    Returns:
      the mid-point value label, or a zero-length string if no label has been set

  - ### getMaxLabel

    public String getMaxLabel()
    Obtains the label for the maximum value, such as "Right" or "Full".
    Returns:
      the maximum value label, or a zero-length string if no label has been set

  - ### getPrecision

    public float getPrecision()
    Obtains the resolution or granularity of the control, in the units that the control measures. The precision is the size of the increment between discrete valid values for this control, over the set of supported floating-point values.
    Returns:
      the control's precision

  - ### getUpdatePeriod

    public int getUpdatePeriod()
    Obtains the smallest time interval, in microseconds, over which the control's value can change during a shift. The update period is the inverse of the frequency with which the control updates its value during a shift. If the implementation does not support value shifting over time, it should set the control's value to the final value immediately and return -1 from this method.
    Returns:
      update period in microseconds, or -1 if shifting over time is unsupported
    See Also:
      - `shift(float, float, int)`

  - ### shift

    public void shift(float from, float to, int microseconds)
    Changes the control value from the initial value to the final value linearly over the specified time period, specified in microseconds. This method returns without blocking; it does not wait for the shift to complete. An implementation should complete the operation within the time specified. The default implementation simply changes the value to the final value immediately.
    Parameters:
      `from` - initial value at the beginning of the shift
      `to` - final value after the shift
      `microseconds` - maximum duration of the shift in microseconds
    Throws:
      `IllegalArgumentException` - if either `from` or `to` value does not fall within the allowable range
    See Also:
      - `getUpdatePeriod()`

  - ### toString

    public String toString()
    Returns a string representation of the float control.
    Overrides:
      `toString` in class `Control`
    Returns:
      a string representation of the float control