- 所有父级接口:
AutoCloseable,DataLine,Line
请注意,此接口的命名约定反映了线路与其混音器之间的关系。从应用程序的角度来看,源数据线可以充当音频数据的目标。
通过使用适当的 DataLine.Info 对象调用 Mixer 的 getLine 方法,可以从混音器中获取源数据线。
SourceDataLine 接口提供了一种将音频数据写入数据线缓冲区的方法。播放或混合音频的应用程序应以足够快的速度将数据写入源数据线,以防止缓冲区下溢(清空),这可能会导致音频不连续,并被视为咔哒声。应用程序可以使用 DataLine 接口中定义的 available 方法来确定当前在数据行缓冲区中排队的数据量。可以在不阻塞的情况下写入缓冲区的数据量是缓冲区大小与排队数据量之间的差值。如果音频输出的传送由于下溢而停止,则会生成 STOP 事件。音频输出恢复时会生成 START 事件。
- 自从:
- 1.3
- 参见:
-
内部类总结
在接口 javax.sound.sampled.DataLine 中声明的嵌套类/接口
DataLine.Info -
方法总结
修饰符和类型方法描述voidopen(AudioFormat format) 打开具有指定格式的行,使该行获取任何所需的系统资源并开始运行。voidopen(AudioFormat format, int bufferSize) 打开具有指定格式和建议缓冲区大小的行,使该行获取任何所需的系统资源并开始运行。intwrite(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- 如果由于安全限制而无法打开线路- 参见:
-
write
int write(byte[] b, int off, int len) 通过此源数据线将音频数据写入混音器。从指定数组中读取请求的字节数的数据,从数组中的给定偏移量开始,然后写入数据行的缓冲区。如果调用者尝试写入比当前可以写入的数据更多的数据(请参阅available),则此方法将阻塞,直到写入请求的数据量为止。即使请求写入的数据量大于数据行的缓冲区大小,这也适用。但是,如果在写入请求的数量之前关闭、停止或刷新数据行,则该方法不再阻塞,而是返回到目前为止写入的字节数。可以使用
DataLine接口的available方法确定无阻塞可写入的字节数。 (虽然保证可以无阻塞地写入此字节数,但不能保证尝试写入额外数据时会阻塞。)要写入的字节数必须代表整数个样本帧,这样:
[ bytes written ] % [frame size in bytes ] == 0返回值将始终满足此要求。写入表示非整数样本帧的字节数的请求无法满足,可能会导致
IllegalArgumentException。- 参数:
b- 包含要写入数据线的数据的字节数组off- 从数组开始的偏移量,以字节为单位len- 数组中有效数据的长度,以字节为单位(换句话说,请求写入的数据量,以字节为单位)- 返回:
- 实际写入的字节数
- 抛出:
IllegalArgumentException- 如果请求的字节数不代表样本帧的整数,或者如果len为负ArrayIndexOutOfBoundsException- 如果off为负,或者off+len大于数组的长度b- 参见:
-