- すべてのスーパー・インタフェース:
AutoCloseable
,Line
- 既知のすべてのサブインタフェース:
Clip
,SourceDataLine
,TargetDataLine
DataLine
は、メディア関連機能をそのスーパー・インタフェースLine
に追加します。 この機能には、ラインを介して渡されるオーディオ・データを開始、停止、排出、およびフラッシュする転送制御メソッドが含まれます。 データ・ラインは現在の位置、ボリューム、メディアのオーディオ形式についてもレポートできます。 データ行は、アプリケーション・プログラムがデータを書き込むことができるサブインタフェースSourceDataLine
またはClip
を使用して、オーディオの出力に使用されます。 同様に、オーディオ入力はサブ・インタフェースTargetDataLine
によって処理され、データを読み込むことができます。
データ・ラインには、受信または送信オーディオ・データをキューに入れる内部バッファがあります。 drain()
メソッドは、通常、キューに入れられたすべてのデータが処理されたために、この内部バッファが空になるまでブロックします。 flush()
メソッドは、使用可能なキューに入れられたデータを内部バッファから破棄します。
データ行は、アクティブなプレゼンテーションまたはデータの取得を開始または停止するたびに、START
およびSTOP
イベントを生成します。 これらのイベントは、特定の要求に応答して、または直接変更された状態が少ない場合に生成されます。 たとえば、start()
が非アクティブなデータ行でコールされ、データを取得または再生できる場合、データの再生または取得が実際に開始されるとすぐにSTART
イベントが生成されます。 あるいは、アクティブなデータ・ラインに対するデータのフローを収縮した結果、データの表示にギャップが生じると、STOP
イベントが生成されます。
ミキサーは、複数のデータ・ラインの同期制御をサポートする場合がよくあります。 同期は、Mixer
インタフェースのsynchronize
メソッドを使用して確立できます。 詳細は、Mixer
インタフェースの説明を参照してください。
- 導入されたバージョン:
- 1.3
- 関連項目:
-
ネストされたクラスのサマリー
修飾子と型インタフェース説明static class
スーパー・クラスから継承されたクラス情報以外に、DataLine.Info
はデータ・ラインに固有の追加情報を提供します。 -
メソッドのサマリー
修飾子と型メソッド説明int
アプリケーションがデータ・ラインの内部バッファ内で現在処理できるデータのバイト数を取得します。void
drain()
データの入出力をデータ・ラインの内部バッファが空になるまで継続して、そのラインからキューに入っているデータを排出します。void
flush()
ラインからキューに入っているデータをフラッシュします。int
データ・ラインの内部バッファ内に収まるデータの最大バイト数を取得します。データ・ラインのオーディオ・データの現在の形式(エンコーディング、サンプル・レート、チャネル数など)を取得します。int
オーディオ・データの現在の位置をサンプル・フレーム数で取得します。float
getLevel()
ラインの現在のボリューム・レベルを取得します。long
オーディオ・データの現在の位置をサンプル・フレーム数で取得します。long
オーディオ・データ内の現在の位置をマイクロ秒単位で取得します。boolean
isActive()
ラインがアクティブな入出力(再生や取り込みなど)を実行しているかどうかを示します。boolean
ラインが実行中かどうかを示します。void
start()
ラインでのデータ入出力を可能にします。void
stop()
ラインを停止します。インタフェースjavax.sound.sampled.Lineで宣言されたメソッド
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
-
メソッドの詳細
-
drain
void drain()データの入出力をデータ・ラインの内部バッファが空になるまで継続して、そのラインからキューに入っているデータを排出します。 このメソッドは排出が完了するまでブロックされます。 これはブロッキング・メソッドのため、注意して使用する必要があります。 キュー内にデータがあるラインが停止している状態でdrain()
を呼び出すと、ラインが実行されてデータ・キューが空になるまでこのメソッドはブロックされます。drain()
を1つのスレッドで呼び出し、別のスレッドでデータ・キューの格納を継続すると、操作は完了しません。 このメソッドはデータ・ラインが閉じると常に戻ります。- 関連項目:
-
flush
void flush()ラインからキューに入っているデータをフラッシュします。 フラッシュされたデータは破棄されます。 一部のキュー・データしか破棄できない場合もあります。 たとえば、ミキサーは特定の入力ラインのバッファからデータをフラッシュできますが、出力バッファ内にある再生されていないデータ(混在の結果)は、そのまま再生されます。 再生や取込みを再開するときに「無効な」データをスキップする場合は、通常ラインを一時停止したあとこのメソッドを呼び出すことができます。 停止されていないラインをフラッシュするのは正当な方法ですが、この方法をアクティブなラインで実行すると、データ内で不連続部が発生する場合があり、音が途切れるのがわかります。- 関連項目:
-
start
void start()ラインでのデータ入出力を可能にします。 このメソッドを、すでに実行しているラインで呼び出しても、何も機能しません。 バッファ内のデータがフラッシュされていない場合、ラインが停止した時点で処理されなかった最初のフレームから、ラインは入出力を再開します。 オーディオのキャプチャまたは再生が開始されると、START
イベントが生成されます。- 関連項目:
-
stop
void stop()ラインを停止します。 停止されたラインは入出力アクティビティを停止します。 ただし、ラインを開いて実行すると、アクティビティを再開するのに必要なリソースが保持されます。 停止されたラインではオーディオ・データは破棄されずにバッファ内に保持されるため、ラインを再開するとオフになっていた場所から継続できる場合があります。 この場合は当然、現在のバッファ以外に不連続部が発生する可能性があります。停止状況が非常に長く続く場合は、入力または出力のサンプルが無効になることがあります。 必要に応じてflush
メソッドを呼び出して、保持されているデータを破棄できます。 オーディオのキャプチャまたは再生が停止すると、STOP
イベントが生成されます。- 関連項目:
-
isRunning
boolean isRunning()ラインが実行中かどうかを示します。 デフォルトは「false
」です。 開かれたラインは、start
メソッドの呼出しに応じて最初のデータが提示されると実行が開始され、stop
メソッドの呼出しに応じて、あるいは再生が完了して、提示されなくなるまで継続して実行されます。- 戻り値:
- ラインが実行中である場合は
true
、そうでない場合はfalse
- 関連項目:
-
isActive
-
getFormat
AudioFormat getFormat()データ・ラインのオーディオ・データの現在の形式(エンコーディング、サンプル・レート、チャネル数など)を取得します。現在開いておらず、これまでも開いたことがないラインは、デフォルトの形式を返します。 デフォルトの形式は、実装固有のオーディオ形式になります。または、
DataLine.Info
オブジェクト(このDataLine
の取得に使用)が1つ以上の完全指定オーディオ形式を指定する場合、最後のものがデフォルトの形式になります。 特定のオーディオ形式(SourceDataLine.open(AudioFormat)
など)でラインを開くと、デフォルトの形式はオーバーライドされます。- 戻り値:
- オーディオ・データの現在の形式
- 関連項目:
-
getBufferSize
int getBufferSize()データ・ラインの内部バッファ内に収まるデータの最大バイト数を取得します。 ソース・データ・ラインの場合は、データを書込みできるバッファのサイズの値になります。 ターゲット・データ・ラインの場合は、データを読取りできるバッファのサイズの値になります。 使用される単位はバイトですが、オーディオ・データのサンプル・フレームの整数値に常に一致します。- 戻り値:
- バッファのサイズ(バイト単位)
-
available
int available()アプリケーションがデータ・ラインの内部バッファ内で現在処理できるデータのバイト数を取得します。 ソース・データ・ラインの場合は、ブロックされずにバッファに書き込めるデータ量がこの値になります。 ターゲット・データ・ラインの場合は、アプリケーションで読み込めるデータ量がこの値になります。 クリップの場合は、クリップを開くとオーディオ・データはバッファにロードされてクリップが閉じるまで変更されずに維持されるため、この値は常に0になります。使用される単位はバイトですが、オーディオ・データのサンプル・フレームの整数値に常に一致します。
アプリケーションでは、
available()
から返されたバイト数までの読み込みまたは書込み操作はブロックされません。ただし、そのバイト数より多くのデータの読み込みまたは書込み操作を実行するとブロックされるかどうかは確実ではありません。- 戻り値:
- 使用可能なデータ量(バイト数)
-
getFramePosition
int getFramePosition()オーディオ・データの現在の位置をサンプル・フレーム数で取得します。 フレーム位置は、ラインが開かれてから取り込まれた、またはレンダリングされたサンプル・フレーム数で測定されます。 この戻り値は、2から31フレーム後でラップされます。 かわりにgetLongFramePosition
を使用することをお薦めします。- 戻り値:
- ラインが開かれてからすでに処理されたフレーム数
- 関連項目:
-
getLongFramePosition
long getLongFramePosition()オーディオ・データの現在の位置をサンプル・フレーム数で取得します。 フレーム位置は、ラインが開かれてから取り込まれた、またはレンダリングされたサンプル・フレーム数で測定されます。- 戻り値:
- ラインが開かれてからすでに処理されたフレーム数
- 導入されたバージョン:
- 1.5
-
getMicrosecondPosition
long getMicrosecondPosition()オーディオ・データ内の現在の位置をマイクロ秒単位で取得します。 マイクロ秒の位置は、ラインが開かれてから取り込まれた、またはレンダリングされたサンプル・フレーム数に相当する時間で測定されます。 精度のレベルは保証されません。 たとえば、実装では、現在のフレーム位置およびオーディオ・サンプル・フレーム・レートからマイクロ秒位置が計算される場合があります。 マイクロ秒単位の精度は、1サンプル・フレームあたりのマイクロ秒数に制限されます。- 戻り値:
- ラインが開かれてから処理されたデータのマイクロ秒数
-
getLevel
float getLevel()ラインの現在のボリューム・レベルを取得します。 このレベルは信号の現在の振幅の尺度です。また、このレベルとゲイン・コントロールの現在の設定とを混同しないでください。 範囲は0.0 (無音)から1.0 (サウンド波形の最大振幅)までです。 単位はデシベルではなく線形振幅で測定されます。- 戻り値:
- この行のシグナルの現在の振幅、または
AudioSystem.NOT_SPECIFIED
-