package gnu.javax.sound.sampled.wce;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Line;

public abstract class WCEDataLine extends WCELine implements DataLine {
	/**
	 * 現在のフォーマット
	 */
	private AudioFormat audioFormat;

	/**
	 * 走行中かどうか
	 */
	private boolean runningFlag;
	
	public WCEDataLine(DataLine.Info info) {
		super(info);
	}
	
	public boolean isRunning() {
		return this.runningFlag;
	}

	public void start() {
		this.runningFlag = true;
	}
	
	public void stop() {
		this.runningFlag = false;
	}
	
	/**
	 * 現在のフォーマットを設定する
	 */
	protected void setFormat(AudioFormat format) {
		this.audioFormat = format;
	}
	
	public AudioFormat getFormat() {
		AudioFormat result = null;
		if (this.audioFormat != null) {
			result = this.audioFormat;
		} else {
			Line.Info info = getLineInfo();
			if (info instanceof DataLine.Info) {
				DataLine.Info dinfo = (DataLine.Info) info;
				AudioFormat[] formats = dinfo.getFormats();
				if (formats.length > 0) {
					// 最後のフォーマットを設定する
					result = formats[formats.length - 1];
				}
			}
		}
		if (result == null) {
			result = getDefaultFormat();
		}
		return result;
	}
	
	/**
	 * デフォルトのオーディオフォーマットを返す
	 */
	protected static AudioFormat getDefaultFormat() {
		return new AudioFormat(8000.0f,		// 8KHz
							   8,			// 8ビット
							   1,			// モノラル
							   false,		// 符号なし
							   false);		// リトルエンディアン
	}
	
}
