public interface SourceDataLine extends DataLine
请注意,这个接口的命名约定反映了该行和它的混合机之间的关系。从应用程序的角度来看,源数据线可以作为音频数据的目标。
源数据线可以通过调用的方法Mixer
与适当的getLine
对象从混频器得到。DataLine.Info
的SourceDataLine
接口提供了一种写作的音频数据到数据线的缓冲区。应用程序播放或混合音频应该写数据到足够快的源数据线保持缓冲区下溢(排空),这可能会导致被视为点击音频的不连续性。应用程序可以使用在DataLine
接口定义的数据量,目前排队在数据线的缓冲区
方法。可以写入到缓冲区中的数据量,而不阻塞的缓冲区大小和队列数据的量之间的差异。如果音频输出的传递而停止下溢,产生一个available
事件。一个STOP
事件时产生的音频输出简历。START
Mixer
,
DataLine
,
TargetDataLine
DataLine.Info
Modifier and Type | Method and Description |
---|---|
void |
open(AudioFormat format)
打开与指定的格式的行,导致该行获得任何所需的系统资源,并成为可操作的。
|
void |
open(AudioFormat format, int bufferSize)
打开指定的格式和建议的缓冲区大小的行,导致该行获得任何所需的系统资源并成为可操作的。
|
int |
write(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 write(byte[] b, int off, int len)
available
),该方法在数据块请求的数量已被写入。即使所请求的数据量大于数据线的缓冲区大小,也适用于此。但是,如果数据线被关闭,停止或刷新之前所请求的数量已被写入,该方法不再块,但返回到目前为止写入的字节数。
字节写,可以无阻塞的数量可以确定使用的DataLine
接口
方法。(虽然保证了这个字节的数量可以写没有阻塞,也没有保证,尝试写额外的数据将阻止。)available
写的字节数必须是整数样本框,如:
[ bytes written ] % [frame size in bytes ] == 0
IllegalArgumentException
。
b
-包含数据被写入到数据线的字节数组
len
的长度,以字节数组中的数据有效(换句话说,数据写入请求的数量,以字节为单位)
off
-从数组开始的偏移量,以字节为单位
IllegalArgumentException
如果请求的字节数不代表样本帧的整数,或者
len
是负的
ArrayIndexOutOfBoundsException
-如果
off
是负的,或
off+len
大于数组的长度
b
。
TargetDataLine.read(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.