インタフェースSourceDataLine

すべてのスーパー・インタフェース:
AutoCloseable, DataLine, Line

public interface SourceDataLine extends DataLine
ソース・データ・ラインはデータを書き込めるデータ・ラインです。 ソース・データ・ラインはミキサーに対してソースとして動作します。 アプリケーションがオーディオ・バイトをソース・データ・ラインに書き込むと、ソース・データ・ラインはバイトのバッファリングを処理し、それをミキサーに配信します。 ミキサーはサンプルを他のソースからのサンプルとミックスし、それを出力ポートなどのターゲットに配信します。出力ポートとは、サウンド・カードのオーディオ出力デバイスなどのことです。

このインタフェースの命名規則は、ラインとミキサーの関係を反映しています。 アプリケーションから見ると、ソース・データ・ラインはオーディオ・データのターゲットの役割を果たします。

ミキサーからソース・データ行を取得するには、MixergetLineメソッドを適切なDataLine.Infoオブジェクトで呼び出します。

SourceDataLineインタフェースは、オーディオ・データをデータ・ラインのバッファに書き込むメソッドを提供します。 オーディオを再生またはミックスするアプリケーションは、バッファがアンダーフロー(空白化)しないうちにデータをすばやくソース・データ・ラインに書き込みます。アンダーフローによりオーディオに不連続部(クリック音として聞こえる)が生じることがあります。 アプリケーションは、DataLineインタフェースで定義されたavailableメソッドを使用して、データ行のバッファに現在キューに入れられているデータの量を判別できます。 ブロックせずにバッファに書き込めるデータ量は、バッファ・サイズとキューに入っているデータ量との差です。 アンダー・フローのためにオーディオ出力の配信が停止した場合は、STOPイベントが生成されます。 STARTイベントは、オーディオ出力が再開したときに生成されます。

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

    インタフェースで宣言されたネストされたクラス/インタフェース DataLine

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

    修飾子と型
    メソッド
    説明
    void
    open(AudioFormat format)
    指定されたフォーマットでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。
    void
    open(AudioFormat format, int bufferSize)
    指定されたフォーマットと指定されたバッファ・サイズでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。
    int
    write(byte[] b, int off, int len)
    このソース・データ・ラインを介してオーディオ・データをミキサーに書き込みます。

    インタフェースで宣言されたメソッド DataLine

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

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

    addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
    修飾子と型
    メソッド
    説明
    void
    リスナーをこのラインに追加します。
    void
    ラインを閉じ、ラインで使用していたシステム・リソースを解放できることを示します。
    指定されたタイプのコントロールがある場合、そのコントロールを取得します。
    このラインに関連付けられたコントロールのセットを取得します。
    このラインを説明するLine.Infoオブジェクトを取得します。
    boolean
    指定されたタイプのコントロールをラインがサポートしているかどうかを示します。
    boolean
    ラインが開いているかどうか、つまり現在はサウンドを再生または収集していなくてもシステム・リソースを確保し操作可能であるかどうかを示します。
    void
    ラインを開き、必要なシステム・リソースを獲得して操作可能になっていることを示します。
    void
    このラインのリスナーのリストから、指定されたリスナーを削除します。
  • メソッドの詳細

    • open

      void open(AudioFormat format, int bufferSize) throws LineUnavailableException
      指定されたフォーマットと指定されたバッファ・サイズでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。

      バッファ・サイズはバイト単位で指定しますが、サンプル・フレームの整数値を表す必要があります。 リクエストされたバッファ・サイズがこの要件を満たさない場合にこのメソッドを呼び出すと、IllegalArgumentExceptionが返される可能性があります。 開いたラインの実際のバッファ・サイズは、指定したバッファ・サイズとは異なることがあります。 実際に設定された値は、その後DataLine.getBufferSize()を呼び出して照会することができます。

      この操作が成功すると、行はオープンとしてマークされ、OPENイベントが行のリスナーにディスパッチされます。

      すでに開いているラインでこのメソッドを呼び出すのは不適切なアクションであるため、IllegalStateExceptionが表示されることがあります。

      ラインによっては、一度閉じると再度開くことができない場合があります。 こうしたラインを再度開こうとすると、常にLineUnavailableExceptionが表示されます。

      パラメータ:
      format - 目的のオーディオ形式
      bufferSize - 目的のバッファ・サイズ
      スロー:
      LineUnavailableException - リソースの制約のためにラインを開けない場合
      IllegalArgumentException - バッファ・サイズがサンプル・フレームの整数値を表さない場合、あるいはformatの指定が不完全または無効な場合
      IllegalStateException - ラインがすでに開いている場合
      関連項目:
    • open

      void open(AudioFormat format) throws LineUnavailableException
      指定されたフォーマットでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。

      バッファ・サイズは実装により選択されます。バッファ・サイズはバイト単位ですが、サンプル・フレームの整数値であることが必要です。 システムが選択したサイズは、続いてDataLine.getBufferSize()を呼び出して照会することができます。

      この操作が成功すると、行はオープンとしてマークされ、OPENイベントが行のリスナーにディスパッチされます。

      すでに開いているラインでこのメソッドを呼び出すのは不適切なアクションであるため、IllegalStateExceptionが表示されることがあります。

      ラインによっては、一度閉じると再度開くことができない場合があります。 こうしたラインを再度開こうとすると、常にLineUnavailableExceptionが表示されます。

      パラメータ:
      format - 目的のオーディオ形式
      スロー:
      LineUnavailableException - リソースの制約のためにラインを開けない場合
      IllegalArgumentException - formatの指定が不完全または無効な場合
      IllegalStateException - ラインがすでに開いている場合
      関連項目:
    • write

      int write(byte[] b, int off, int len)
      このソース・データ・ラインを介してオーディオ・データをミキサーに書き込みます。 要求されたバイト数のデータが、指定されたオフセットを始点として指定された配列から読み込まれ、データ・ラインのバッファに書き込まれます。 呼出し側が、現在(availableを参照してください)に書き込まれるよりも多くのデータを書き込もうとすると、このメソッドは、リクエストされたデータ量が書き込まれるまでブロックします。 これは、書込みを要求されたデータの量がデータ・ラインのバッファ・サイズより大きい場合にも当てはまります。 ただし、要求された量の書込みが終わる前にデータ・ラインがクローズ、停止、またはフラッシュされた場合は、メソッドのブロックが解除されて、それまでに書き込まれたバイト数が返されます。

      ブロックせずに書き込むことができるバイト数は、DataLineインタフェースのavailableメソッドを使用して確認できます。 このバイト数はブロックされずに確実に書き込めますが、追加データを書き込もうとしたときにブロックされるかどうかは確実ではありません。

      書き込まれるバイト数は、次のようにサンプル・フレームの整数値を表す必要があります。

      [ bytes written ] % [frame size in bytes ] == 0

      戻り値は常にこの条件を満たしています。 サンプル・フレームの非整数値を表すバイト数を書き込む要求は実行できず、IllegalArgumentExceptionがスローされる場合があります。

      パラメータ:
      b - データ・ラインに書き込まれるデータを含むバイト配列
      off - 配列の先頭からの座標、バイト単位
      len - バイト単位での配列の有効データの長さ(つまり、書込みを要求するバイト単位のデータ量)
      戻り値:
      実際に書き込まれるバイト数
      スロー:
      IllegalArgumentException - 要求されたバイト数がサンプル・フレームの整数値を表さない場合、またはlenが負の値の場合
      ArrayIndexOutOfBoundsException - offが負の値の場合、またはoff+lenが配列bの長さより大きい場合
      関連項目: