JavaTM 2 Platform
Standard Ed. 5.0

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 はデータラインに固有の追加情報を提供します。
 
メソッドの概要
 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), LineEvent, LineListener

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

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。