モジュール java.desktop
パッケージ javax.sound.sampled

インタフェースDataLine

すべてのスーパー・インタフェース:
AutoCloseable, Line
既知のすべてのサブインタフェース:
Clip, SourceDataLine, TargetDataLine

public interface DataLine
extends Line
DataLineは、メディア関連の機能をそのスーパー・インタフェース、Lineに追加します。 この機能には、ラインを介して渡されるオーディオ・データを開始、停止、排出、およびフラッシュする転送制御メソッドが含まれます。 データ・ラインは現在の位置、ボリューム、メディアのオーディオ形式についてもレポートできます。 データ・ラインは、アプリケーション・プログラムがデータを書き込むことを可能にするサブインタフェースSourceDataLineまたはClipを使用してオーディオを出力するために使用されます。 同様に、オーディオ入力は、データの読取りを可能にするサブインタフェース、TargetDataLineで処理されます。

データ・ラインには、受信または送信オーディオ・データをキューに入れる内部バッファがあります。 drain()メソッドは、通常、すべてのキューに入れられたデータが処理されたため、この内部バッファが空になるまでブロックします。 flush()メソッドは、使用可能なキュー内のデータをすべて内部バッファから破棄します。

データ・ラインは、データのアクティブな表示またはキャプチャを開始または終了するたびにSTARTおよびSTOPイベントを生成します。 これらのイベントは、特定の要求に応答して、または直接変更された状態が少ない場合に生成されます。 たとえば、start()がアクティブでないデータ・ラインで呼び出され、データの取り込みまたは再生が可能な場合は、実際にデータの再生や取込みが開始されるとSTARTイベントがただちに生成されます。 あるいは、アクティブなデータ・ラインに対するデータのフローを収縮した結果、データの表示にギャップが生じると、STOPイベントが生成されます。

ミキサーは、複数のデータ・ラインの同期制御をサポートする場合がよくあります。 同期は、Mixerインタフェースのsynchronizeメソッドを使用して確立できます。 詳細は、Mixerインタフェースの説明を参照してください。

導入されたバージョン:
1.3
関連項目:
LineEvent
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型 インタフェース 説明
    static class  DataLine.Info
    スーパー・クラスから継承されたクラス情報以外に、DataLine.Infoはデータ・ラインに固有の追加情報を提供します。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    int available()
    アプリケーションがデータ・ラインの内部バッファ内で現在処理できるデータのバイト数を取得します。
    void drain()
    データの入出力をデータ・ラインの内部バッファが空になるまで継続して、そのラインからキューに入っているデータを排出します。
    void flush()
    ラインからキューに入っているデータをフラッシュします。
    int getBufferSize()
    データ・ラインの内部バッファ内に収まるデータの最大バイト数を取得します。
    AudioFormat getFormat()
    データ・ラインのオーディオ・データの現在の形式(エンコーディング、サンプル・レート、チャネル数など)を取得します。
    int getFramePosition()
    オーディオ・データの現在の位置をサンプル・フレーム数で取得します。
    float getLevel()
    ラインの現在のボリューム・レベルを取得します。
    long getLongFramePosition()
    オーディオ・データの現在の位置をサンプル・フレーム数で取得します。
    long getMicrosecondPosition()
    オーディオ・データ内の現在の位置をマイクロ秒単位で取得します。
    boolean isActive()
    ラインがアクティブな入出力(再生や取り込みなど)を実行しているかどうかを示します。
    boolean isRunning()
    ラインが実行中かどうかを示します。
    void start()
    ラインでのデータ入出力を可能にします。
    void stop()
    ラインを停止します。

    インタフェース javax.sound.sampled.Lineで宣言されたメソッド

    addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
  • メソッドの詳細

    • drain

      void drain()
      データの入出力をデータ・ラインの内部バッファが空になるまで継続して、そのラインからキューに入っているデータを排出します。 このメソッドは排出が完了するまでブロックされます。 これはブロッキング・メソッドのため、注意して使用する必要があります。 キュー内にデータがあるラインが停止している状態でdrain()を呼び出すと、ラインが実行されてデータ・キューが空になるまでこのメソッドはブロックされます。 drain()を1つのスレッドで呼び出し、別のスレッドでデータ・キューの格納を継続すると、操作は完了しません。 このメソッドはデータ・ラインが閉じると常に戻ります。
      関連項目:
      flush()
    • flush

      void flush()
      ラインからキューに入っているデータをフラッシュします。 フラッシュされたデータは破棄されます。 一部のキュー・データしか破棄できない場合もあります。 たとえば、ミキサーは特定の入力ラインのバッファからデータをフラッシュできますが、出力バッファ内にある再生されていないデータ(混在の結果)は、そのまま再生されます。 再生や取込みを再開するときに「無効な」データをスキップする場合は、通常ラインを一時停止したあとこのメソッドを呼び出すことができます。 停止されていないラインをフラッシュするのは正当な方法ですが、この方法をアクティブなラインで実行すると、データ内で不連続部が発生する場合があり、音が途切れるのがわかります。
      関連項目:
      stop(), drain()
    • start

      void start()
      ラインでのデータ入出力を可能にします。 このメソッドを、すでに実行しているラインで呼び出しても、何も機能しません。 バッファ内のデータがフラッシュされていない場合、ラインが停止した時点で処理されなかった最初のフレームから、ラインは入出力を再開します。 オーディオのキャプチャまたは再生が開始されると、STARTイベントが生成されます。
      関連項目:
      stop()isRunning()LineEvent
    • stop

      void stop()
      ラインを停止します。 停止されたラインは入出力アクティビティを停止します。 ただし、ラインを開いて実行すると、アクティビティを再開するのに必要なリソースが保持されます。 停止されたラインではオーディオ・データは破棄されずにバッファ内に保持されるため、ラインを再開するとオフになっていた場所から継続できる場合があります。 この場合は当然、現在のバッファ以外に不連続部が発生する可能性があります。停止状況が非常に長く続く場合は、入力または出力のサンプルが無効になることがあります。 必要に応じてflushメソッドを呼び出して、保持されているデータを破棄できます。 オーディオのキャプチャまたは再生が停止すると、STOPイベントが生成されます。
      関連項目:
      start()isRunning()flush()LineEvent
    • isRunning

      boolean isRunning()
      ラインが実行中かどうかを示します。 デフォルトはfalseです。 開かれたラインは、startメソッドの呼出しに応じて最初のデータが提示されると実行が開始され、stopメソッドの呼出しに応じて、あるいは再生が完了して、提示されなくなるまで継続して実行されます。
      戻り値:
      ラインが実行中である場合はtrue、そうでない場合はfalse
      関連項目:
      start(), stop()
    • isActive

      boolean isActive()
      ラインがアクティブな入出力(再生や取り込みなど)を実行しているかどうかを示します。 非アクティブな行がアクティブになると、STARTイベントがリスナーに送信されます。 同様に、アクティブなラインがアクティブでなくなると、ラインはSTOPイベントを送信します。
      戻り値:
      ラインがサウンドの取り込みやレンダリングを実行している場合はtrue、そうでない場合はfalse
      関連項目:
      Line.isOpen()Line.addLineListener(javax.sound.sampled.LineListener)Line.removeLineListener(javax.sound.sampled.LineListener)LineEventLineListener
    • getFormat

      AudioFormat getFormat()
      データ・ラインのオーディオ・データの現在の形式(エンコーディング、サンプル・レート、チャネル数など)を取得します。

      現在開いておらず、これまでも開いたことがないラインは、デフォルトの形式を返します。 デフォルトの形式は、実装固有のオーディオ形式になります。または、DataLine.Infoオブジェクト(このDataLineの取得に使用)が1つ以上の完全指定オーディオ形式を指定する場合、最後のものがデフォルトの形式になります。 特定のオーディオ形式(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()
      オーディオ・データ内の現在の位置をマイクロ秒単位で取得します。 マイクロ秒の位置は、ラインが開かれてから取り込まれた、またはレンダリングされたサンプル・フレーム数に相当する時間で測定されます。 精度のレベルは保証されません。 たとえば、実装では、現在のフレーム位置およびオーディオ・サンプル・フレーム・レートからマイクロ秒位置が計算される場合があります。 マイクロ秒単位の精度は、1サンプル・フレームあたりのマイクロ秒数に制限されます。
      戻り値:
      ラインが開かれてから処理されたデータのマイクロ秒数
    • getLevel

      float getLevel()
      ラインの現在のボリューム・レベルを取得します。 このレベルは信号の現在の振幅の尺度です。また、このレベルとゲイン・コントロールの現在の設定とを混同しないでください。 範囲は0.0 (無音)から1.0 (サウンド波形の最大振幅)までです。 単位はデシベルではなく線形振幅で測定されます。
      戻り値:
      このラインの信号の現在の振幅、またはAudioSystem.NOT_SPECIFIED