-
- All Superinterfaces:
-
AutoCloseable
,DataLine
,Line
public interface TargetDataLine extends DataLine
目标数据线是DataLine
的类型,可以从中读取音频数据。 最常见的示例是从音频捕获设备获取其数据的数据线。 (该设备实现为写入目标数据线的混合器。)请注意,此接口的命名约定反映了该行与其混音器之间的关系。 从应用程序的角度来看,目标数据线可以充当音频数据的源。
目标数据线可从混合器通过调用来获得
getLine
的方法Mixer
用适当DataLine.Info
对象。TargetDataLine
接口提供了一种从目标数据线缓冲区读取捕获数据的方法。 记录音频的应用程序应该足够快地从目标数据线读取数据,以防止缓冲区溢出,这可能导致捕获的数据中的不连续性被视为点击。 应用程序可以使用DataLine
接口中定义的available
方法来确定当前在数据行缓冲区中排队的数据量。 如果缓冲区溢出,则丢弃最旧的排队数据并替换为新数据。- 从以下版本开始:
- 1.3
- 另请参见:
-
Mixer
,DataLine
,SourceDataLine
-
-
嵌套类汇总
-
Nested classes/interfaces declared in interface 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
事件分派给该行的侦听器。在已经打开的行上调用此方法是非法的,可能会导致
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
事件分派给该行的侦听器。在已经打开的行上调用此方法是非法的,可能会导致
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()
-
-