JavaTM 2 Platform
Standard Ed. 5.0

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

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

public interface TargetDataLine
extends DataLine

ターゲットデータラインは、オーディオデータをそこから読み込めるタイプの DataLine です。もっとも一般的な例は、データをオーディオキャプチャデバイスから取得するデータラインです。デバイスはターゲットデータラインに書き込むミキサーとして実装されます。

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

ターゲットデータラインをミキサーから取得するには、適切な DataLine.Info オブジェクトを指定して MixergetLine メソッドを呼び出します。

TargetDataLine インタフェースは、ターゲットデータラインのバッファから取得したデータを読み込むメソッドを提供します。オーディオを録音するアプリケーションは、バッファがオーバーフローしないようにターゲットデータラインからデータを素早く読み込みます。オーバーフローすると、取得したデータに不連続部が生じて、クリック音が聞こえることがあります。アプリケーションでは、DataLine インタフェースで定義されている available メソッドを使用して、データラインのバッファで現在キューに入っているデータの量を判別することができます。バッファがオーバーフローを起こした場合、キューに入っているもっとも古いデータが破棄されて新しいデータに置き換えられます。

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

入れ子のクラスの概要
 
インタフェース javax.sound.sampled.DataLine から継承された入れ子のクラス/インタフェース
DataLine.Info
 
メソッドの概要
 void open(AudioFormat format)
          指定された形式でラインを開き、ラインが必要なシステムリソースを獲得して操作可能になるようにします。
 void open(AudioFormat format, int bufferSize)
          指定されたフォーマットと指定されたバッファサイズでラインを開き、ラインが必要なシステムリソースを獲得して操作可能になるようにします。
 int read(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

read

int read(byte[] b,
         int off,
         int len)
データラインの入力バッファからオーディオデータを読み込みます。要求されたバイト数が、指定された配列の指定されたオフセット位置 (バイト単位) を始点として読み込まれます。このメソッドは、要求された量のデータを読み込み終えるまでブロックされます。ただし、要求された量が読み込まれる前にデータラインがクローズ、停止、排出、またはフラッシュされると、メソッドのブロックが解除され、それまでに読み込まれたバイト数が返されます。

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

読み込むバイト数は、サンプルフレームサイズの倍数であることが必要です。つまり、次の条件を満たしている必要があります。

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

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

パラメータ:
b - このメソッドが戻るときに要求された入力データを含んでいるバイト配列
off - 配列の先頭からのオフセット、バイト単位
len - 読み込みを要求されたバイト数
戻り値:
実際に読み込まれたバイト数
例外:
IllegalArgumentException - 要求されたバイト数がサンプルフレームサイズの倍数でない場合、または len が負の場合
ArrayIndexOutOfBoundsException - off が負の場合、または off+len が配列 b の長さより大きい場合
関連項目:
SourceDataLine.write(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 も参照してください。