public interface Clip extends DataLine
Clip
接口表示一种特殊类型的数据线,其音频数据可以在播放之前加载,而不是实时流式传输。
因为数据是预加载的,并且具有已知的长度,所以您可以设置一个剪辑,以便在其音频数据中的任何位置开始播放。 您也可以创建一个循环,这样当剪辑被播放时,它将重复循环。 循环用起始和结束采样帧指定,循环应该播放的次数。
剪辑可以从支持这种类型的行的
获得。 数据在打开时被加载到剪辑中。 Mixer
音频剪辑的播放可以使用start
和stop
方法启动和停止。 这些方法不会重置媒体位置; start
使播放从最后停止播放的位置继续播放。 要重新从剪辑的音频数据的开始播放时,只需按照的调用
与setFramePosition(0),其中倒带媒体剪辑的开始。 stop
DataLine.Info
Modifier and Type | Field and Description |
---|---|
static int |
LOOP_CONTINUOUSLY
一个值,指示循环应该在无限期之后继续,而不是在特定循环数之后完成。
|
Modifier and Type | Method and Description |
---|---|
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)
以微秒设置媒体位置。
|
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
static final int LOOP_CONTINUOUSLY
loop(int)
,
Constant Field Values
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
void open(AudioInputStream stream) throws LineUnavailableException, IOException
OPEN
事件将调度到该行的监听器。
在已经打开的行上调用此方法是非法的,可能会导致IllegalStateException异常。
请注意,一旦关闭,一些行不能重新打开。 尝试重新打开此行将始终导致
。 LineUnavailableException
stream
- 将音频数据读入剪辑的音频输入流
LineUnavailableException
- 如果由于资源限制,该行无法打开
IOException
- 如果在读取数据流期间发生I / O异常
IllegalArgumentException
- 如果流的音频格式未完全指定或无效
IllegalStateException
- 如果该行已经打开
SecurityException
- 如果由于安全限制,该行无法打开
Line.close()
, Line.isOpen()
, LineListener
int getFrameLength()
AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
long getMicrosecondLength()
AudioSystem.NOT_SPECIFIED
。
AudioSystem.NOT_SPECIFIED
void setFramePosition(int frames)
frames
- 所需的新媒体位置,以示例框架表示
void setMicrosecondPosition(long microseconds)
为了获得在微秒的当前位置,使用
的方法getMicrosecondPosition
DataLine
。
microseconds
- 所需的新媒体位置,以微秒表示
void setLoopPoints(int start, int end)
start
- 循环的起始位置,在采样帧(从零开始)
end
- 循环的结束位置,以采样帧(从零为基础)或-1表示最终帧
IllegalArgumentException
- 如果所请求的循环点不能被设置,通常是因为一个或两个都位于媒体的持续时间之外,或者因为终点在起始点之前
void loop(int count)
count
次,最后继续播放到剪辑的末尾。
如果调用此方法时的当前位置大于循环结束点,则回放将简单地继续到剪辑的结尾而不进行循环。
count
值为0表示任何当前循环都应该停止,播放应该继续到剪辑的末尾。 当在循环操作期间使用任何其他值调用此方法时,行为是未定义的。
如果在循环过程中播放停止,则当前循环状态被清除; 后续循环和启动请求的行为不受中断循环操作的影响。
count
- 播放应该从循环的结束位置循环回循环的起始位置的次数,或
LOOP_CONTINUOUSLY
,以指示循环应该继续直到中断