public interface TargetDataLine extends DataLine
DataLine
从音频数据可以被读取。最常见的例子是一个数据线,它从音频捕获设备获取数据。(该设备是一个混频器,写入目标数据线。实现)
请注意,这个接口的命名约定反映了该行和它的混合机之间的关系。从应用程序的角度来看,目标数据线可以作为音频数据的源。
目标数据线可以通过调用的方法Mixer
与适当的getLine
对象从混频器得到。DataLine.Info
的TargetDataLine
接口提供了一种方法从目标数据线的缓冲区读取捕获的数据。应用程序的音频记录应该从目标数据线快到足以防止缓冲区溢出读取数据,这可能会导致在捕获的数据,被视为点击的不连续性。应用程序可以使用在DataLine
接口定义的数据量,目前排队在数据线的缓冲区
方法。如果缓冲区溢出,则最古老的队列数据将被丢弃,并被新的数据所取代。available
Mixer
,
DataLine
,
SourceDataLine
DataLine.Info
Modifier and Type | Method and Description |
---|---|
void |
open(AudioFormat format)
打开与指定的格式的行,导致该行获得任何所需的系统资源,并成为可操作的。
|
void |
open(AudioFormat format, int bufferSize)
打开与指定的格式和请求的缓冲区大小的行,导致该行获得任何所需的系统资源并成为可操作的。
|
int |
read(byte[] b, int off, int len)
从数据线的输入缓冲区读取音频数据。
|
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
void open(AudioFormat format, int bufferSize) throws LineUnavailableException
缓冲区大小是以字节为单位指定的,但必须表示样本帧的整数数目。调用该方法与请求的缓冲区大小,不符合这一要求可能导致时。打开的行的实际缓冲区大小可能与所请求的缓冲区大小不同。实际设定值可由
随后打电话查询DataLine.getBufferSize()
如果操作成功,该行标记为打开,和一个
事件被派遣到线的听众。OPEN
调用该方法对线已经打开,是非法的,可能会导致IllegalStateException
。
有些线,一旦关闭,不能重新打开。试图重开这一行总是导致LineUnavailableException
。
format
-所需的音频格式
bufferSize
-所需的缓冲区的大小,以字节为单位。
LineUnavailableException
-如果线路不因资源限制打开
IllegalArgumentException
如果缓冲区的大小并不代表样本帧的整数,或者
format
不完全指定的或无效的
IllegalStateException
如果线已经打开
SecurityException
-如果线路不能由于安全限制打开
open(AudioFormat)
,
Line.open()
,
Line.close()
,
Line.isOpen()
,
LineEvent
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
int read(byte[] b, int off, int len)
字节可以读取无阻塞数可以确定使用的DataLine
接口
方法。(虽然保证了这个字节数可以无阻塞的读取,但没有保证尝试读取额外的数据将被阻止。)available
要读取的字节数必须是整数样本框,如:
[ bytes read ] % [frame size in bytes ] == 0
b
-一个字节数组将包含请求的输入数据时,此方法返回
off
-从数组开始的偏移量,以字节为单位
len
-请求的字节数读
IllegalArgumentException
如果请求的字节数不代表样本帧的整数。如果
len
是负的。
ArrayIndexOutOfBoundsException
-如果
off
是负的,或
off+len
大于数组的长度
b
。
SourceDataLine.write(byte[], int, int)
,
DataLine.available()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.