所有类


javax.sound.sampled
接口 Clip

所有超级接口:
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 - 如果无法设置请求的循环点,这通常是因为一个或两个请求的点超出介质持续时间,或因为结束点在起点之前

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部