public interface TargetDataLine extends DataLine
DataLine读取音频数据的类型DataLine 。
最常见的示例是从音频捕获设备获取其数据的数据线。
(该设备实现为写入目标数据线的混音器。)
请注意,此接口的命名约定反映了线路与其调音台之间的关系。 从应用的角度来看,目标数据线可以用作音频数据的源。
目标数据线可以通过调用具有适当的对象的DataLine.InfoMixer的方法从混合器获得。 getLine
TargetDataLine接口提供了从目标数据线缓冲区读取捕获数据的方法。记录音频的应用程序应该从目标数据行读取数据足够快,以防止缓冲区溢出,这可能导致被捕获的数据的不连续性作为点击。 应用程序可以使用中所定义的方法availableDataLine界面来确定当前在数据线的缓冲器排队的数据的量。 如果缓冲区溢出,则丢弃最旧的排队数据并替换为新数据。
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, stopaddLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListenervoid 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
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)
可以不受阻塞读取的字节数可以使用被确定所述的方法availableDataLine接口。 (虽然保证这个字节数可以无阻塞地读取,但不能保证读取附加数据的尝试将被阻止。)
要读取的字节数必须表示整数个采样帧,使得:
[ bytes read ] % [frame size in bytes ] == 0
b - 当该方法返回时将包含所请求的输入数据的字节数组
off - 数组
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.