-
- All Superinterfaces:
-
AutoCloseable
,DataLine
,Line
public interface Clip extends DataLine
Clip
接口代表一种特殊类型的数据线,其音频数据可以在回放之前加载,而不是实时流式传输。由于数据已预先加载且具有已知长度,因此您可以将剪辑设置为在其音频数据中的任何位置开始播放。 您还可以创建一个循环,以便在播放剪辑时它将重复循环。 使用起始和结束样本帧指定循环,以及循环应播放的次数。
剪辑可以从支持这种类型的线的
Mixer
获得。 数据在打开时加载到剪辑中。可以使用
start
和stop
方法开始和停止播放音频剪辑。 这些方法不会重置媒体位置;start
导致播放从上次停止播放的位置继续。 要从剪辑的音频数据的开头重新开始播放,只需按照stop
的调用setFramePosition(0)
,将媒体倒回到剪辑的开头。- 从以下版本开始:
- 1.3
-
-
嵌套类汇总
-
Nested classes/interfaces declared in interface javax.sound.sampled.DataLine
DataLine.Info
-
-
字段汇总
字段 变量和类型 字段 描述 static int
LOOP_CONTINUOUSLY
一个值,指示循环应该无限期地继续而不是在特定数量的循环之后完成。
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 int
getFrameLength()
获取样本帧中的媒体长度。long
getMicrosecondLength()
获得媒体持续时间(以微秒为单位)。void
loop(int count)
从当前位置开始循环播放。void
open(AudioFormat format, byte[] data, int offset, int bufferSize)
打开剪辑,这意味着它应该获取任何所需的系统资源并开始运行。void
open(AudioInputStream stream)
使用提供的音频输入流中的格式和音频数据打开剪辑。void
setFramePosition(int frames)
设置样本帧中的媒体位置。void
setLoopPoints(int start, int end)
设置将在循环中播放的第一个和最后一个样本帧。void
setMicrosecondPosition(long microseconds)
以微秒为单位设置媒体位置。-
声明方法的接口 javax.sound.sampled.DataLine
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
-
声明方法的接口 javax.sound.sampled.Line
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
-
-
-
-
方法详细信息
-
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
表示循环应继续直到中断
-
-