/*
 * Copyright (C) 2005-2006 Kouji Sugisawa. All rights reserved.
 */

package jp.sourceforge.livez.util;

/**
 * YAMAHA SMAF 形式のバージョンをあらわす列挙型です。<p>
 * 
 * @author 杉澤 浩二
 * @see <a href="http://smaf-yamaha.com/jp/">YAMAHA SMAF GLOBAL</a>
 */
public enum SMAFType {

	/**
	 * 音源LSIが最大4音を発音再生できる事を表します。<p>
	 */
	MA1,

	/**
	 * 音源LSIが最大16音を発音再生できる事を表します。<p>
	 */
	MA2,

	/**
	 * 音源LSIが最大40音を発音再生できる事を表します。<p>
	 */
	MA3,

	/**
	 * 音源LSIが最大64音を発音再生できる事を表します。<p>
	 */
	MA5,

	/**
	 * 音源LSIが最大128音を発音再生できる事を表します。<p>
	 */
	MA7;

	/**
	 * 指定された発音数から適切な列挙型定数を返します。<p>
	 * 発音数に合う列挙型定数が見つからない場合は <code>null</code> を返します。
	 * 
	 * @param i 最大発音数
	 * @return 指定された発音数に対応する列挙型定数
	 * @throws IllegalArgumentException
	 */
	public static SMAFType valueOf(final int i) throws IllegalArgumentException {
		if (i <= 4)
			return SMAFType.MA1;
		if (i <= 16)
			return SMAFType.MA2;
		if (i <= 40)
			return SMAFType.MA3;
		if (i <= 64)
			return SMAFType.MA5;
		if (i <= 128)
			return SMAFType.MA7;

		throw new IllegalArgumentException();
	}

}
