public interface DataLine
DataLine
将与介质相关的功能添加到其超接口
。此功能包括一些传输控制方法,这些方法可以启动、停止、消耗和刷新通过数据行传入的音频数据。数据行还可以报告介质的当前位置、音量和音频格式。数据行通过使用子接口 Line
或 SourceDataLine
用于音频输出,这些子接口允许应用程序写入数据。类似地,音频输入由子接口 Clip
处理,该接口允许读取数据。 TargetDataLine
数据行有一个内部缓冲区,传入或传出数据在该缓冲区被加入队列。此内部缓冲区变空之前(通常因为已处理所有列队的数据),
方法发生阻塞。drain()
方法将放弃内部缓冲区中的所有可用的已列队数据。 flush()
只要数据行开始还是停止数据的活动现象或数据的捕获,就会产生
和 START
事件。这些事件可能在响应特定请求时生成,也可能是不太直接的状态更改的结果。例如,如果对非活动数据行调用 STOP
,且数据可用于捕获或回放,则将在实际开始数据回放或捕获时生成 start()
START
事件。或者,如果因为活动数据行的数据流受到限制而在数据呈现中发生间隙,则生成 STOP
事件。
混频器常常支持多条数据行的同步控制。可以通过混频器接口的
方法来建立同步。关于更完整的描述,请参见 synchronize
接口的描述。 Mixer
LineEvent
嵌套类摘要 | |
---|---|
static class |
DataLine.Info 除了继承自其超类的类信息之外, DataLine.Info 还提供特定于数据行的其他信息。 |
方法摘要 | |
---|---|
int |
available() 获得当前可用于数据行内部缓冲区中处理的应用程序的数据字节数。 |
void |
drain() 通过在清空数据行的内部缓冲区之前继续数据 I/O,排空数据行中的列队数据。 |
void |
flush() 刷新数据行中已列队的数据。 |
int |
getBufferSize() 获得将适合数据行的内部缓冲区的最大数据字节数。 |
AudioFormat |
getFormat() 获得数据行的音频数据的当前格式(编码、样本频率、信道数,等等)。 |
int |
getFramePosition() 获得音频数据中的当前位置(以样本帧为单位)。 |
float |
getLevel() 获得行的当前音量级别。 |
long |
getLongFramePosition() 获得音频数据中的当前位置(以样本帧为单位)。 |
long |
getMicrosecondPosition() 获得音频数据中的当前位置(以微秒为单位)。 |
boolean |
isActive() 指示该行是否正在进行活动 I/O(如回放或捕获)。 |
boolean |
isRunning() 指示该行是否正在运行。 |
void |
start() 允许某一数据行执行数据 I/O。 |
void |
stop() 停止行。 |
从接口 javax.sound.sampled.Line 继承的方法 |
---|
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener |
方法详细信息 |
---|
void drain()
drain()
,则在该行正在运行和数据队列变空之前,此方法将发生阻塞。如果通过一个线程调用
drain()
,另一个线程继续填充数据队列,则该操作没有完成。此方法总是在关闭数据行时返回。
flush()
void flush()
void start()
START
事件。
stop()
,
isRunning()
,
LineEvent
void stop()
flush
方法丢弃保留的数据。当音频捕获或回放停止时,生成
STOP
事件。
start()
,
isRunning()
,
flush()
,
LineEvent
boolean isRunning()
false
。打开的行将在响应调用
start
方法而呈现第一个数据时开始运行,并可持续到响应调用
stop
或因为回放结束而表现为停止状态时为止。
boolean isActive()
START
事件。类似地,当活动行变得不活动时,它将发送
STOP
事件。
true
;否则返回
false
Line.isOpen()
,
Line.addLineListener(javax.sound.sampled.LineListener)
,
Line.removeLineListener(javax.sound.sampled.LineListener)
,
LineEvent
,
LineListener
AudioFormat getFormat()
如果行未打开且从来没有打开过,则返回默认格式。默认格式是一个特定音频格式实现,如果 DataLine.Info
对象(用于检索此 DataLine
)至少指定一个完全限定的音频格式,则将最后一个格式用作默认格式。打开具有特定音频格式(如 SourceDataLine.open(AudioFormat)
)的行将重写默认格式。
AudioFormat
int getBufferSize()
int available()
注意,这里使用的单位是字节,但将始终对应于音频数据的样本帧数(整数)。
保证应用程序对从 available()
返回的字节数进行的读取或写入操作不受阻塞;不过,不保证试图读取或写入更多数据将发生阻塞。
int getFramePosition()
getLongFramePosition
。
getLongFramePosition()
long getLongFramePosition()
long getMicrosecondPosition()
float getLevel()
AudioSystem.NOT_SPECIFIED