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

Interface DataLine

  • All Superinterfaces:
    AutoCloseableLine
    All Known Subinterfaces:
    ClipSourceDataLineTargetDataLine


    public interface DataLine
    extends Line
    DataLine将媒体相关功能添加到其超级Line 此功能包括启动,停止,排除和刷新通过线路的音频数据的传输控制方法。 数据线还可以报告媒体的当前位置,音量和音频格式。 数据线用于通过子接口SourceDataLineClip输出音频,这允许应用程序写入数据。 类似地,音频输入由允许读取数据的子接口TargetDataLine来处理。

    数据线具有内部缓冲器,其中输入或输出音频数据排队。 drain()方法阻塞,直到内部缓冲区变为空,通常是因为已处理所有排队的数据。 flush()方法从内部缓冲区中丢弃任何可用的排队数据。

    一旦数据线开始或停止数据的主动呈现或捕获,数据线就会产生STARTSTOP事件。 这些事件可以根据具体请求生成,也可以由于直接的状态更改而产生。 例如,如果在非活动数据线上调用start() ,并且数据可用于捕获或播放,则当数据播放或捕获实际开始时,将很快生成START事件。 或者,如果向活动数据线的数据流被收缩,使得在数据呈现中发生间隙,则产生一个STOP事件。

    混频器通常支持同步控制多条数据线。 可以通过Mixer接口的synchronize方法建立同步。 请参阅Mixer接口的描述,以获得更完整的描述。

    从以下版本开始:
    1.3
    另请参见:
    LineEvent
    • Nested Class Summary

      Nested Classes  
      Modifier and Type 接口 描述
      static class  DataLine.Info
      除了从其超类继承的类信息, DataLine.Info还提供了特定于数据行的附加信息。
    • 方法详细信息

      • drain

        void drain​()
        通过持续的数据I / O从排队排出数据,直到数据线的内部缓冲区被清空。 这种方法阻塞直到排水完成。 因为这是一个阻止方法,所以应该谨慎使用。 如果在其队列中具有数据的停止行上调用drain() ,则该方法将阻塞,直到该行正在运行,并且数据队列变为空。 如果一个线程调用drain() ,另一个线程继续填充数据队列,则该操作将不会完成。 当数据行关闭时,此方法总是返回。
        另请参见:
        flush()
      • flush

        void flush​()
        从行刷新排队的数据。 刷新的数据被丢弃。 在某些情况下,并非所有排队的数据都可以被丢弃。 例如,混频器可以从特定输入线的缓冲器中刷新数据,但是仍然会播放已经在输出缓冲器中的任何未播放的数据(混合的结果)。 如果要在重新启动播放或捕获时跳过“过时”数据,可以在暂停一行(正常情况)后调用此方法。 (刷新没有停止的行是合法的,但在活动行上执行此行可能会导致数据不连续,导致可察觉的点击。)
        另请参见:
        stop()drain()
      • start

        void start​()
        允许线路从事数据I / O。 如果在已经运行的行上调用该方法,则此方法不执行任何操作。 除非缓冲区中的数据已被刷新,否则线路将从线路停止时未处理的第一帧开始恢复I / O。 当音频捕获或播放开始时,会产生START事件。
        另请参见:
        stop()isRunning()LineEvent
      • stop

        void stop​()
        停止线。 停止的行应该停止I / O活动。 但是,如果该行已打开并运行,则应保留恢复活动所需的资源。 停止的线路应该保留其缓冲区中的任何音频数据,而不是丢弃它,以便在恢复时,如果可能,I / O可以继续停止。 (这并不能保证当前缓冲区不会有不连续性;如果停止的条件持续时间过长,则输入或输出样本可能会被丢弃。)如果需要,保留的数据可以通过调用flush方法。 当音频捕获或播放停止时,会产生STOP事件。
        另请参见:
        start()isRunning()flush()LineEvent
      • isRunning

        boolean isRunning​()
        指示该行是否正在运行。 默认值为false 当响应于start方法的调用而呈现第一数据时,开放行开始运行,并且继续直到显示停止响应于stop的调用或者因为播放完成。
        结果
        true如果该行正在运行,否则为 false
        另请参见:
        start()stop()
      • getFormat

        AudioFormat getFormat​()
        获取数据线音频数据的当前格式(编码,采样率,通道数等)。

        如果该行未打开,并且从未打开,则返回默认格式。 默认格式是实现特定的音频格式,或者如果用于检索该DataLineDataLine.Info对象指定了至少一个完全限定的音频格式,则最后一个将被用作默认格式。 以特定音频格式(例如SourceDataLine.open(AudioFormat)打开行将覆盖默认格式。

        结果
        当前音频数据格式
        另请参见:
        AudioFormat
      • getBufferSize

        int getBufferSize​()
        获取将适合数据线内部缓冲区的最大数据字节数。 对于源数据行,这是可以写入数据的缓冲区的大小。 对于目标数据行,可以读取数据的缓冲区的大小。 请注意,所使用的单位是字节,但总是对应于音频数据的采样帧的整数。
        结果
        缓冲区的大小(以字节为单位)
      • available

        int available​()
        获取应用程序当前可用于数据线内部缓冲区中处理数据的字节数。 对于源数据行,这是可以写入缓冲区而不阻塞的数据量。 对于目标数据行,这是应用程序可以读取的数据量。 对于剪辑,该值始终为0,因为当剪辑被打开时音频数据被加载到缓冲区中,并且在剪辑被关闭之前不变修改地保持。

        请注意,所使用的单位是字节,但总是对应于音频数据的采样帧的整数。

        应用程序保证从available()返回的字节数的读或写操作不会被阻塞; 然而,不能保证读取或写入更多数据的尝试将被阻止。

        结果
        可用数据量(以字节为单位)
      • getFramePosition

        int getFramePosition​()
        获取音频数据中的样本帧中的当前位置。 帧位置测量自从打开该行以来捕获或从该行渲染的采样帧的数量。 这个返回值将在2 ^ 31帧之后包围。 建议使用getLongFramePosition
        结果
        自该行打开以来已经处理的帧数
        另请参见:
        getLongFramePosition()
      • getLongFramePosition

        long getLongFramePosition​()
        获取音频数据中的样本帧中的当前位置。 帧位置测量自从打开该行以来捕获或从该行渲染的采样帧的数量。
        结果
        自该行打开以来已经处理的帧数
        从以下版本开始:
        1.5
      • getMicrosecondPosition

        long getMicrosecondPosition​()
        以微秒形式获取音频数据中的当前位置。 微秒位置测量对应于自打开之后由线捕获或呈现的采样帧的数量的时间。 精度水平不能保证。 例如,实现可以从当前帧位置和音频采样帧速率计算微秒位置。 然后,微秒的精度将被限制为每个采样帧的微秒数。
        结果
        该行打开后处理的数据的微秒数
      • getLevel

        float getLevel​()
        获取该行的当前音量级别。 该电平是信号电流幅度的度量,不应与增益控制的当前设置混淆。 范围从0.0(静音)到1.0(声音波形的最大可能幅度)。 单位测量线性幅度,不分贝。
        结果
        该行信号的当前幅度,或 AudioSystem.NOT_SPECIFIED