public interface SourceDataLine extends DataLine
このインタフェースの命名規則は、ラインとミキサーの関係を反映しています。アプリケーションから見ると、ソース・データ・ラインはオーディオ・データのターゲットの役割を果たします。
ミキサーからソース・データ・ラインを取得するには、適切な
オブジェクトを指定してDataLine.Info
Mixer
の
メソッドを呼び出します。
getLine
SourceDataLine
インタフェースは、オーディオ・データをデータ・ラインのバッファに書き込むメソッドを提供します。オーディオを再生またはミックスするアプリケーションは、バッファがアンダーフロー(空白化)しないうちにデータをすばやくソース・データ・ラインに書き込みます。アンダーフローによりオーディオに不連続部(クリック音として聞こえる)が生じることがあります。アプリケーションでは、DataLine
インタフェースで定義されている
メソッドを使用して、データ・ラインのバッファで現在キューに入っているデータの量を判別できます。ブロックせずにバッファに書き込めるデータ量は、バッファ・サイズとキューに入っているデータ量との差です。アンダーフローのためにオーディオ出力の配信が停止した場合は、available
イベントが生成されます。オーディオ出力が再開すると、STOP
イベントが生成されます。START
Mixer
、DataLine
、TargetDataLine
DataLine.Info
修飾子と型 | メソッドと説明 |
---|---|
void |
open(AudioFormat format)
指定されたフォーマットでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。
|
void |
open(AudioFormat format, int bufferSize)
指定されたフォーマットと指定されたバッファ・サイズでラインを開き、ラインが必要なシステム・リソースを獲得して操作可能になるようにします。
|
int |
write(byte[] b, int off, int len)
このソース・データ・ラインを介してオーディオ・データをミキサーに書き込みます。
|
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
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
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
int write(byte[] b, int off, int len)
available
を参照)、要求された量のデータの書込みが終わるまでこのメソッドはブロックされます。これは、書込みを要求されたデータの量がデータ・ラインのバッファ・サイズより大きい場合にも当てはまります。ただし、要求された量の書込みが終わる前にデータ・ラインがクローズ、停止、またはフラッシュされた場合は、メソッドのブロックが解除されて、それまでに書き込まれたバイト数が返されます。
ブロックされずに書き込めるバイト数は、DataLine
インタフェースの
メソッドを使って確認できます。このバイト数はブロックされずに確実に書き込めますが、追加データを書き込もうとしたときにブロックされるかどうかは確実ではありません。
available
書き込まれるバイト数は、次のようにサンプル・フレームの整数値を表す必要があります。
[ bytes written ] % [frame size in bytes ] == 0
IllegalArgumentException
がスローされる場合があります。b
- データ・ラインに書き込まれるデータを含むバイト配列len
- バイト単位での配列の有効データの長さ(つまり、書込みを要求するバイト単位のデータ量)off
- 配列の先頭からの座標、バイト単位IllegalArgumentException
- 要求されたバイト数がサンプル・フレームの整数値を表さない場合、またはlen
が負の値の場合ArrayIndexOutOfBoundsException
- off
が負の値の場合、またはoff+len
が配列b
の長さより大きい場合。TargetDataLine.read(byte[], int, int)
, DataLine.available()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.