4 * License : The MIT License
5 * Copyright(c) 2011 MikuToga Partners
8 package jp.sourceforge.mikutoga.vmd;
10 import java.nio.charset.Charset;
15 public final class VmdConst {
20 public static final int HEADER_LENGTH = 30;
23 * ファイルヘッダ部先頭のASCIIコード相当部。
25 public static final String MAGIC_TXT = "Vocaloid Motion Data 0002";
30 public static final int MODELNAME_MAX = 20;
35 public static final int BONENAME_MAX = 15;
40 public static final int MORPHNAME_MAX = 15;
43 * カメラもしくはライティングデータに便宜上割り当てられるモデル名。
45 public static final String MODELNAME_STAGEACT =
46 "\u30ab\u30e1\u30e9\u30fb\u7167\u660e"; // "カメラ・照明";
51 public static final String MORPHNAME_BASE = "base";
54 * ボーンモーションデータの個別サイズ。バイト単位。
56 public static final int BONEMOTION_DATA_SZ = 111;
61 public static final int MORPH_DATA_SZ = 23;
66 public static final int CAMERA_DATA_SZ = 61;
71 public static final int LUMINOUS_DATA_SZ = 28;
76 public static final int SHADOW_DATA_SZ = 9;
79 private static final Charset CS_ASCII = Charset.forName("US-ASCII");
80 private static final byte[] MAGIC_BYTES;
84 MAGIC_BYTES = createMagicHeader();
85 assert MAGIC_BYTES.length <= HEADER_LENGTH;
87 assert "カメラ・照明".equals(MODELNAME_STAGEACT);
97 throw new AssertionError();
101 * ヘッダ先頭のマジックバイト列を生成する。
104 public static byte[] createMagicHeader(){
105 byte[] result = (MAGIC_TXT + '\0').getBytes(CS_ASCII);
110 * バイト列先頭がマジックヘッダで始まるか検査する。
111 * @param array 検査対象のバイト列。
112 * @return マジックヘッダが検出されればtrue。
114 public static boolean startsWithMagic(byte[] array){
115 if(MAGIC_BYTES.length > array.length) return false;
117 for(int idx = 0; idx < MAGIC_BYTES.length; idx++){
118 if(array[idx] != MAGIC_BYTES[idx]) return false;
125 * カメラやライティングなどのステージ演出データの可能性があるか、
127 * モデル名が"カメラ・照明"である場合、
129 * カメラ・ライティング用ステージ演出データであると推測される。
130 * @param modelName モデル名
131 * @return モデル名にカメラもしくはライティングの可能性があるならtrue
133 public static boolean isStageActName(String modelName){
134 if(MODELNAME_STAGEACT.equals(modelName)) return true;
139 * 特殊なモーフ名「base」か否か判定する。
140 * @param morphName モーフ名
141 * @return モーフ名が「base」ならtrue
143 public static boolean isBaseMorphName(String morphName){
144 if(MORPHNAME_BASE.equals(morphName)) return true;