JavaTM 2 Platform
Std. Ed. v1.3

javax.sound.sampled
インタフェース DataLine

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

public interface DataLine
extends Line

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

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

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

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

導入されたバージョン:
1.3
関連項目:
LineEvent

内部クラスの概要
static class DataLine.Info
          スーパークラスから継承されたクラス情報以外に、DataLine.Info はデータラインに固有の追加情報を提供します。
 
クラス javax.sound.sampled.Line から継承した内部クラス
Line.Info
 
メソッドの概要
 int available()
          アプリケーションがデータラインの内部バッファ内で現在処理できるデータのバイト数を取得します。
 void drain()
          データの入出力をデータラインの内部バッファが空になるまで継続して、そのラインからキューに入っているデータを排出します。
 void flush()
          ラインからキューに入っているデータをフラッシュします。
 int getBufferSize()
          データラインの内部バッファ内に収まるデータの最大バイト数を取得します。
 AudioFormat getFormat()
          データラインのオーディオデータの現在の形式 (エンコーディング、サンプルレート、チャネル数など) を取得します。
 int getFramePosition()
          オーディオデータの現在の位置をサンプルフレーム数で取得します。
 float getLevel()
          ラインの現在のボリュームレベルを取得します。
 long getMicrosecondPosition()
          オーディオデータ内の現在の位置をマイクロ秒単位で取得します。
 boolean isActive()
          ラインがアクティブな入出力 (再生や取り込みなど) を実行しているかどうかを示します。
 boolean isRunning()
          ラインが実行中かどうかを示します。
 void start()
          ラインでのデータ入出力を可能にします。
 void stop()
          ラインを停止します。
 
インタフェース javax.sound.sampled.Line から継承したメソッド
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
 

メソッドの詳細

drain

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

flush

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

start

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

stop

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

isRunning

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

isActive

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

getFormat

public AudioFormat getFormat()
データラインのオーディオデータの現在の形式 (エンコーディング、サンプルレート、チャネル数など) を取得します。
戻り値:
オーディオデータの現在の形式
関連項目:
AudioFormat

getBufferSize

public int getBufferSize()
データラインの内部バッファ内に収まるデータの最大バイト数を取得します。ソースデータラインの場合は、データを書き込みできるバッファのサイズの値になります。ターゲットデータラインの場合は、データを読み込みできるバッファのサイズの値になります。使用される単位はバイトですが、単位はオーディオデータのサンプルフレームの積分数と常に一致します。
戻り値:
バッファのサイズ (バイト数)

available

public int available()
アプリケーションがデータラインの内部バッファ内で現在処理できるデータのバイト数を取得します。ソースデータラインの場合は、ブロックされずにバッファに書き込めるデータ量がこの値になります。ターゲットデータラインの場合は、アプリケーションで読み込めるデータ量がこの値になります。クリップの場合は、クリップを開くとオーディオデータはバッファにロードされてクリップが閉じるまで変更されずに維持されるため、この値は常に 0 になります。

使用される単位はバイトですが、単位はオーディオデータのサンプルフレームの積分数に常に一致します。

アプリケーションでは、available() から返されたバイト数までの読み込みまたは書き込み操作はブロックされません。ただし、そのバイト数より多くのデータの読み込みまたは書き込み操作を実行するとブロックされるかどうか確実ではありません。

戻り値:
使用可能なデータ量 (バイト数)

getFramePosition

public int getFramePosition()
オーディオデータの現在の位置をサンプルフレーム数で取得します。フレーム位置は、ラインが開かれてから取り込まれた、または描画されたサンプルフレーム数で測定されます。
戻り値:
ラインが開かれてからすでに処理されたフレーム数

getMicrosecondPosition

public long getMicrosecondPosition()
オーディオデータ内の現在の位置をマイクロ秒単位で取得します。マイクロ秒の位置は、ラインが開かれてから取り込まれた、または描画されたサンプルフレーム数に相当する時間で測定されます。精度のレベルは保証されません。たとえば、実装では、現在のフレーム位置およびオーディオサンプルフレームレートからマイクロ秒位置が計算される場合があります。マイクロ秒単位の精度は、1 サンプルフレーム当たりのマイクロ秒数に制限されます。
戻り値:
ラインが開かれてから処理されたデータのマイクロ秒数

getLevel

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

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.