Module javafx.media
Package javafx.scene.media

# Class MediaPlayer

java.lang.Object
javafx.scene.media.MediaPlayer

    public final class MediaPlayer
    extends Object

The `MediaPlayer` class provides the controls for playing media. It is used in combination with the `Media` and `MediaView` classes to display and control media playback. `MediaPlayer` does not contain any visual elements so must be used with the `MediaView` class to view any video track which may be present.

`MediaPlayer` provides the `pause()`, `play()`, `stop()` and `seek()` controls as well as the `rate` and `autoPlay` properties which apply to all types of media. It also provides the `balance`, `mute`, and `volume` properties which control audio playback characteristics. Further control over audio quality may be attained via the `AudioEqualizer` associated with the player. Frequency descriptors of audio playback may be observed by registering an `AudioSpectrumListener`. Information about playback position, rate, and buffering may be obtained from the `currentTime`, `currentRate`, and `bufferProgressTime` properties, respectively. Media marker notifications are received by an event handler registered as the `onMarker` property.

For finite duration media, playback may be positioned at any point in time between `0.0` and the duration of the media. `MediaPlayer` refines this definition by adding the `startTime` and `stopTime` properties which in effect define a virtual media source with time position constrained to `[startTime,stopTime]`. Media playback commences at `startTime` and continues to `stopTime`. The interval defined by these two endpoints is termed a cycle with duration being the difference of the stop and start times. This cycle may be set to repeat a specific or indefinite number of times. The total duration of media playback is then the product of the cycle duration and the number of times the cycle is played. If the stop time of the cycle is reached and the cycle is to be played again, the event handler registered with the `onRepeat` property is invoked. If the stop time is reached and the cycle is not to be repeated, then the event handler registered with the `onEndOfMedia` property is invoked. A zero-relative index of which cycle is presently being played is maintained by `currentCount`.

The operation of a `MediaPlayer` is inherently asynchronous. A player is not prepared to respond to commands quasi-immediately until its status has transitioned to `MediaPlayer.Status.READY`, which in effect generally occurs when media pre-roll completes. Some requests made of a player prior to its status being `READY` will however take effect when that status is entered. These include invoking `play()` without an intervening invocation of `pause()` or `stop()` before the `READY` transition, as well as setting any of the `autoPlay`, `balance`, `mute`, `rate`, `startTime`, `stopTime`, and `volume` properties.

The `status` property may be monitored to make the application aware of player status changes, and callback functions may be registered via properties such as `onReady` if an action should be taken when a particular status is entered. There are also `error` and `onError` properties which respectively enable monitoring when an error occurs and taking a specified action in response thereto.

The same `MediaPlayer` object may be shared among multiple `MediaView`s. This will not affect the player itself. In particular, the property settings of the view will not have any effect on media playback.

Since:
  JavaFX 2.0
See Also:
  `Media`, `MediaView`

- ## Property Summary

  Properties
  Type | Property | Description
  --- | --- | ---
  `DoubleProperty` | `audioSpectrumInterval` | The interval between spectrum updates in seconds.
  `ObjectProperty<AudioSpectrumListener>` | `audioSpectrumListener` | A listener for audio spectrum updates.
  `IntegerProperty` | `audioSpectrumNumBands` | The number of bands in the audio spectrum.
  `IntegerProperty` | `audioSpectrumThreshold` | The sensitivity threshold in decibels; must be non-positive.
  `BooleanProperty` | `autoPlay` | Whether playing should start as soon as possible.
  `DoubleProperty` | `balance` | The balance, or left-right setting, of the audio output.
  `ReadOnlyObjectProperty<Duration>` | `bufferProgressTime` | The current buffer position indicating how much media can be played without stalling the `MediaPlayer`.
  `ReadOnlyIntegerProperty` | `currentCount` | The number of completed playback cycles.
  `ReadOnlyDoubleProperty` | `currentRate` | The current rate of playback regardless of settings.
  `ReadOnlyObjectProperty<Duration>` | `currentTime` | The current media playback time.
  `IntegerProperty` | `cycleCount` | The number of times the media will be played.
  `ReadOnlyObjectProperty<Duration>` | `cycleDuration` | The amount of time between the `startTime` and `stopTime` of this player.
  `ReadOnlyObjectProperty<MediaException>` | `error` | Observable property set to a `MediaException` if an error occurs.
  `BooleanProperty` | `mute` | Whether the player audio is muted.
  `ObjectProperty<Runnable>` | `onEndOfMedia` | Event handler invoked when the player `currentTime` reaches `stopTime`.
  `ObjectProperty<Runnable>` | `onError` | Event handler invoked when an error occurs.
  `ObjectProperty<Runnable>` | `onHalted` | Event handler invoked when the status changes to `HALTED`.
  `ObjectProperty<EventHandler<MediaMarkerEvent>>` | `onMarker` | Event handler invoked when the player `currentTime` reaches a media marker.
  `ObjectProperty<Runnable>` | `onPaused` | Event handler invoked when the status changes to `PAUSED`.
  `ObjectProperty<Runnable>` | `onPlaying` | Event handler invoked when the status changes to `PLAYING`.
  `ObjectProperty<Runnable>` | `onReady` | Event handler invoked when the status changes to `READY`.
  `ObjectProperty<Runnable>` | `onRepeat` | Event handler invoked when the player `currentTime` reaches `stopTime` and will be repeating.
  `ObjectProperty<Runnable>` | `onStalled` | Event handler invoked when the status changes to `STALLED`.
  `ObjectProperty<Runnable>` | `onStopped` | Event handler invoked when the status changes to `STOPPED`.
  `DoubleProperty` | `rate` | The rate at which the media should be played.
  `ObjectProperty<Duration>` | `startTime` | The time offset where media should start playing, or restart from when repeating.
  `ReadOnlyObjectProperty<MediaPlayer.Status>` | `status` | The current state of the MediaPlayer.
  `ObjectProperty<Duration>` | `stopTime` | The time offset where media should stop playing or restart when repeating.
  `ReadOnlyObjectProperty<Duration>` | `totalDuration` | The total amount of play time if allowed to play until finished.
  `DoubleProperty` | `volume` | The volume at which the media should be played.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type | Class | Description
  --- | --- | ---
  `static class` | `MediaPlayer.Status` | Enumeration describing the different status values of a `MediaPlayer`.

- ## Field Summary

  Fields
  Modifier and Type | Field | Description
  --- | --- | ---
  `static int` | `INDEFINITE` | A value representing an effectively infinite number of playback cycles.

- ## Constructor Summary

  Constructors
  Constructor | Description
  --- | ---
  `MediaPlayer​(Media media)` | Create a player for a specific media.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `DoubleProperty` | `audioSpectrumIntervalProperty()` | The interval between spectrum updates in seconds.
  `ObjectProperty<AudioSpectrumListener>` | `audioSpectrumListenerProperty()` | A listener for audio spectrum updates.
  `IntegerProperty` | `audioSpectrumNumBandsProperty()` | The number of bands in the audio spectrum.
  `IntegerProperty` | `audioSpectrumThresholdProperty()` | The sensitivity threshold in decibels; must be non-positive.
  `BooleanProperty` | `autoPlayProperty()` | Whether playing should start as soon as possible.
  `DoubleProperty` | `balanceProperty()` | The balance, or left-right setting, of the audio output.
  `ReadOnlyObjectProperty<Duration>` | `bufferProgressTimeProperty()` | The current buffer position indicating how much media can be played without stalling the `MediaPlayer`.
  `ReadOnlyIntegerProperty` | `currentCountProperty()` | The number of completed playback cycles.
  `ReadOnlyDoubleProperty` | `currentRateProperty()` | The current rate of playback regardless of settings.
  `ReadOnlyObjectProperty<Duration>` | `currentTimeProperty()` | The current media playback time.
  `IntegerProperty` | `cycleCountProperty()` | The number of times the media will be played.
  `ReadOnlyObjectProperty<Duration>` | `cycleDurationProperty()` | The amount of time between the `startTime` and `stopTime` of this player.
  `void` | `dispose()` | Free all resources associated with player.
  `ReadOnlyObjectProperty<MediaException>` | `errorProperty()` | Observable property set to a `MediaException` if an error occurs.
  `AudioEqualizer` | `getAudioEqualizer()` | Retrieve the `AudioEqualizer` associated with this player.
  `double` | `getAudioSpectrumInterval()` | Retrieves the value of the audio spectrum notification interval in seconds.
  `AudioSpectrumListener` | `getAudioSpectrumListener()` | Retrieves the listener of the audio spectrum.
  `int` | `getAudioSpectrumNumBands()` | Retrieves the number of bands in the audio spectrum.
  `int` | `getAudioSpectrumThreshold()` | Retrieves the audio spectrum threshold in decibels.
  `double` | `getBalance()` | Retrieves the audio balance.
  `Duration` | `getBufferProgressTime()` | Retrieves the `bufferProgressTime` value.
  `int` | `getCurrentCount()` | Retrieves the index of the current cycle.
  `double` | `getCurrentRate()` | Retrieves the current playback rate.
  `Duration` | `getCurrentTime()` | Retrieves the current media time.
  `int` | `getCycleCount()` | Retrieves the cycle count.
  `Duration` | `getCycleDuration()` | Retrieves the cycle duration in seconds.
  `MediaException` | `getError()` | Retrieve the value of the `error` property or `null` if there is no error.
  `Media` | `getMedia()` | Retrieves the `Media` instance being played.
  `Runnable` | `getOnEndOfMedia()` | Retrieves the end of media event handler.
  `Runnable` | `getOnError()` | Retrieves the event handler for errors.
  `Runnable` | `getOnHalted()` | Retrieves the `MediaPlayer.Status.HALTED` event handler.
  `EventHandler<MediaMarkerEvent>` | `getOnMarker()` | Retrieves the marker event handler.
  `Runnable` | `getOnPaused()` | Retrieves the `MediaPlayer.Status.PAUSED` event handler.
  `Runnable` | `getOnPlaying()` | Retrieves the `MediaPlayer.Status.PLAYING` event handler.
  `Runnable` | `getOnReady()` | Retrieves the `MediaPlayer.Status.READY` event handler.
  `Runnable` | `getOnRepeat()` | Retrieves the repeat event handler.
  `Runnable` | `getOnStalled()` | Retrieves the `MediaPlayer.Status.STALLED` event handler.
  `Runnable` | `getOnStopped()` | Retrieves the `MediaPlayer.Status.STOPPED` event handler.
  `double` | `getRate()` | Retrieves the playback rate.
  `Duration` | `getStartTime()` | Retrieves the start time.
  `MediaPlayer.Status` | `getStatus()` | Retrieves the current player status.
  `Duration` | `getStopTime()` | Retrieves the stop time.
  `Duration` | `getTotalDuration()` | Retrieves the total playback duration including all cycles (repetitions).
  `double` | `getVolume()` | Retrieves the audio playback volume.
  `boolean` | `isAutoPlay()` | Retrieves the `autoPlay` property value.
  `boolean` | `isMute()` | Retrieves the `muteProperty()` value.
  `BooleanProperty` | `muteProperty()` | Whether the player audio is muted.
  `ObjectProperty<Runnable>` | `onEndOfMediaProperty()` | Event handler invoked when the player `currentTime` reaches `stopTime`.
  `ObjectProperty<Runnable>` | `onErrorProperty()` | Event handler invoked when an error occurs.
  `ObjectProperty<Runnable>` | `onHaltedProperty()` | Event handler invoked when the status changes to `HALTED`.
  `ObjectProperty<EventHandler<MediaMarkerEvent>>` | `onMarkerProperty()` | Event handler invoked when the player `currentTime` reaches a media marker.
  `ObjectProperty<Runnable>` | `onPausedProperty()` | Event handler invoked when the status changes to `PAUSED`.
  `ObjectProperty<Runnable>` | `onPlayingProperty()` | Event handler invoked when the status changes to `PLAYING`.
  `ObjectProperty<Runnable>` | `onReadyProperty()` | Event handler invoked when the status changes to `READY`.
  `ObjectProperty<Runnable>` | `onRepeatProperty()` | Event handler invoked when the player `currentTime` reaches `stopTime` and will be repeating.
  `ObjectProperty<Runnable>` | `onStalledProperty()` | Event handler invoked when the status changes to `STALLED`.
  `ObjectProperty<Runnable>` | `onStoppedProperty()` | Event handler invoked when the status changes to `STOPPED`.
  `void` | `pause()` | Pauses the player.
  `void` | `play()` | Starts playing the media.
  `DoubleProperty` | `rateProperty()` | The rate at which the media should be played.
  `void` | `seek​(Duration seekTime)` | Seeks the player to a new playback time.
  `void` | `setAudioSpectrumInterval​(double value)` | Sets the value of the audio spectrum notification interval in seconds.
  `void` | `setAudioSpectrumListener​(AudioSpectrumListener listener)` | Sets the listener of the audio spectrum.
  `void` | `setAudioSpectrumNumBands​(int value)` | Sets the number of bands in the audio spectrum.
  `void` | `setAudioSpectrumThreshold​(int value)` | Sets the audio spectrum threshold in decibels.
  `void` | `setAutoPlay​(boolean value)` | Sets the `autoPlay` property value.
  `void` | `setBalance​(double value)` | Sets the audio balance.
  `void` | `setCycleCount​(int value)` | Sets the cycle count.
  `void` | `setMute​(boolean value)` | Sets the value of `muteProperty()`.
  `void` | `setOnEndOfMedia​(Runnable value)` | Sets the end of media event handler.
  `void` | `setOnError​(Runnable value)` | Sets the event handler to be called when an error occurs.
  `void` | `setOnHalted​(Runnable value)` | Sets the `MediaPlayer.Status.HALTED` event handler.
  `void` | `setOnMarker​(EventHandler<MediaMarkerEvent> onMarker)` | Sets the marker event handler.
  `void` | `setOnPaused​(Runnable value)` | Sets the `MediaPlayer.Status.PAUSED` event handler.
  `void` | `setOnPlaying​(Runnable value)` | Sets the `MediaPlayer.Status.PLAYING` event handler.
  `void` | `setOnReady​(Runnable value)` | Sets the `MediaPlayer.Status.READY` event handler.
  `void` | `setOnRepeat​(Runnable value)` | Sets the repeat event handler.
  `void` | `setOnStalled​(Runnable value)` | Sets the `MediaPlayer.Status.STALLED` event handler.
  `void` | `setOnStopped​(Runnable value)` | Sets the `MediaPlayer.Status.STOPPED` event handler.
  `void` | `setRate​(double value)` | Sets the playback rate to the supplied value.
  `void` | `setStartTime​(Duration value)` | Sets the start time.
  `void` | `setStopTime​(Duration value)` | Sets the stop time.
  `void` | `setVolume​(double value)` | Sets the audio playback volume.
  `ObjectProperty<Duration>` | `startTimeProperty()` | The time offset where media should start playing, or restart from when repeating.
  `ReadOnlyObjectProperty<MediaPlayer.Status>` | `statusProperty()` | The current state of the MediaPlayer.
  `void` | `stop()` | Stops playing the media.
  `ObjectProperty<Duration>` | `stopTimeProperty()` | The time offset where media should stop playing or restart when repeating.
  `ReadOnlyObjectProperty<Duration>` | `totalDurationProperty()` | The total amount of play time if allowed to play until finished.
  `DoubleProperty` | `volumeProperty()` | The volume at which the media should be played.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Property Details

  - ### error

    public ReadOnlyObjectProperty<MediaException> errorProperty
    Observable property set to a `MediaException` if an error occurs.
    See Also:
      `getError()`

  - ### onError

    public ObjectProperty<Runnable> onErrorProperty
    Event handler invoked when an error occurs.
    See Also:
      `getOnError()`, `setOnError(Runnable)`

  - ### autoPlay

    public BooleanProperty autoPlayProperty
    Whether playing should start as soon as possible. For a new player this will occur once the player has reached the READY state. The default value is `false`.
    See Also:
      `isAutoPlay()`, `setAutoPlay(boolean)`

  - ### rate

    public DoubleProperty rateProperty
    The rate at which the media should be played. For example, a rate of `1.0` plays the media at its normal (encoded) playback rate, `2.0` plays back at twice the normal rate, etc. The currently supported range of rates is `[0.0, 8.0]`. The default value is `1.0`.
    See Also:
      `getRate()`, `setRate(double)`

  - ### currentRate

    public ReadOnlyDoubleProperty currentRateProperty
    The current rate of playback regardless of settings. For example, if `rate` is set to 1.0 and the player is paused or stalled, then `currentRate` will be zero.
    See Also:
      `getCurrentRate()`

  - ### volume

    public DoubleProperty volumeProperty
    The volume at which the media should be played. The range of effective values is `[0.0 1.0]` where `0.0` is inaudible and `1.0` is full volume, which is the default.
    See Also:
      `getVolume()`, `setVolume(double)`

  - ### balance

    public DoubleProperty balanceProperty
    The balance, or left-right setting, of the audio output. The range of effective values is `[-1.0, 1.0]` with `-1.0` being full left, `0.0` center, and `1.0` full right. The default value is `0.0`.
    See Also:
      `getBalance()`, `setBalance(double)`

  - ### startTime

    public ObjectProperty<Duration> startTimeProperty
    The time offset where media should start playing, or restart from when repeating. When playback is stopped, the current time is reset to this value. If this value is positive, then the first time the media is played there might be a delay before playing begins unless the play position can be set to an arbitrary time within the media. This could occur for example for a video which does not contain a lookup table of the offsets of intra-frames in the video stream. In such a case the video frames would need to be skipped over until the position of the first intra-frame before the start time was reached. The default value is `Duration.ZERO`.

    Constraints: `0 ≤ startTime < `stopTime``

    See Also:
      `getStartTime()`, `setStartTime(Duration)`

  - ### stopTime

    public ObjectProperty<Duration> stopTimeProperty
    The time offset where media should stop playing or restart when repeating. The default value is ``getMedia()`.getDuration()`.

    Constraints: ``startTime` < stopTime ≤ `Media.duration``

    See Also:
      `getStopTime()`, `setStopTime(Duration)`

  - ### cycleDuration

    public ReadOnlyObjectProperty<Duration> cycleDurationProperty
    The amount of time between the `startTime` and `stopTime` of this player. For the total duration of the Media use the `Media.duration` property.
    See Also:
      `getCycleDuration()`

  - ### totalDuration

    public ReadOnlyObjectProperty<Duration> totalDurationProperty
    The total amount of play time if allowed to play until finished. If `cycleCount` is set to `INDEFINITE` then this will also be INDEFINITE. If the Media duration is UNKNOWN, then this will likewise be UNKNOWN. Otherwise, total duration will be the product of cycleDuration and cycleCount.
    See Also:
      `getTotalDuration()`

  - ### currentTime

    public ReadOnlyObjectProperty<Duration> currentTimeProperty
    The current media playback time. This property is read-only: use `seek(javafx.util.Duration)` to change playback to a different stream position.
    See Also:
      `getCurrentTime()`

  - ### status

    public ReadOnlyObjectProperty<MediaPlayer.Status> statusProperty
    The current state of the MediaPlayer.
    See Also:
      `getStatus()`

  - ### bufferProgressTime

    public ReadOnlyObjectProperty<Duration> bufferProgressTimeProperty
    The current buffer position indicating how much media can be played without stalling the `MediaPlayer`. This is applicable to buffered streams such as those reading from network connections as opposed for example to local files.

    Seeking to a position beyond `bufferProgressTime` might cause a slight pause in playback until an amount of data sufficient to permit playback resumption has been buffered.

    See Also:
      `getBufferProgressTime()`

  - ### cycleCount

    public IntegerProperty cycleCountProperty
    The number of times the media will be played. By default, `cycleCount` is set to `1` meaning the media will only be played once. Setting `cycleCount` to a value greater than 1 will cause the media to play the given number of times or until stopped. If set to `INDEFINITE`, playback will repeat until stop() or pause() is called.

    constraints: `cycleCount ≥ 1`

    See Also:
      `getCycleCount()`, `setCycleCount(int)`

  - ### currentCount

    public ReadOnlyIntegerProperty currentCountProperty
    The number of completed playback cycles. On the first pass, the value should be 0. On the second pass, the value should be 1 and so on. It is incremented at the end of each cycle just prior to seeking back to `startTime`, i.e., when `stopTime` or the end of media has been reached.
    See Also:
      `getCurrentCount()`

  - ### mute

    public BooleanProperty muteProperty
    Whether the player audio is muted. A value of `true` indicates that audio is not being produced. The value of this property has no effect on `volume`, i.e., if the audio is muted and then un-muted, audio playback will resume at the same audible level provided of course that the `volume` property has not been modified meanwhile. The default value is `false`.
    See Also:
      `isMute()`, `setMute(boolean)`

  - ### onMarker

    public ObjectProperty<EventHandler<MediaMarkerEvent>> onMarkerProperty
    Event handler invoked when the player `currentTime` reaches a media marker.
    See Also:
      `getOnMarker()`, `setOnMarker(EventHandler)`

  - ### onEndOfMedia

    public ObjectProperty<Runnable> onEndOfMediaProperty
    Event handler invoked when the player `currentTime` reaches `stopTime`.
    See Also:
      `getOnEndOfMedia()`, `setOnEndOfMedia(Runnable)`

  - ### onReady

    public ObjectProperty<Runnable> onReadyProperty
    Event handler invoked when the status changes to `READY`.
    See Also:
      `getOnReady()`, `setOnReady(Runnable)`

  - ### onPlaying

    public ObjectProperty<Runnable> onPlayingProperty
    Event handler invoked when the status changes to `PLAYING`.
    See Also:
      `getOnPlaying()`, `setOnPlaying(Runnable)`

  - ### onPaused

    public ObjectProperty<Runnable> onPausedProperty
    Event handler invoked when the status changes to `PAUSED`.
    See Also:
      `getOnPaused()`, `setOnPaused(Runnable)`

  - ### onStopped

    public ObjectProperty<Runnable> onStoppedProperty
    Event handler invoked when the status changes to `STOPPED`.
    See Also:
      `getOnStopped()`, `setOnStopped(Runnable)`

  - ### onHalted

    public ObjectProperty<Runnable> onHaltedProperty
    Event handler invoked when the status changes to `HALTED`.
    See Also:
      `getOnHalted()`, `setOnHalted(Runnable)`

  - ### onRepeat

    public ObjectProperty<Runnable> onRepeatProperty
    Event handler invoked when the player `currentTime` reaches `stopTime` and will be repeating. This callback is made prior to seeking back to `startTime`.
    See Also:
      `getOnRepeat()`, `setOnRepeat(Runnable)`

  - ### onStalled

    public ObjectProperty<Runnable> onStalledProperty
    Event handler invoked when the status changes to `STALLED`.
    See Also:
      `getOnStalled()`, `setOnStalled(Runnable)`

  - ### audioSpectrumNumBands

    public IntegerProperty audioSpectrumNumBandsProperty
    The number of bands in the audio spectrum. The default value is 128; minimum is 2. The frequency range of the audio signal will be divided into the specified number of frequency bins. For example, a typical digital music signal has a frequency range of `[0.0, 22050]` Hz. If the number of spectral bands were in this case set to 10, the width of each frequency bin in the spectrum would be `2205` Hz with the lower bound of the lowest frequency bin equal to `0.0`.
    See Also:
      `getAudioSpectrumNumBands()`, `setAudioSpectrumNumBands(int)`

  - ### audioSpectrumInterval

    public DoubleProperty audioSpectrumIntervalProperty
    The interval between spectrum updates in seconds. The default is `0.1` seconds.
    See Also:
      `getAudioSpectrumInterval()`, `setAudioSpectrumInterval(double)`

  - ### audioSpectrumThreshold

    public IntegerProperty audioSpectrumThresholdProperty
    The sensitivity threshold in decibels; must be non-positive. Values below this threshold with respect to the peak frequency in the given spectral band will be set to the value of the threshold. The default value is -60 dB.
    See Also:
      `getAudioSpectrumThreshold()`, `setAudioSpectrumThreshold(int)`

  - ### audioSpectrumListener

    public ObjectProperty<AudioSpectrumListener> audioSpectrumListenerProperty
    A listener for audio spectrum updates. When the listener is registered, audio spectrum computation is enabled; upon removing the listener, computation is disabled. Only a single listener may be registered, so if multiple observers are required, events must be forwarded.

    An `AudioSpectrumListener` may be useful for example to plot the frequency spectrum of the audio being played or to generate waveforms for a music visualizer.

    See Also:
      `getAudioSpectrumListener()`, `setAudioSpectrumListener(AudioSpectrumListener)`

- ## Field Details

  - ### INDEFINITE

    public static final int INDEFINITE
    A value representing an effectively infinite number of playback cycles. When `cycleCount` is set to this value, the player will replay the `Media` until stopped or paused.
    See Also:
      Constant Field Values

- ## Constructor Details

  - ### MediaPlayer

    public MediaPlayer​(Media media)
    Create a player for a specific media. This is the only way to associate a `Media` object with a `MediaPlayer`: once the player is created it cannot be changed. Errors which occur synchronously within the constructor will cause exceptions to be thrown. Errors which occur asynchronously will cause the `error` property to be set and consequently any `onError` callback to be invoked.

    When created, the `status` of the player will be `MediaPlayer.Status.UNKNOWN`. Once the `status` has transitioned to `MediaPlayer.Status.READY` the player will be in a usable condition. The amount of time between player creation and its entering `READY` status may vary depending, for example, on whether the media is being read over a network connection or from a local file system.

    Parameters:
      `media` - The media to play.
    Throws:
      `NullPointerException` - if media is `null`.
      `MediaException` - if any synchronous errors occur within the constructor.

- ## Method Details

  - ### getAudioEqualizer

    public final AudioEqualizer getAudioEqualizer()
    Retrieve the `AudioEqualizer` associated with this player.
    Returns:
      the `AudioEqualizer` or `null` if player is disposed.

  - ### getError

    public final MediaException getError()
    Retrieve the value of the `error` property or `null` if there is no error.
    Returns:
      a `MediaException` or `null`.

  - ### errorProperty

    public ReadOnlyObjectProperty<MediaException> errorProperty()
    Observable property set to a `MediaException` if an error occurs.
    See Also:
      `getError()`

  - ### setOnError

    public final void setOnError​(Runnable value)
    Sets the event handler to be called when an error occurs.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnError

    public final Runnable getOnError()
    Retrieves the event handler for errors.
    Returns:
      the event handler.

  - ### onErrorProperty

    public ObjectProperty<Runnable> onErrorProperty()
    Event handler invoked when an error occurs.
    See Also:
      `getOnError()`, `setOnError(Runnable)`

  - ### getMedia

    public final Media getMedia()
    Retrieves the `Media` instance being played.
    Returns:
      the `Media` object.

  - ### setAutoPlay

    public final void setAutoPlay​(boolean value)
    Sets the `autoPlay` property value.
    Parameters:
      `value` - whether to enable auto-playback

  - ### isAutoPlay

    public final boolean isAutoPlay()
    Retrieves the `autoPlay` property value.
    Returns:
      the value.

  - ### autoPlayProperty

    public BooleanProperty autoPlayProperty()
    Whether playing should start as soon as possible. For a new player this will occur once the player has reached the READY state. The default value is `false`.
    See Also:
      `isAutoPlay()`, `setAutoPlay(boolean)`

  - ### play

    public void play()
    Starts playing the media. If previously paused, then playback resumes where it was paused. If playback was stopped, playback starts from the `startTime`. When playing actually starts the `status` will be set to `MediaPlayer.Status.PLAYING`.

  - ### pause

    public void pause()
    Pauses the player. Once the player is actually paused the `status` will be set to `MediaPlayer.Status.PAUSED`.

  - ### stop

    public void stop()
    Stops playing the media. This operation resets playback to `startTime`, and resets `currentCount` to zero. Once the player is actually stopped, the `status` will be set to `MediaPlayer.Status.STOPPED`. The only transitions out of `STOPPED` status are to `MediaPlayer.Status.PAUSED` and `MediaPlayer.Status.PLAYING` which occur after invoking `pause()` or `play()`, respectively. While stopped, the player will not respond to playback position changes requested by `seek(javafx.util.Duration)`.

  - ### setRate

    public final void setRate​(double value)
    Sets the playback rate to the supplied value. Its effect will be clamped to the range `[0.0, 8.0]`. Invoking this method will have no effect if media duration is `Duration.INDEFINITE`.
    Parameters:
      `value` - the playback rate

  - ### getRate

    public final double getRate()
    Retrieves the playback rate.
    Returns:
      the playback rate

  - ### rateProperty

    public DoubleProperty rateProperty()
    The rate at which the media should be played. For example, a rate of `1.0` plays the media at its normal (encoded) playback rate, `2.0` plays back at twice the normal rate, etc. The currently supported range of rates is `[0.0, 8.0]`. The default value is `1.0`.
    See Also:
      `getRate()`, `setRate(double)`

  - ### getCurrentRate

    public final double getCurrentRate()
    Retrieves the current playback rate.
    Returns:
      the current rate

  - ### currentRateProperty

    public ReadOnlyDoubleProperty currentRateProperty()
    The current rate of playback regardless of settings. For example, if `rate` is set to 1.0 and the player is paused or stalled, then `currentRate` will be zero.
    See Also:
      `getCurrentRate()`

  - ### setVolume

    public final void setVolume​(double value)
    Sets the audio playback volume. Its effect will be clamped to the range `[0.0, 1.0]`.
    Parameters:
      `value` - the volume

  - ### getVolume

    public final double getVolume()
    Retrieves the audio playback volume. The default value is `1.0`.
    Returns:
      the audio volume

  - ### volumeProperty

    public DoubleProperty volumeProperty()
    The volume at which the media should be played. The range of effective values is `[0.0 1.0]` where `0.0` is inaudible and `1.0` is full volume, which is the default.
    See Also:
      `getVolume()`, `setVolume(double)`

  - ### setBalance

    public final void setBalance​(double value)
    Sets the audio balance. Its effect will be clamped to the range `[-1.0, 1.0]`.
    Parameters:
      `value` - the balance

  - ### getBalance

    public final double getBalance()
    Retrieves the audio balance.
    Returns:
      the audio balance

  - ### balanceProperty

    public DoubleProperty balanceProperty()
    The balance, or left-right setting, of the audio output. The range of effective values is `[-1.0, 1.0]` with `-1.0` being full left, `0.0` center, and `1.0` full right. The default value is `0.0`.
    See Also:
      `getBalance()`, `setBalance(double)`

  - ### setStartTime

    public final void setStartTime​(Duration value)
    Sets the start time. Its effect will be clamped to the range `[`Duration.ZERO`, `stopTime`)`. Invoking this method will have no effect if media duration is `Duration.INDEFINITE`.
    Parameters:
      `value` - the start time

  - ### getStartTime

    public final Duration getStartTime()
    Retrieves the start time. The default value is `Duration.ZERO`.
    Returns:
      the start time

  - ### startTimeProperty

    public ObjectProperty<Duration> startTimeProperty()
    The time offset where media should start playing, or restart from when repeating. When playback is stopped, the current time is reset to this value. If this value is positive, then the first time the media is played there might be a delay before playing begins unless the play position can be set to an arbitrary time within the media. This could occur for example for a video which does not contain a lookup table of the offsets of intra-frames in the video stream. In such a case the video frames would need to be skipped over until the position of the first intra-frame before the start time was reached. The default value is `Duration.ZERO`.

    Constraints: `0 ≤ startTime < `stopTime``

    See Also:
      `getStartTime()`, `setStartTime(Duration)`

  - ### setStopTime

    public final void setStopTime​(Duration value)
    Sets the stop time. Its effect will be clamped to the range `(`startTime`, `Media.duration`]`. Invoking this method will have no effect if media duration is `Duration.INDEFINITE`.
    Parameters:
      `value` - the stop time

  - ### getStopTime

    public final Duration getStopTime()
    Retrieves the stop time. The default value is ``getMedia()`.getDuration()`. Note that ``Media.duration`` may have the value `Duration.UNKNOWN` if media initialization is not complete.
    Returns:
      the stop time

  - ### stopTimeProperty

    public ObjectProperty<Duration> stopTimeProperty()
    The time offset where media should stop playing or restart when repeating. The default value is ``getMedia()`.getDuration()`.

    Constraints: ``startTime` < stopTime ≤ `Media.duration``

    See Also:
      `getStopTime()`, `setStopTime(Duration)`

  - ### getCycleDuration

    public final Duration getCycleDuration()
    Retrieves the cycle duration in seconds.
    Returns:
      the cycle duration

  - ### cycleDurationProperty

    public ReadOnlyObjectProperty<Duration> cycleDurationProperty()
    The amount of time between the `startTime` and `stopTime` of this player. For the total duration of the Media use the `Media.duration` property.
    See Also:
      `getCycleDuration()`

  - ### getTotalDuration

    public final Duration getTotalDuration()
    Retrieves the total playback duration including all cycles (repetitions).
    Returns:
      the total playback duration

  - ### totalDurationProperty

    public ReadOnlyObjectProperty<Duration> totalDurationProperty()
    The total amount of play time if allowed to play until finished. If `cycleCount` is set to `INDEFINITE` then this will also be INDEFINITE. If the Media duration is UNKNOWN, then this will likewise be UNKNOWN. Otherwise, total duration will be the product of cycleDuration and cycleCount.
    See Also:
      `getTotalDuration()`

  - ### getCurrentTime

    public final Duration getCurrentTime()
    Retrieves the current media time.
    Returns:
      the current media time

  - ### currentTimeProperty

    public ReadOnlyObjectProperty<Duration> currentTimeProperty()
    The current media playback time. This property is read-only: use `seek(javafx.util.Duration)` to change playback to a different stream position.
    See Also:
      `getCurrentTime()`

  - ### seek

    public void seek​(Duration seekTime)
    Seeks the player to a new playback time. Invoking this method will have no effect while the player status is `MediaPlayer.Status.STOPPED` or media duration is `Duration.INDEFINITE`.

    The behavior of `seek()` is constrained as follows where start time and stop time indicate the effective lower and upper bounds, respectively, of media playback:

    MediaPlayer Seek Table
    seekTime | seek position
    --- | ---
    `null` | no change
    `Duration.UNKNOWN` | no change
    `Duration.INDEFINITE` | stop time
    seekTime < start time | start time
    seekTime > stop time | stop time
    start time ≤ seekTime ≤ stop time | seekTime

    Parameters:
      `seekTime` - the requested playback time

  - ### getStatus

    public final MediaPlayer.Status getStatus()
    Retrieves the current player status.
    Returns:
      the playback status

  - ### statusProperty

    public ReadOnlyObjectProperty<MediaPlayer.Status> statusProperty()
    The current state of the MediaPlayer.
    See Also:
      `getStatus()`

  - ### getBufferProgressTime

    public final Duration getBufferProgressTime()
    Retrieves the `bufferProgressTime` value.
    Returns:
      the buffer progress time

  - ### bufferProgressTimeProperty

    public ReadOnlyObjectProperty<Duration> bufferProgressTimeProperty()
    The current buffer position indicating how much media can be played without stalling the `MediaPlayer`. This is applicable to buffered streams such as those reading from network connections as opposed for example to local files.

    Seeking to a position beyond `bufferProgressTime` might cause a slight pause in playback until an amount of data sufficient to permit playback resumption has been buffered.

    See Also:
      `getBufferProgressTime()`

  - ### setCycleCount

    public final void setCycleCount​(int value)
    Sets the cycle count. Its effect will be constrained to `[1,`Integer.MAX_VALUE`]`. Invoking this method will have no effect if media duration is `Duration.INDEFINITE`.
    Parameters:
      `value` - the cycle count

  - ### getCycleCount

    public final int getCycleCount()
    Retrieves the cycle count.
    Returns:
      the cycle count.

  - ### cycleCountProperty

    public IntegerProperty cycleCountProperty()
    The number of times the media will be played. By default, `cycleCount` is set to `1` meaning the media will only be played once. Setting `cycleCount` to a value greater than 1 will cause the media to play the given number of times or until stopped. If set to `INDEFINITE`, playback will repeat until stop() or pause() is called.

    constraints: `cycleCount ≥ 1`

    See Also:
      `getCycleCount()`, `setCycleCount(int)`

  - ### getCurrentCount

    public final int getCurrentCount()
    Retrieves the index of the current cycle.
    Returns:
      the current cycle index

  - ### currentCountProperty

    public ReadOnlyIntegerProperty currentCountProperty()
    The number of completed playback cycles. On the first pass, the value should be 0. On the second pass, the value should be 1 and so on. It is incremented at the end of each cycle just prior to seeking back to `startTime`, i.e., when `stopTime` or the end of media has been reached.
    See Also:
      `getCurrentCount()`

  - ### setMute

    public final void setMute​(boolean value)
    Sets the value of `muteProperty()`.
    Parameters:
      `value` - the `mute` setting

  - ### isMute

    public final boolean isMute()
    Retrieves the `muteProperty()` value.
    Returns:
      the mute setting

  - ### muteProperty

    public BooleanProperty muteProperty()
    Whether the player audio is muted. A value of `true` indicates that audio is not being produced. The value of this property has no effect on `volume`, i.e., if the audio is muted and then un-muted, audio playback will resume at the same audible level provided of course that the `volume` property has not been modified meanwhile. The default value is `false`.
    See Also:
      `isMute()`, `setMute(boolean)`

  - ### setOnMarker

    public final void setOnMarker​(EventHandler<MediaMarkerEvent> onMarker)
    Sets the marker event handler.
    Parameters:
      `onMarker` - the marker event handler.

  - ### getOnMarker

    public final EventHandler<MediaMarkerEvent> getOnMarker()
    Retrieves the marker event handler.
    Returns:
      the marker event handler.

  - ### onMarkerProperty

    public ObjectProperty<EventHandler<MediaMarkerEvent>> onMarkerProperty()
    Event handler invoked when the player `currentTime` reaches a media marker.
    See Also:
      `getOnMarker()`, `setOnMarker(EventHandler)`

  - ### setOnEndOfMedia

    public final void setOnEndOfMedia​(Runnable value)
    Sets the end of media event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnEndOfMedia

    public final Runnable getOnEndOfMedia()
    Retrieves the end of media event handler.
    Returns:
      the event handler or `null`.

  - ### onEndOfMediaProperty

    public ObjectProperty<Runnable> onEndOfMediaProperty()
    Event handler invoked when the player `currentTime` reaches `stopTime`.
    See Also:
      `getOnEndOfMedia()`, `setOnEndOfMedia(Runnable)`

  - ### setOnReady

    public final void setOnReady​(Runnable value)
    Sets the `MediaPlayer.Status.READY` event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnReady

    public final Runnable getOnReady()
    Retrieves the `MediaPlayer.Status.READY` event handler.
    Returns:
      the event handler or `null`.

  - ### onReadyProperty

    public ObjectProperty<Runnable> onReadyProperty()
    Event handler invoked when the status changes to `READY`.
    See Also:
      `getOnReady()`, `setOnReady(Runnable)`

  - ### setOnPlaying

    public final void setOnPlaying​(Runnable value)
    Sets the `MediaPlayer.Status.PLAYING` event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnPlaying

    public final Runnable getOnPlaying()
    Retrieves the `MediaPlayer.Status.PLAYING` event handler.
    Returns:
      the event handler or `null`.

  - ### onPlayingProperty

    public ObjectProperty<Runnable> onPlayingProperty()
    Event handler invoked when the status changes to `PLAYING`.
    See Also:
      `getOnPlaying()`, `setOnPlaying(Runnable)`

  - ### setOnPaused

    public final void setOnPaused​(Runnable value)
    Sets the `MediaPlayer.Status.PAUSED` event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnPaused

    public final Runnable getOnPaused()
    Retrieves the `MediaPlayer.Status.PAUSED` event handler.
    Returns:
      the event handler or `null`.

  - ### onPausedProperty

    public ObjectProperty<Runnable> onPausedProperty()
    Event handler invoked when the status changes to `PAUSED`.
    See Also:
      `getOnPaused()`, `setOnPaused(Runnable)`

  - ### setOnStopped

    public final void setOnStopped​(Runnable value)
    Sets the `MediaPlayer.Status.STOPPED` event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnStopped

    public final Runnable getOnStopped()
    Retrieves the `MediaPlayer.Status.STOPPED` event handler.
    Returns:
      the event handler or `null`.

  - ### onStoppedProperty

    public ObjectProperty<Runnable> onStoppedProperty()
    Event handler invoked when the status changes to `STOPPED`.
    See Also:
      `getOnStopped()`, `setOnStopped(Runnable)`

  - ### setOnHalted

    public final void setOnHalted​(Runnable value)
    Sets the `MediaPlayer.Status.HALTED` event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnHalted

    public final Runnable getOnHalted()
    Retrieves the `MediaPlayer.Status.HALTED` event handler.
    Returns:
      the event handler or `null`.

  - ### onHaltedProperty

    public ObjectProperty<Runnable> onHaltedProperty()
    Event handler invoked when the status changes to `HALTED`.
    See Also:
      `getOnHalted()`, `setOnHalted(Runnable)`

  - ### setOnRepeat

    public final void setOnRepeat​(Runnable value)
    Sets the repeat event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnRepeat

    public final Runnable getOnRepeat()
    Retrieves the repeat event handler.
    Returns:
      the event handler or `null`.

  - ### onRepeatProperty

    public ObjectProperty<Runnable> onRepeatProperty()
    Event handler invoked when the player `currentTime` reaches `stopTime` and will be repeating. This callback is made prior to seeking back to `startTime`.
    See Also:
      `getOnRepeat()`, `setOnRepeat(Runnable)`

  - ### setOnStalled

    public final void setOnStalled​(Runnable value)
    Sets the `MediaPlayer.Status.STALLED` event handler.
    Parameters:
      `value` - the event handler or `null`.

  - ### getOnStalled

    public final Runnable getOnStalled()
    Retrieves the `MediaPlayer.Status.STALLED` event handler.
    Returns:
      the event handler or `null`.

  - ### onStalledProperty

    public ObjectProperty<Runnable> onStalledProperty()
    Event handler invoked when the status changes to `STALLED`.
    See Also:
      `getOnStalled()`, `setOnStalled(Runnable)`

  - ### setAudioSpectrumNumBands

    public final void setAudioSpectrumNumBands​(int value)
    Sets the number of bands in the audio spectrum.
    Parameters:
      `value` - the number of spectral bands; `value`must be ≥ 2

  - ### getAudioSpectrumNumBands

    public final int getAudioSpectrumNumBands()
    Retrieves the number of bands in the audio spectrum.
    Returns:
      the number of spectral bands.

  - ### audioSpectrumNumBandsProperty

    public IntegerProperty audioSpectrumNumBandsProperty()
    The number of bands in the audio spectrum. The default value is 128; minimum is 2. The frequency range of the audio signal will be divided into the specified number of frequency bins. For example, a typical digital music signal has a frequency range of `[0.0, 22050]` Hz. If the number of spectral bands were in this case set to 10, the width of each frequency bin in the spectrum would be `2205` Hz with the lower bound of the lowest frequency bin equal to `0.0`.
    See Also:
      `getAudioSpectrumNumBands()`, `setAudioSpectrumNumBands(int)`

  - ### setAudioSpectrumInterval

    public final void setAudioSpectrumInterval​(double value)
    Sets the value of the audio spectrum notification interval in seconds.
    Parameters:
      `value` - a positive value specifying the spectral update interval

  - ### getAudioSpectrumInterval

    public final double getAudioSpectrumInterval()
    Retrieves the value of the audio spectrum notification interval in seconds.
    Returns:
      the spectral update interval

  - ### audioSpectrumIntervalProperty

    public DoubleProperty audioSpectrumIntervalProperty()
    The interval between spectrum updates in seconds. The default is `0.1` seconds.
    See Also:
      `getAudioSpectrumInterval()`, `setAudioSpectrumInterval(double)`

  - ### setAudioSpectrumThreshold

    public final void setAudioSpectrumThreshold​(int value)
    Sets the audio spectrum threshold in decibels.
    Parameters:
      `value` - the spectral threshold in dB; must be ≤ `0`.

  - ### getAudioSpectrumThreshold

    public final int getAudioSpectrumThreshold()
    Retrieves the audio spectrum threshold in decibels.
    Returns:
      the spectral threshold in dB

  - ### audioSpectrumThresholdProperty

    public IntegerProperty audioSpectrumThresholdProperty()
    The sensitivity threshold in decibels; must be non-positive. Values below this threshold with respect to the peak frequency in the given spectral band will be set to the value of the threshold. The default value is -60 dB.
    See Also:
      `getAudioSpectrumThreshold()`, `setAudioSpectrumThreshold(int)`

  - ### setAudioSpectrumListener

    public final void setAudioSpectrumListener​(AudioSpectrumListener listener)
    Sets the listener of the audio spectrum.
    Parameters:
      `listener` - the spectral listener or `null`.

  - ### getAudioSpectrumListener

    public final AudioSpectrumListener getAudioSpectrumListener()
    Retrieves the listener of the audio spectrum.
    Returns:
      the spectral listener or `null`

  - ### audioSpectrumListenerProperty

    public ObjectProperty<AudioSpectrumListener> audioSpectrumListenerProperty()
    A listener for audio spectrum updates. When the listener is registered, audio spectrum computation is enabled; upon removing the listener, computation is disabled. Only a single listener may be registered, so if multiple observers are required, events must be forwarded.

    An `AudioSpectrumListener` may be useful for example to plot the frequency spectrum of the audio being played or to generate waveforms for a music visualizer.

    See Also:
      `getAudioSpectrumListener()`, `setAudioSpectrumListener(AudioSpectrumListener)`

  - ### dispose

    public void dispose()
    Free all resources associated with player. Player SHOULD NOT be used after this function is called. Player will transition to `MediaPlayer.Status.DISPOSED` after this method is done. This method can be called anytime regardless of current player status.
    Since:
      JavaFX 8.0