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