JavaTM Platform
Standard Ed. 6

javax.sound.sampled
接口 TargetDataLine

所有超级接口:
DataLine, Line

public interface TargetDataLine
extends DataLine

目标数据行是可以从中读取音频数据的某种类型的 DataLine。最常见的示例是从音频捕获设备获取其数据的数据行。(该设备被实现为写入目标数据行的混频器。)

注意,此接口的命名约定反映了行及其混频器之间的关系。从应用程序的角度来看,目标数据行可以充当音频数据的源。

可以通过使用适当 DataLine.Info 对象调用 MixergetLine 方法从混频器获得目标数据行。

TargetDataLine 接口提供从目标数据行的缓冲区读取所捕获数据的方法。录制音频的应用程序应该以足够快的速度从该目标数据行读取数据,以防缓冲区溢出,溢出可能导致单击时所捕获数据中出现可感知的间断。应用程序可以使用 DataLine 接口中定义的 available 方法来确定数据行缓冲区中已列队的当前数据量。如果缓冲区发生溢出,则时间最长的列队数据被丢弃并由新的数据替换。

从以下版本开始:
1.3
另请参见:
Mixer, DataLine, SourceDataLine

嵌套类摘要
 
从接口 javax.sound.sampled.DataLine 继承的嵌套类/接口
DataLine.Info
 
方法摘要
 void open(AudioFormat format)
          打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
 void open(AudioFormat format, int bufferSize)
          打开具有指定格式和请求缓冲区大小的行,这样可使行获得所有所需的系统资源并变得可操作。
 int read(byte[] b, int off, int len)
          从数据行的输入缓冲区读取音频数据。
 
从接口 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
 

方法详细信息

open

void open(AudioFormat format,
          int bufferSize)
          throws LineUnavailableException
打开具有指定格式和请求缓冲区大小的行,这样可使行获得所有所需的系统资源并变得可操作。

以字节为单位指定缓冲区大小,但该大小必须表示整数形式的样本帧数。使用不满足此要求的所请求缓冲区大小调用此方法可能导致 IllegalArgumentException。已打开的行实际缓冲区大小可能与请求的缓冲区大小不同。实际设置的值可以通过后续调用 DataLine.getBufferSize() 来查询

如果此操作成功,则将该行标记为 open,并向行的侦听器指派一个 OPEN 事件。

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

有些行一旦关闭就不能重新打开。试图重新打开这样的行总是导致 LineUnavailableException

参数:
format - 所需的音频格式
bufferSize - 所需的缓冲区大小,以字节为单位。
抛出:
LineUnavailableException - 如果由于资源限制而无法打开行
IllegalArgumentException - 如果缓冲区大小不表示整数形式的样本帧数,或者 format 未完全指定或是无效的
IllegalStateException - 如果行已经打开
SecurityException - 如果由于安全限制而无法打开行
另请参见:
open(AudioFormat), Line.open(), Line.close(), Line.isOpen(), LineEvent

open

void open(AudioFormat format)
          throws LineUnavailableException
打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。

该实现选择缓冲区大小,此大小是以字节为单位来测量的,但它不包括整数形式的样本帧数。系统选择的缓冲区大小可以通过后续调用 DataLine.getBufferSize() 来查询

如果此操作成功,则将该行标记为 open,并向行的侦听器指派一个 OPEN 事件。

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

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

参数:
format - 所需音频格式
抛出:
LineUnavailableException - 如果由于资源限制而无法打开行
IllegalArgumentException - 如果 format 未完全指定或是无效的
IllegalStateException - 如果行已经打开
SecurityException - 如果由于安全限制而无法打开行
另请参见:
open(AudioFormat, int), Line.open(), Line.close(), Line.isOpen(), LineEvent

read

int read(byte[] b,
         int off,
         int len)
从数据行的输入缓冲区读取音频数据。将所请求的字节数读入指定数组,起点是该数组中的指定偏移量,以字节为单位。读取所完请求的数据量之前,此方法发生阻塞。不过,如果在读取完所请求的数据之前数据行已关闭、停止、排空或刷新,则该方法不再阻塞,但它会返回至今为止读取的字节数。

可以使用 DataLine 接口的 available 方法确认可不受阻塞地读取的字节数。(在保证可以不受阻塞地读取此字节数时,不保证试图读取其他数据不会发生阻塞。)

要读取的字节数必须表示整数形式的样本帧数,比如:

[ bytes read ] % [frame size in bytes ] == 0

返回值将始终满足此要求。读取表示非整数形式的样本帧数的字节数的请求无法完成,并且可能导致 IllegalArgumentException。

参数:
b - 将在此方法返回时包含所请求输入数据的字节数组
off - 数组开始处的偏移量,以字节为单位
len - 请求的读取字节数
返回:
实际读取的字节数
抛出:
IllegalArgumentException - 如果所请求的字节数不表示整数形式的样本帧数,或者 len 为负。
ArrayIndexOutOfBoundsException - 如果 off 为负,或者 off+len 大于数组 b 的长度。
另请参见:
SourceDataLine.write(byte[], int, int), DataLine.available()

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策