|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
public interface SourceDataLine
ソースデータラインはデータを書き込めるデータラインです。ソースデータラインはミキサーに対してソースとして動作します。アプリケーションがオーディオバイトをソースデータラインに書き込むと、ソースデータラインはバイトのバッファリングを処理し、それをミキサーに配信します。ミキサーはサンプルをほかのソースからのサンプルとミックスし、それを出力ポートなどのターゲットに配信します。 出力ポートとは、サウンドカードのオーディオ出力デバイスなどのことです。
このインタフェースの命名規則は、ラインとミキサーの関係を反映しています。アプリケーションから見ると、ソースデータラインはオーディオデータのターゲットの役割を果たします。
ソースデータラインをミキサーから取得するには、適切な オブジェクトを指定して DataLine.InfoMixer の メソッドを呼び出します。
getLine
SourceDataLine インタフェースは、オーディオデータをデータラインのバッファーに書き込むメソッドを提供します。オーディオを再生またはミックスするアプリケーションは、バッファーがアンダーフロー (空白化) しないうちにデータを素早くソースデータラインに書き込みます。 アンダーフローによりオーディオに不連続部が生じることがあり、クリック音として知覚されます。アプリケーションでは、DataLine インタフェースで定義されている メソッドを使用して、データラインのバッファーで現在キューに入っているデータの量を判別することができます。ブロックせずにバッファーに書き込めるデータ量は、バッファーサイズとキューに入っているデータ量との差です。アンダーフローのためにオーディオ出力の配信が停止した場合は、available イベントが生成されます。オーディオ出力が再開すると、STOP イベントが生成されます。
START
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 |
| メソッドの詳細 |
|---|
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
書き込まれるバイト数は、次のようなサンプルフレームの整数を表示する必要があります。
[書き込まれるバイト数] % [フレームサイズのバイト数] == 0IllegalArgumentException がスローされる場合があります。
b - データラインに書き込まれるデータを含むバイト配列len - バイト単位での配列の有効データの長さ (つまり、バイト単位での書き込み要求データの量)off - 配列の先頭からの座標、バイト単位
IllegalArgumentException - 要求されたバイト数が サンプルフレームサイズの倍数でない場合、 または len が負の値の場合
ArrayIndexOutOfBoundsException - off が負の値の場合、 または off+len が配列 b の長さより大きい場合TargetDataLine.read(byte[], int, int),
DataLine.available()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。