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 private static final Charset CS_ASCII = Charset.forName("US-ASCII");
55 private static final byte[] MAGIC_BYTES;
59 MAGIC_BYTES = createMagicHeader();
60 assert MAGIC_BYTES.length <= HEADER_LENGTH;
62 assert "カメラ・照明".equals(MODELNAME_STAGEACT);
72 throw new AssertionError();
76 * ヘッダ先頭のマジックバイト列を生成する。
79 public static byte[] createMagicHeader(){
80 byte[] result = (MAGIC_TXT + '\0').getBytes(CS_ASCII);
85 * バイト列先頭がマジックヘッダで始まるか検査する。
86 * @param array 検査対象のバイト列。
87 * @return マジックヘッダが検出されればtrue。
89 public static boolean startsWithMagic(byte[] array){
90 if(MAGIC_BYTES.length > array.length) return false;
92 for(int idx = 0; idx < MAGIC_BYTES.length; idx++){
93 if(array[idx] != MAGIC_BYTES[idx]) return false;
100 * カメラやライティングなどのステージ演出データの可能性があるか、
102 * モデル名が"カメラ・照明"である場合、
104 * カメラ・ライティング用ステージ演出データであると推測される。
105 * @param modelName モデル名
106 * @return モデル名にカメラもしくはライティングの可能性があるならtrue
108 public static boolean isStageActName(String modelName){
109 if(MODELNAME_STAGEACT.equals(modelName)) return true;
114 * 特殊なモーフ名「base」か否か判定する。
115 * @param morphName モーフ名
116 * @return モーフ名が「base」ならtrue
118 public static boolean isBaseMorphName(String morphName){
119 if(MORPHNAME_BASE.equals(morphName)) return true;