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

インタフェースTargetDataLine

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

public interface TargetDataLine
extends DataLine
ターゲット・データ線は、オーディオ・データを読み出すことができるDataLineの一種です。 もっとも一般的な例は、データをオーディオ・キャプチャ・デバイスから取得するデータ・ラインです。 デバイスはターゲット・データ・ラインに書き込むミキサーとして実装されます。

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

ターゲット・データ・ラインは、適切なDataLine.Infoオブジェクトを使用してMixergetLineメソッドを呼び出すことによって、ミキサーから取得できます。

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
    • open

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

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

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

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

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

      パラメータ:
      format - 目的のオーディオ形式
      例外:
      LineUnavailableException - リソースの制約のためにラインを開けない場合
      IllegalArgumentException - formatの指定が不完全または無効な場合
      IllegalStateException - ラインがすでに開いている場合
      SecurityException - セキュリティの制約のためにラインを開けない場合
      関連項目:
      open(AudioFormat, int)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()