JavaTM 2 Platform
Standard Ed. 5.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
 
メソッドの概要
 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 2 Platform
Standard Ed. 5.0

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

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