Module  java.desktop
软件包  javax.sound.sampled

Interface Clip

  • All Superinterfaces:
    AutoCloseableDataLineLine


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

    因为数据是预加载的,并且具有已知的长度,所以您可以设置一个剪辑,以便在其音频数据中的任何位置开始播放。 您也可以创建一个循环,这样当剪辑被播放时,它将重复循环。 循环用起始和结束采样帧指定,循环应该播放的次数。

    剪辑可以从支持这种类型的行的Mixer获得。 数据在打开时被加载到剪辑中。

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

    从以下版本开始:
    1.3
    • 字段详细信息

      • LOOP_CONTINUOUSLY

        static final int LOOP_CONTINUOUSLY
        一个值,指示循环应该在无限期之后继续,而不是在特定循环数之后完成。
        另请参见:
        loop(int)Constant Field Values
    • 方法详细信息

      • 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 - 如果由于安全限制,线路无法打开
        另请参见:
        Line.close()Line.isOpen()LineListener
      • open

        void open​(AudioInputStream stream)
           throws LineUnavailableException,
                  IOException
        以提供的音频输入流中存在的格式和音频数据打开剪辑。 打开一个剪辑意味着它应该获取任何所需的系统资源,并可以运行。 如果这个操作输入流。 如果此操作成功,该行将被标记为打开,并将OPEN事件调度到该行的监听器。

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

        请注意,一旦关闭,一些行不能重新打开。 重新打开此行的尝试总是会导致一个LineUnavailableException

        参数
        stream - 将音频数据读入剪辑的音频输入流
        异常
        LineUnavailableException - 如果由于资源限制,该行无法打开
        IOException - 如果在读取数据流期间发生I / O异常
        IllegalArgumentException - 如果流的音频格式未完全指定或无效
        IllegalStateException - 如果该行已经打开
        SecurityException - 如果由于安全限制,该行无法打开
        另请参见:
        Line.close()Line.isOpen()LineListener
      • getFrameLength

        int getFrameLength​()
        获取样品帧中的介质长度。
        结果
        媒体长度,以采样帧表示,或 AudioSystem.NOT_SPECIFIED如果行未打开
        另请参见:
        AudioSystem.NOT_SPECIFIED
      • getMicrosecondLength

        long getMicrosecondLength​()
        获取媒体持续时间(以微秒为单位)。
        结果
        媒体持续时间,以毫秒为单位,如果线路不开放, AudioSystem.NOT_SPECIFIED
        另请参见:
        AudioSystem.NOT_SPECIFIED
      • setFramePosition

        void setFramePosition​(int frames)
        设置采样帧中的介质位置。 位置为零; 第一帧是帧号零。 当剪辑下一次开始播放时,它将从此位置播放框开始。

        为了获得以示例帧的当前位置,使用getFramePosition的方法DataLine

        参数
        frames - 所需的新媒体位置,以示例框架表示
      • setMicrosecondPosition

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

        要获取当前位置(以微秒为单位),请使用getMicrosecondPosition方法DataLine

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

        void setLoopPoints​(int start,
                           int end)
        设置将在循环中播放的第一个和最后一个采样帧。 结束点必须大于或等于起始点,并且两者必须在加载的介质的大小之内。 起始点的值为0表示加载的媒体的开头。 类似地,结束点的值为-1表示媒体的最后一帧。
        参数
        start - 循环的起始位置,在采样帧(零为基础)
        end - 循环的结束位置,以采样帧(从零为基础)或-1表示最终帧
        异常
        IllegalArgumentException - 如果所请求的循环点不能被设置,通常是因为一个或两个都位于介质的持续时间之外,或者由于终点位于起始点之前
      • loop

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

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

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

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

        参数
        count - 播放应该从循环的结束位置循环回循环的起始位置的次数,或 LOOP_CONTINUOUSLY以指示循环应该继续直到中断