模块  java.desktop
软件包  javax.sound.sampled

Interface Clip

  • All Superinterfaces:
    AutoCloseableDataLineLine

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

    由于数据已预先加载且具有已知长度,因此您可以将剪辑设置为在其音频数据中的任何位置开始播放。 您还可以创建一个循环,以便在播放剪辑时它将重复循环。 使用起始和结束样本帧指定循环,以及循环应播放的次数。

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

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

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

      • LOOP_CONTINUOUSLY

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

      • 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值为0表示应停止任何当前循环,并且播放应继续到剪辑的结尾。 在循环操作期间使用任何其他值调用此方法时,行为未定义。

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

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