- 所有父级接口:
AutoCloseable
,DataLine
,Line
DataLine
类型,可以从中读取音频数据。最常见的示例是从音频捕获设备获取数据的数据线。 (该设备实现为写入目标数据线的混音器。)
请注意,此接口的命名约定反映了线路与其混音器之间的关系。从应用程序的角度来看,目标数据线可以充当音频数据的来源。
通过使用适当的 DataLine.Info
对象调用 Mixer
的 getLine
方法,可以从混音器中获取目标数据线。
TargetDataLine
接口提供了一种从目标数据线的缓冲区读取捕获数据的方法。录制音频的应用程序应以足够快的速度从目标数据线读取数据,以防止缓冲区溢出,这可能会导致捕获的数据不连续,这被视为点击。应用程序可以使用 DataLine
接口中定义的 available
方法来确定当前在数据行缓冲区中排队的数据量。如果缓冲区确实溢出,最旧的排队数据将被丢弃并由新数据替换。
- 自从:
- 1.3
- 参见:
-
内部类总结
在接口 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
打开具有指定格式和请求的缓冲区大小的行,使该行获取任何所需的系统资源并开始运行。缓冲区大小以字节为单位指定,但必须代表整数个样本帧。使用不满足此要求的请求缓冲区大小调用此方法可能会导致
IllegalArgumentException
。开放行的实际缓冲区大小可能与请求的缓冲区大小不同。实际设置的值可以通过随后调用DataLine.getBufferSize()
来查询如果此操作成功,该线路将被标记为打开,并且
OPEN
事件将分派给该线路的监听器。在已经打开的行上调用此方法是非法的,可能会导致
IllegalStateException
。有些线路一旦关闭,就无法重新开通。尝试重新打开此类行将始终导致
LineUnavailableException
。- 参数:
format
- 所需的音频格式bufferSize
- 所需的缓冲区大小,以字节为单位- 抛出:
LineUnavailableException
- 如果由于资源限制而无法打开该行IllegalArgumentException
- 如果缓冲区大小不代表样本帧的整数,或者如果format
未完全指定或无效IllegalStateException
- 如果线路已经打开SecurityException
- 如果由于安全限制而无法打开线路- 参见:
-
open
打开具有指定格式的行,使该行获取任何所需的系统资源并开始运行。该实现选择缓冲区大小,以字节为单位测量但包含整数个样本帧。系统选择的缓冲区大小可以通过随后调用
DataLine.getBufferSize()
来查询如果此操作成功,该线路将被标记为打开,并且
OPEN
事件将分派给该线路的监听器。在已经打开的行上调用此方法是非法的,可能会导致
IllegalStateException
。有些线路一旦关闭,就无法重新开通。尝试重新打开此类行将始终导致
LineUnavailableException
。- 参数:
format
- 所需的音频格式- 抛出:
LineUnavailableException
- 如果由于资源限制而无法打开该行IllegalArgumentException
- 如果format
未完全指定或无效IllegalStateException
- 如果线路已经打开SecurityException
- 如果由于安全限制而无法打开线路- 参见:
-
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
- 参见:
-