javax.sound.sampled

接口
异常
所有超级接口:
DataLine, Line

public interface Clip
     
extends DataLine

Clip 接口表示特殊种类的数据行,该数据行的音频数据可以在回放前加载,而不是实时流出。

因为数据是提前加载的且具有已知长度,所以可以设置一个剪辑,以便在其音频数据中的任何位置开始播放。也可以创建一个循环,以便在播放剪辑时该循环重复播放。使用起始和结尾示例帧以及应该播放循环的次数指定循环。

剪辑可以从支持此类型的行的 Mixer 中获得。打开剪辑时,将数据加载到剪辑中。

音频剪辑的回放可以使用 startstop 方法开始和终止。这些方法不重新设置介质的位置;start 导致从回放最后停止的位置继续回放。要从剪辑的音频数据的开头重新启动回放,只需通过 setFramePosition(0) 调用 stop 即可,该方法可将介质重绕到剪辑的开头。

从以下版本开始:
1.3

嵌套类摘要
 
从接口 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
 

字段详细信息

LOOP_CONTINUOUSLY

static final int LOOP_CONTINUOUSLY
指示循环应该无限期继续而不是在指定数量的循环后完成的值。

另请参见:
loop(int), 常量字段值
方法详细信息

open

void open(AudioFormat format,
          byte[] data,
          int offset,
          int bufferSize)
          throws LineUnavailableException
打开剪辑,意味着它应该获得所有所需的系统资源并变得可操作。使用所指示的格式和音频数据打开剪辑。如果此操作成功,则将行标记为 open 且向行的侦听器指派一个 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 并向行的侦听器指派一个 OPEN 事件。

在已经打开的行上调用此方法是非法的,可能导致 IllegalStateException。

注意,有些行一旦关闭,无法重新打开。试图重新打开这样的行将始终导致 LineUnavailableException

参数:
stream - 从中将音频数据读入剪辑的音频输入流
抛出:
LineUnavailableException - 如果因资源限制而无法打开行
IOException - 如果在读取流的过程中发生 I/O 异常
IllegalArgumentException - 如果未完全指定流的音频格式或其无效
IllegalStateException - 如果已经打开行
SecurityException - if 如果因安全限制而无法打开行
另请参见:
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)
设置介质位置(以示例帧为单位)。该位置从零开始;第一帧的帧数为零。剪辑下一次开始播放时,它将通过播放此位置的帧开始。

要获得以示例帧为单位的当前位置,使用 DataLinegetFramePosition 方法即可。

参数:
frames - 所需新介质的位置(以示例帧表示)

setMicrosecondPosition

void setMicrosecondPosition(long microseconds)
设置介质位置(以微秒为单位)。剪辑下一次开始播放时,它将在此位置开始。不保证精度级别。例如,实现可能根据当前帧的位置和音频示例帧速率计算微秒位置。应将以微秒为单位的精度限制为每示例帧的微秒数。

要获得以微秒为单位的当前位置,使用 DataLinegetMicrosecondPosition 方法即可。

参数:
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 指示循环在中断前应该一起持续