javax.sound.sampled

接口
异常
所有已知子接口:
Clip, DataLine, Mixer, Port, SourceDataLine, TargetDataLine

public interface Line

Line 接口表示单声道或多声道音频供给。line 是数字音频“管线”(如混频器、输入或输出端口,或往返于混频器的数据路径)的元素。

line 可以有各种控件,如 gain、pan 和 reverb。这些控件本身是扩展基本 Control 类的那些类的实例。Line 接口提供两个获得 line 控件的存取方法:getControls 返回整个集合,getControl 返回指定类型的单个控件。

行在不同的时间以各种状态存在。当行打开时,它保留本身的系统资源;关闭时,这些资源就会为其他对象或应用程序释放。isOpen() 方法让您发现行是打开的还是关闭的。但是打开的行不需要处理数据。此类处理通常由 SourceDataLine.writeTargetDataLine.read 之类的子接口方法初始化。

可以注册一个对象,以便每当行状态更改时接收通知。该对象必须实现 LineListener 接口,此接口由单个方法 update 组成。此方法将在行打开和关闭时调用(如果该行在开始和停止时是一个 DataLine)。

可以注册一个对象来侦听多个行。用其 update 方法接收的事件将指定创建该事件的行、事件的类型(OPENCLOSESTARTSTOP),以及发生事件时该行处理的样本帧的数量。

如果行是共享的音频资源时由未授权的代码调用,则某些行操作(如 open 和 close)可以生成安全性异常。

从以下版本开始:
1.3
另请参见:
LineEvent

嵌套类摘要
static class Line.Info
          Line.Info 对象包含关于行的信息。
 
方法摘要
 void addLineListener(LineListener listener)
          将侦听器添加到此行。
 void close()
          关闭行,指示可以释放的该行使用的所有系统资源。
 Control getControl(Control.Type control)
          获得指定类型的控件,如果有的话。
 Control[] getControls()
          获得与此行相关的控件集合。
 Line.Info getLineInfo()
          获得描述此行的 Line.Info 对象。
 boolean isControlSupported(Control.Type control)
          指示该行是否支持特定类型的控件。
 boolean isOpen()
          指示行是否已打开,行已打开则意味着它已保留系统资源并是可操作的,尽管它当前可能没有播放或捕获声音。
 void open()
          打开行,指示它应该获得所有所需系统资源并变得可操作。
 void removeLineListener(LineListener listener)
          从此行的侦听器列表中移除指定侦听器。
 

方法详细信息

getLineInfo

Line.Info getLineInfo()
获得描述此行的 Line.Info 对象。

返回:
该行的描述。

open

void open()
          throws LineUnavailableException
打开行,指示它应该获得所有所需系统资源并变得可操作。如果此操作获得成功,则将行标记为 open,且向行的侦听器指派一个 OPEN 事件。

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

某些类型的行具有可能影响资源分配的可配置属性。例如,必须使用特定格式和缓冲区大小打开 DataLine。此类行应该提供配置这些属性的机制,如允许应用程序指定所需设置的其他一个或多个 open 方法。

此方法不使用任何参数,并使用当前设置打开行。对于 SourceDataLineTargetDataLine 对象,这意味着使用默认设置打开该行。但对于 Clip,缓冲区大小是在加载数据时确定的。由于此方法不允许应用程序指定任何要加载的数据,因此会抛出 IllegalArgumentException。所以用户应该改用 Clip 接口中提供的某一 open 方法将数据加载到 Clip 中。

对于 DataLine,如果用于检索行的 DataLine.Info 对象至少指定一个完全限定的音频格式,则将使用最后一个格式作为默认格式。

抛出:
IllegalArgumentException - 如果在 Clip 接口上调用此方法。
LineUnavailableException - 如果由于资源限制无法打开该行。
SecurityException - 如果由于安全限制无法打开该行。
另请参见:
close(), isOpen(), LineEvent, DataLine, Clip.open(AudioFormat, byte[], int, int), Clip.open(AudioInputStream)

close

void close()
关闭行,指示可以释放的该行使用的所有系统资源。如果此操作成功,则将行标记为 closed,并给行的侦听器指派一个 CLOSE 事件。

抛出:
SecurityException - 如果由于安全限制无法关闭该行。
另请参见:
open(), isOpen(), LineEvent

isOpen

boolean isOpen()
指示行是否已打开,行已打开则意味着它已保留系统资源并是可操作的,尽管它当前可能没有播放或捕获声音。

返回:
如果行已打开,则返回 true;否则返回 false
另请参见:
open(), close()

getControls

Control[] getControls()
获得与此行相关的控件集合。有些控件可能只在行打开时可用。如果没有控件,则此方法则返回一个长度为 0 的数组

返回:
控件数组
另请参见:
getControl(javax.sound.sampled.Control.Type)

isControlSupported

boolean isControlSupported(Control.Type control)
指示该行是否支持特定类型的控件。有些控件可能只在行打开时可用。

参数:
control - 查询其是否受支持的控件类型
返回:
如果至少有一个指定类型的控件受支持,则返回 true;否则返回 false

getControl

Control getControl(Control.Type control)
获得指定类型的控件,如果有的话。有些控件可能只在行打开时可用。

参数:
control - 所请求的控件类型
返回:
指定类型的控件
抛出:
IllegalArgumentException - 如果指定类型的控件不受支持
另请参见:
getControls(), isControlSupported(Control.Type control)

addLineListener

void addLineListener(LineListener listener)
将侦听器添加到此行。每当行的状态发生更改,就要使用描述更改的 LineEvent 对象调用侦听器的 update() 方法。

参数:
listener - 将作为侦听器添加到此行的对象
另请参见:
removeLineListener(javax.sound.sampled.LineListener), LineListener.update(javax.sound.sampled.LineEvent), LineEvent

removeLineListener

void removeLineListener(LineListener listener)
从此行的侦听器列表中移除指定侦听器。

参数:
listener - 要移除的侦听器
另请参见:
addLineListener(javax.sound.sampled.LineListener)