JavaTM 2
Platform
Std. Ed. v1.4.0

javax.sound.sampled
インタフェース SourceDataLine

すべてのスーパーインタフェース:
DataLine, Line

public interface SourceDataLine
extends DataLine

ソースデータラインはデータを書き込めるデータラインです。ソースデータラインはミキサーに対してソースとして動作します。アプリケーションがオーディオバイトをソースデータラインに書き込むと、ソースデータラインはバイトのバッファリングを処理し、それをミキサーに配信します。ミキサーはサンプルを他のソースからのサンプルとミックスし、それを出力ポートなどのターゲットに配信します。出力ポートとは、サウンドカードのオーディオ出力デバイスなどのことです。

このインタフェースの命名規則は、ラインとミキサーの関係を反映しています。アプリケーションから見ると、ソースデータラインはオーディオデータのターゲットの役割を果たします。

ソースデータラインは、該当する DataLine.Info オブジェクトを使って MixergetLine メソッドを呼び出すことにより、ミキサーから取得できます。

SourceDataLine インタフェースは、オーディオデータをデータラインのバッファに書き込むメソッドを提供します。オーディオを再生またはミックスするアプリケーションは、バッファがアンダーフロー (空白化) しないうちに、データを素早くソースデータラインに書き込みます。アンダーフローによりオーディオに不連続部が生じることがあり、クリック音として知覚されます。アプリケーションは、DataLine インタフェースで定義された available メソッドを使用して、データラインのバッファで現在キューに入っているデータの量を判別することができます。ブロックせずにバッファに書き込めるデータの量は、バッファサイズとキューに入っているデータの量の差異です。アンダーフローのためにオーディオ出力の配信が停止した場合、STOP イベントが生成されます。オーディオ出力が再開すると、START イベントが生成されます。

導入されたバージョン:
1.3
関連項目:
Mixer, DataLine, TargetDataLine

入れ子クラスの概要
 
クラス javax.sound.sampled.DataLine から継承した入れ子クラス
DataLine.Info
 
クラス javax.sound.sampled.Line から継承した入れ子クラス
Line.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, getMicrosecondPosition, isActive, isRunning, start, stop
 
インタフェース javax.sound.sampled.Line から継承したメソッド
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener
 

メソッドの詳細

open

public void open(AudioFormat format,
                 int bufferSize)
          throws LineUnavailableException
指定されたフォーマットと指定されたバッファサイズでラインを開き、ラインが必要なシステムリソースを獲得して操作可能になるようにします。

バッファサイズはバイトで指定されますが、サンプルフレームの整数を表示する必要があります。この条件に適合しないバッファサイズでこのメソッドを呼び出すと、IllegalArgumentException が表示されることがあります。開いたラインの実際のバッファサイズは、指定されたバッファサイズとは異なることがあります。実際に設定された値は、後続の呼び出し DataLine.getBufferSize() によって照会できます。

この操作が完了すると、ラインは開くものとしてマークされ、OPEN イベントがラインのリスナーにディスパッチされます。

すでに開いているラインでこのメソッドを呼び出すのは不適切であり、IllegalStateException が表示されることがあります。

ラインによっては、一度閉じると再度開けない場合があります。こうしたラインを再度開こうとすると、常に LineUnavailableException が表示されます。

パラメータ:
format - 望ましいオーディオ形式
bufferSize - 望ましいバッファサイズ
例外:
LineUnavailableException - リソースの制約のためにラインを開けない場合
IllegalArgumentException - バッファサイズがサンプルフレームの積分数を表示しない場合
IllegalStateException - ラインがすでに開いている場合
SecurityException - セキュリティ上の制約のためにラインを開けない場合
関連項目:
open(AudioFormat), Line.open(), Line.close(), Line.isOpen(), LineEvent

open

public void open(AudioFormat format)
          throws LineUnavailableException
指定されたフォーマットでラインを開き、ラインが必要なシステムリソースを獲得して操作可能になるようにします。

実装側がバッファサイズを選択します。バッファサイズはバイトで決定されますが、サンプルフレームの整数を含んでいます。システムが選択したバッファサイズは、後続の DataLine.getBufferSize() を呼び出して照会できます。

この操作が完了すると、ラインは開くものとしてマークされ、OPEN イベントがラインのリスナーにディスパッチされます。

すでに開いているラインでこのメソッドを呼び出すのは不適切であり、IllegalStateException が表示されることがあります。

ラインによっては、一度閉じると再度開けない場合があります。こうしたラインを再度開こうとすると、常に LineUnavailableException が表示されます。

パラメータ:
format - 望ましいオーディオ形式
例外:
LineUnavailableException - リソースの制約のためにラインを開けない場合
IllegalStateException - ラインがすでに開いている場合
SecurityException - セキュリティ上の制約のためにラインを開けない場合
関連項目:
open(AudioFormat, int), Line.open(), Line.close(), Line.isOpen(), LineEvent

write

public int write(byte[] b,
                 int off,
                 int len)
このソースデータラインを通してオーディオデータをミキサーに書き込みます。要求されたデータのバイト数が、指定された座標を始点として指定された配列から読み込まれ、データラインのバッファに書き込まれます。呼び出し側が現在書き込める量を超えるデータを呼び出し側が書き込もうとすると (available 参照)、要求された量のデータが書き込まれるまで、このメソッドがブロックされます。これは、書き込み要求されたデータの量がデータラインのバッファサイズより大きい場合にも当てはまります。ただし、要求された量が書き込まれる前にデータラインがクローズ、停止、またはフラッシュされた場合は、メソッドはブロックされないでそれまでに書き込まれたバイト数を返します。

ブロックせずに書き込めるバイト数は、DataLine インタフェースの available メソッドを使って確認できます。このバイト数はブロックせずに確実に書き込めますが、追加データを書き込もうとするとブロックされるかどうかは確実ではありません。

書き込まれるバイト数は、次のようなサンプルフレームの整数を表示する必要があります。

[書き込まれるバイト数] % [フレームサイズのバイト数] == 0

戻り値は常にこの条件に適合します。サンプルフレームの整数以外を表示するバイト数を書き込むという要求は満たすことができないので、IllegalArgumentException が表示される場合があります。

パラメータ:
b - データラインに書き込まれるデータを含むバイト配列
len - バイト単位での配列の有効データの長さ (つまり、バイト単位での書き込み要求データの量)
戻り値:
実際に書き込まれるバイト数
例外:
IllegalArgumentException - 要求されたバイト数が完全なサンプルフレーム数に相当しない場合
関連項目:
TargetDataLine.read(byte[], int, int), DataLine.available()

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.