- すべてのスーパー・インタフェース:
AutoCloseable
,DataLine
,Line
public interface SourceDataLine extends DataLine
このインタフェースの命名規則は、ラインとミキサーの関係を反映しています。 アプリケーションから見ると、ソース・データ・ラインはオーディオ・データのターゲットの役割を果たします。
ソース・データ・ラインは、適切なDataLine.Info
オブジェクトを使用してMixer
のgetLine
メソッドを呼び出すことによって、ミキサーから取得できます。
SourceDataLine
インタフェースは、オーディオ・データをデータ・ラインのバッファに書き込むメソッドを提供します。 オーディオを再生またはミックスするアプリケーションは、バッファがアンダーフロー(空白化)しないうちにデータをすばやくソース・データ・ラインに書き込みます。アンダーフローによりオーディオに不連続部(クリック音として聞こえる)が生じることがあります。 アプリケーションは、DataLine
インタフェースで定義されたavailable
メソッドを使用して、データ・ライン・バッファに現在キューイングされているデータの量を判断できます。 ブロックせずにバッファに書き込めるデータ量は、バッファ・サイズとキューに入っているデータ量との差です。 アンダーフローのためにオーディオ出力の配信が停止した場合は、STOP
イベントが生成されます。 オーディオ出力が再開すると、START
イベントが生成されます。
- 導入されたバージョン:
- 1.3
- 関連項目:
Mixer
、DataLine
、TargetDataLine
-
ネストされたクラスのサマリー
インタフェース javax.sound.sampled.DataLineで宣言されたネストされたクラス/インタフェース
DataLine.Info
-
メソッドのサマリー
修飾子と型 メソッド 説明 void
open(AudioFormat format)
指定されたフォーマットでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。void
open(AudioFormat format, int bufferSize)
指定されたフォーマットと指定されたバッファ・サイズでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。int
write(byte[] b, int off, int len)
このソース・データ・ラインを介してオーディオ・データをミキサーに書き込みます。インタフェース javax.sound.sampled.DataLineで宣言されたメソッド
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
インタフェース javax.sound.sampled.Lineで宣言されたメソッド
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
-
メソッドの詳細
-
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
-
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
の長さより大きい場合- 関連項目:
TargetDataLine.read(byte[], int, int)
,DataLine.available()
-