-
- All Superinterfaces:
-
AutoCloseable
,DataLine
,Line
public interface Clip extends DataLine
Clip
接口代表一种特殊类型的数据线,其音频数据可以在播放之前加载,而不是实时流式传输。因为数据是预加载的,并且具有已知的长度,所以您可以设置一个剪辑,以便在其音频数据中的任何位置开始播放。 您也可以创建一个循环,这样当剪辑被播放时,它将重复循环。 循环用起始和结束采样帧指定,循环应该播放的次数。
剪辑可以从支持这种类型的行的
Mixer
获得。 数据在打开时被加载到剪辑中。可以使用
start
和stop
方法来启动和停止播放音频剪辑。 这些方法不会重置媒体位置;start
使播放从上次停止播放的位置继续播放。 要从剪辑的音频数据的开始重新开始播放,只需按照stop
的调用方式(setFramePosition(0)
,将这些媒体回setFramePosition(0)
剪辑的开头。- 从以下版本开始:
- 1.3
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface javax.sound.sampled.DataLine
DataLine.Info
-
-
Field Summary
Fields Modifier and Type Field 描述 static int
LOOP_CONTINUOUSLY
一个值,指示循环应该在无限期之后继续,而不是在特定循环数之后完成。
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 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)
以微秒设置媒体位置。-
Methods inherited from interface javax.sound.sampled.DataLine
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
-
Methods inherited from interface javax.sound.sampled.Line
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
-
-
-
-
字段详细信息
-
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)
- 参数
-
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
,以指示循环应该继续直到中断
-
-