Module java.desktop

Interface Clip

所有超接口:
AutoCloseable, DataLine, Line

public interface Clip extends DataLine
Clip接口表示一种特殊类型的数据线,其音频数据可以在播放之前加载,而不是实时流式传输。

由于数据是预加载的并且具有已知长度,您可以设置剪辑以从其音频数据的任何位置开始播放。您还可以创建一个循环,这样当剪辑播放时它将重复循环。循环由起始和结束采样帧以及循环应播放的次数指定。

剪辑可以从支持此类型线路的Mixer中获取。当打开剪辑时,数据将被加载。

可以使用startstop方法启动和停止音频剪辑的播放。这些方法不会重置媒体位置;start导致播放从上次停止播放的位置继续。要从剪辑的音频数据开头重新开始播放,只需在调用stop之后跟随setFramePosition(0),这将将媒体倒回到剪辑的开头。

自 JDK 版本:
1.3
  • Field Details

    • LOOP_CONTINUOUSLY

      static final int LOOP_CONTINUOUSLY
      表示循环应无限继续而不是在特定循环次数后完成的值。
      参见:
  • Method Details

    • open

      void open(AudioFormat format, byte[] data, int offset, int bufferSize) throws LineUnavailableException
      打开剪辑,这意味着它应获取任何所需的系统资源并变为可操作。剪辑将使用指定的格式和音频数据打开。如果此操作成功,该线路将标记为打开,并向线路的侦听器分派一个OPEN事件。

      在已经打开的线路上调用此方法是非法的,可能会导致IllegalStateException

      请注意,一些线路一旦关闭,就无法重新打开。尝试重新打开此类线路将始终导致LineUnavailableException

      参数:
      format - 提供的音频数据的格式
      data - 包含要加载到剪辑中的音频数据的字节数组
      offset - 从数组开头以字节为单位表示的开始复制点
      bufferSize - 从数组中加载到剪辑中的数据字节数
      抛出:
      LineUnavailableException - 如果由于资源限制而无法打开线路
      IllegalArgumentException - 如果缓冲区大小不代表样本帧的整数倍,或者format未完全指定或无效
      IllegalStateException - 如果线路已经打开
      SecurityException - 如果由于安全限制而无法打开线路
      参见:
    • open

      使用提供的音频输入流中存在的格式和音频数据打开剪辑。打开剪辑意味着它应获取任何所需的系统资源并变为可操作。如果此操作成功,该线路将标记为打开,并向线路的侦听器分派一个OPEN事件。

      在已经打开的线路上调用此方法是非法的,可能会导致IllegalStateException

      请注意,一些线路一旦关闭,就无法重新打开。尝试重新打开此类线路将始终导致LineUnavailableException

      参数:
      stream - 从中读取音频数据以加载到剪辑中的音频输入流
      抛出:
      LineUnavailableException - 如果由于资源限制而无法打开线路
      IOException - 如果在读取流的过程中发生 I/O 异常
      IllegalArgumentException - 如果流的音频格式未完全指定或无效
      IllegalStateException - 如果线路已经打开
      SecurityException - 如果由于安全限制而无法打开线路
      参见:
    • getFrameLength

      int getFrameLength()
      获取样本帧中的媒体长度。
      返回:
      媒体长度,以样本帧表示,如果线路未打开则为AudioSystem.NOT_SPECIFIED
      参见:
    • getMicrosecondLength

      long getMicrosecondLength()
      获取以微秒为单位的媒体持续时间。
      返回:
      媒体持续时间,以微秒表示,如果线路未打开则为AudioSystem.NOT_SPECIFIED
      参见:
    • setFramePosition

      void setFramePosition(int frames)
      设置样本帧中的媒体位置。位置是从零开始的;第一个帧是帧编号零。下次剪辑开始播放时,它将从此位置开始播放。

      要获取样本帧中的当前位置,请使用DataLinegetFramePosition方法。

      参数:
      frames - 所需的新媒体位置,以样本帧表示
    • setMicrosecondPosition

      void setMicrosecondPosition(long microseconds)
      设置以微秒为单位的媒体位置。下次剪辑开始播放时,它将从此位置开始。精度不被保证。例如,实现可能会从当前帧位置和音频样本帧速率计算微秒位置。然后,微秒的精度将受限于每个样本帧的微秒数。

      要获取以微秒为单位的当前位置,请使用DataLinegetMicrosecondPosition方法。

      参数:
      microseconds - 所需的新媒体位置,以微秒表示
    • setLoopPoints

      void setLoopPoints(int start, int end)
      设置将在循环中播放的第一个和最后一个样本帧。结束点必须大于或等于起始点,并且两者都必须落在加载的媒体大小内。起始点为 0 表示加载的媒体的开头。类似地,结束点为 -1 表示媒体的最后一帧。
      参数:
      start - 循环的起始位置,以样本帧表示(从零开始)
      end - 循环的结束位置,以样本帧表示(从零开始),或者 -1 表示最后一帧
      抛出:
      IllegalArgumentException - 如果无法设置请求的循环点,通常是因为一个或两个点超出了媒体的持续时间,或者结束点在起始点之前
    • loop

      void loop(int count)
      从当前位置开始循环播放。播放将继续到循环的结束点,然后循环返回到循环的起始点count次,最后继续播放到剪辑的结尾。

      如果在调用此方法时的当前位置大于循环结束点,则播放将简单地继续到剪辑的结尾而不循环。

      count值为 0 表示任何当前循环都应停止,播放应继续到剪辑的结尾。在循环操作期间使用其他值调用此方法时,行为是未定义的。

      如果在循环过程中停止播放,则当前循环状态将被清除;后续循环和启动请求的行为不受中断的循环操作的影响。

      参数:
      count - 播放应从循环的结束位置回到循环的起始位置的次数,或者LOOP_CONTINUOUSLY表示循环应持续直到中断