public interface SourceDataLine extends DataLine
请注意,此接口的命名约定反映了线路与其调音台之间的关系。 从应用的角度来看,源数据线可以用作音频数据的目标。
 可以通过调用具有适当的DataLine.InfoMixer的getLine
 SourceDataLine接口提供了一种将音频数据写入数据线的缓冲区的方法。 播放或混合音频的应用程序应该将数据快速写入源数据行,以使缓冲区不会下溢(排空),这可能会导致音频中的不连续性被视为点击。 应用程序可以使用availableDataLine界面来确定当前在数据线的缓冲器排队的数据的量。 可以写入缓冲区而不阻塞的数据量是缓冲区大小与排队数据量之间的差异。 如果由于下溢导致音频输出的传送停止,则会生成STOPSTART
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, stopaddLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListenervoid open(AudioFormat format, int bufferSize) throws LineUnavailableException
 缓冲区大小以字节指定,但必须表示整数个采样帧。 以不满足此要求的请求缓冲区大小调用此方法可能会导致IllegalArgumentException异常。 开放行的实际缓冲区大小可能与请求的缓冲区大小不同。 实际设置的值可以随后调用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 可以不受阻塞被写的字节数可使用被确定availableDataLine接口。 (虽然保证这个字节数可以写入而不阻塞,但不能保证写入附加数据的尝试将被阻止。) 
 要写入的字节数必须表示采样帧的整数,使得: 
[ bytes written ] % [frame size in bytes ] == 0 
           IllegalArgumentException 。 
          b - 包含要写入数据线的数据的字节数组 
           len - 数组中有效数据的长度(以字节为单位)(换言之,要写入的请求数据量,以字节为单位) 
           off - 数组 
            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.