模块  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
    • 嵌套类汇总

      嵌套类  
      变量和类型 接口 描述
      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