|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.sound.sampled
接口 TargetDataLine
-
public interface TargetDataLine
- extends DataLine
目标数据行是可以从中读取音频数据的某种类型的
。最常见的示例是从音频捕获设备获取其数据的数据行。(该设备被实现为写入目标数据行的混频器。)DataLine
注意,此接口的命名约定反映了行及其混频器之间的关系。从应用程序的角度来看,目标数据行可以充当音频数据的源。
可以通过使用适当
对象调用 DataLine.Info
Mixer
的
方法从混频器获得目标数据行。getLine
该 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()
所有类
|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |