|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
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 2 Platform Standard Ed. 5.0 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。