Module  java.desktop
软件包  javax.sound.sampled

Interface TargetDataLine

  • All Superinterfaces:
    AutoCloseableDataLineLine


    public interface TargetDataLine
    extends DataLine
    目标数据线是可以读取音频数据的类型DataLine 最常见的示例是从音频捕获设备获取其数据的数据线。 (该设备实现为写入目标数据线的混音器。)

    请注意,此接口的命名约定反映了线路与其调音台之间的关系。 从应用的角度来看,目标数据线可以用作音频数据的源。

    目标数据线可从混合器通过调用能够得到getLine的方法Mixer与适当DataLine.Info对象。

    TargetDataLine接口提供了一种从目标数据线的缓冲区读取捕获的数据的方法。 记录音频的应用程序应该从目标数据行中快速读取数据,以防止缓冲区溢出,这可能导致被捕获的数据被视为点击的不连续性。 应用程序可以使用DataLine接口中定义的available方法来确定当前在数据行缓冲区中排队的数据量。 如果缓冲区溢出,则丢弃最旧的排队数据并替换为新数据。

    从以下版本开始:
    1.3
    另请参见:
    MixerDataLineSourceDataLine
    • 方法详细信息

      • open

        void 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
      • 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
        另请参见:
        SourceDataLine.write(byte[], int, int)DataLine.available()