public interface Clip
Clip
接口表示特殊种类的数据行,该数据行的音频数据可以在回放前加载,而不是实时流出。
因为数据是提前加载的且具有已知长度,所以可以设置一个剪辑,以便在其音频数据中的任何位置开始播放。也可以创建一个循环,以便在播放剪辑时该循环重复播放。使用起始和结尾示例帧以及应该播放循环的次数指定循环。
剪辑可以从支持此类型的行的
中获得。打开剪辑时,将数据加载到剪辑中。 Mixer
音频剪辑的回放可以使用 start
和 stop
方法开始和终止。这些方法不重新设置介质的位置;start
导致从回放最后停止的位置继续回放。要从剪辑的音频数据的开头重新启动回放,只需通过 setFramePosition(0) 调用
即可,该方法可将介质重绕到剪辑的开头。 stop
嵌套类摘要 |
---|
从接口 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 |
字段详细信息 |
---|
static final int LOOP_CONTINUOUSLY
方法详细信息 |
---|
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
- if 如果因安全限制而无法打开行
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)
要获得以示例帧为单位的当前位置,使用 DataLine
的
方法即可。 getFramePosition
frames
- 所需新介质的位置(以示例帧表示)
void setMicrosecondPosition(long microseconds)
要获得以微秒为单位的当前位置,使用 DataLine
的
方法即可。 getMicrosecondPosition
microseconds
- 所需新介质的位置(以微秒表示)
void setLoopPoints(int start, int end)
start
- 以示例帧(从零开始)为单位的循环起始位置
end
- 以示例帧(从零开始)为单位的循环结束位置,或为 -1 表示最后一帧
IllegalArgumentException
- 如果无法设置请求的循环点,这通常是因为一个或两个请求的点超出介质持续时间,或因为结束点在起点之前
void loop(int count)
count
次,最后继续回放到剪辑的末尾。
如果在调用此方法时当前位置大于循环结束点,则回放只持续到剪辑的结尾,不用循环。
count
值为 0 指示任何当前循环都应该停止,并且回放应该持续到剪辑的末尾。在循环操作期间使用任何其他值调用此方法的行为都是不确定的。
如果在循环期间回放停止,则清除当前循环状态;后续循环和起始请求的行为将不受中断的循环操作的影响。
count
- 回放应该从循环的结束位置返回到循环的起始位置的次数,或者为
LOOP_CONTINUOUSLY
指示循环在中断前应该一起持续