JavaTM Platform
Standard Ed. 6

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
 
メソッドの概要
 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
 

メソッドの詳細

open

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

open

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

write

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

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

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

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

戻り値は常にこの条件を満たしています。サンプルフレームサイズの倍数以外のバイト数を書き込むという要求は実行できず、IllegalArgumentException がスローされる場合があります。

パラメータ:
b - データラインに書き込まれるデータを含むバイト配列
len - バイト単位での配列の有効データの長さ (つまり、バイト単位での書き込み要求データの量)
off - 配列の先頭からの座標、バイト単位
戻り値:
実際に書き込まれるバイト数
例外:
IllegalArgumentException - 要求されたバイト数が サンプルフレームサイズの倍数でない場合、 または len が負の値の場合
ArrayIndexOutOfBoundsException - off が負の値の場合、 または off+len が配列 b の長さより大きい場合
関連項目:
TargetDataLine.read(byte[], int, int), DataLine.available()

JavaTM Platform
Standard Ed. 6

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

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。