diff --git a/mml2vgm/Core/Core.csproj b/mml2vgm/Core/Core.csproj
index 1ecfce83..4f3c0c96 100644
--- a/mml2vgm/Core/Core.csproj
+++ b/mml2vgm/Core/Core.csproj
@@ -60,6 +60,7 @@
+
diff --git a/mml2vgm/Core/clsVgm.cs b/mml2vgm/Core/clsVgm.cs
index b7c06880..c8f1d87a 100644
--- a/mml2vgm/Core/clsVgm.cs
+++ b/mml2vgm/Core/clsVgm.cs
@@ -127,6 +127,7 @@ public ClsVgm(string stPath)
public int Analyze(List src)
{
+ log.Write("テキスト解析開始");
lineNumber = 0;
bool multiLine = false;
@@ -232,6 +233,7 @@ public int Analyze(List src)
}
}
+ log.Write("テキスト解析完了");
return 0;
}
@@ -1144,10 +1146,12 @@ public byte[] GetByteData()
{
if (userClockCount != 0) clockCount = userClockCount;
+ log.Write("パート情報の初期化");
PartInit();
dat = new List();
+ log.Write("ヘッダー情報作成");
MakeHeader();
int endChannel = 0;
@@ -1155,55 +1159,59 @@ public byte[] GetByteData()
int totalChannel = 0;
foreach (ClsChip chip in chips) totalChannel += chip.ChMax;
+ log.Write("MML解析開始");
do
{
-
foreach (ClsChip chip in chips)
{
+ log.Write(string.Format("Chip [{0}]", chip.Name));
+
foreach (partWork pw in chip.lstPartWork)
{
//未使用のパートの場合は処理を行わない
if (!pw.chip.use) continue;
+ log.Write("pcm sound off");
+
//pcm sound off
if (pw.pcmWaitKeyOnCounter == 0)
{
pw.pcmWaitKeyOnCounter = -1;
}
- //KeyOff
+ log.Write("KeyOff");
ProcKeyOff(pw);
- //Bend
+ log.Write("Bend");
ProcBend(pw);
- //Lfo
+ log.Write("Lfo");
ProcLfo(pw);
- //Envelope
+ log.Write("Envelope");
ProcEnvelope(pw);
- //wait消化待ち
+ log.Write("wait消化待ち");
if (pw.waitCounter > 0)
{
continue;
}
- //データは最後まで実施されたか
+ log.Write("データは最後まで実施されたか");
if (pw.dataEnd)
{
continue;
}
- //パートのデータがない場合は何もしないで次へ
+ log.Write("パートのデータがない場合は何もしないで次へ");
if (!partData.ContainsKey(pw.PartName) || partData[pw.PartName] == null || partData[pw.PartName].Count < 1)
{
pw.dataEnd = true;
continue;
}
- //コマンド毎の処理を実施
+ log.Write("コマンド毎の処理を実施");
while (pw.waitCounter == 0 && !pw.dataEnd)
{
char cmd = pw.getChar();
@@ -1220,8 +1228,7 @@ public byte[] GetByteData()
}
- //channelを跨ぐコマンド向け処理
-
+ log.Write("channelを跨ぐコマンド向け処理");
if (chip is YM2608 && chip.use)
{
((YM2608)chip).MultiChannelCommand();
@@ -1240,7 +1247,7 @@ public byte[] GetByteData()
}
- // 全パートのうち次のコマンドまで一番近い値を求める
+ log.Write("全パートのうち次のコマンドまで一番近い値を求める");
long cnt = long.MaxValue;
foreach (ClsChip chip in chips)
{
@@ -1307,6 +1314,7 @@ public byte[] GetByteData()
}
+ log.Write("全パートのwaitcounterを減らす");
if (cnt != long.MaxValue)
{
@@ -1374,6 +1382,7 @@ public byte[] GetByteData()
}
+ log.Write("終了パートのカウント");
endChannel = 0;
foreach (ClsChip chip in chips)
{
@@ -1388,6 +1397,7 @@ public byte[] GetByteData()
} while (endChannel < totalChannel);
+ log.Write("フッター情報の作成");
MakeFooter();
@@ -2293,94 +2303,124 @@ private void Commander(partWork pw, char cmd)
pw.incPos();
break;
case '!': // CompileSkip
+ log.Write("CompileSkip");
pw.dataEnd = true;
pw.waitCounter = -1;
break;
case 'T': // tempo
+ log.Write(" tempo");
CmdTempo(pw);
break;
case '@': // instrument
+ log.Write("instrument");
CmdInstrument(pw);
break;
case 'v': // volume
+ log.Write("volume");
CmdVolume(pw);
break;
case 'V': // totalVolume(Adpcm-A / Rhythm)
+ log.Write("totalVolume(Adpcm-A / Rhythm)");
CmdTotalVolume(pw);
break;
case 'o': // octave
+ log.Write("octave");
CmdOctave(pw);
break;
case '>': // octave Up
+ log.Write("octave Up");
CmdOctaveUp(pw);
break;
case '<': // octave Down
+ log.Write("octave Down");
CmdOctaveDown(pw);
break;
case ')': // volume Up
+ log.Write(" volume Up");
CmdVolumeUp(pw);
break;
case '(': // volume Down
+ log.Write("volume Down");
CmdVolumeDown(pw);
break;
case 'l': // length
+ log.Write("length");
CmdLength(pw);
break;
case '#': // length(clock)
+ log.Write("length(clock)");
CmdClockLength(pw);
break;
case 'p': // pan
+ log.Write(" pan");
CmdPan(pw);
break;
case 'D': // Detune
+ log.Write("Detune");
CmdDetune(pw);
break;
case 'm': // pcm mode
+ log.Write("pcm mode");
CmdMode(pw);
break;
case 'q': // gatetime
+ log.Write(" gatetime q");
CmdGatetime(pw);
break;
case 'Q': // gatetime
+ log.Write("gatetime Q");
CmdGatetime2(pw);
break;
case 'E': // envelope
+ log.Write("envelope");
CmdEnvelope(pw);
break;
case 'L': // loop point
+ log.Write(" loop point");
CmdLoop(pw);
break;
case '[': // repeat
+ log.Write("repeat [");
CmdRepeatStart(pw);
break;
case ']': // repeat
+ log.Write("repeat ]");
CmdRepeatEnd(pw);
break;
case '{': // renpu
+ log.Write("renpu {");
CmdRenpuStart(pw);
break;
case '}': // renpu
+ log.Write("renpu }");
CmdRenpuEnd(pw);
break;
case '/': // repeat
+ log.Write("repeat /");
CmdRepeatExit(pw);
break;
case 'M': // lfo
+ log.Write("lfo");
CmdLfo(pw);
break;
case 'S': // lfo switch
+ log.Write(" lfo switch");
CmdLfoSwitch(pw);
break;
case 'y': // y
+ log.Write(" y");
CmdY(pw);
break;
case 'w': // noise
+ log.Write("noise");
CmdNoise(pw);
break;
case 'P': // noise or tone mixer
+ log.Write("noise or tone mixer");
CmdMixer(pw);
break;
case 'K': // key shift
+ log.Write("key shift");
CmdKeyShift(pw);
break;
case 'c':
@@ -2391,6 +2431,7 @@ private void Commander(partWork pw, char cmd)
case 'a':
case 'b':
case 'r':
+ log.Write(string.Format("note {0}", cmd));
CmdNote(pw, cmd);
break;
default:
@@ -4280,14 +4321,16 @@ private void CmdPan(partWork pw)
msgBox.setErrMsg("不正なパン'p'が指定されています。", pw.getSrcFn(), pw.getLineNumber());
n = 3;
}
- //強制的にモノラルにする
- if (monoPart != null && monoPart.Contains(ym2612[0].Ch[5].Name))
- {
- n = 3;
- }
n = Common.CheckRange(n, 1, 3);
pw.pan.val = (n == 1) ? 2 : (n == 2 ? 1 : n);
- ((YM2151)pw.chip).OutSetPanFeedbackAlgorithm(pw, (int)pw.pan.val, instFM[pw.instrument][46], instFM[pw.instrument][45]);
+ if (pw.instrument < 0)
+ {
+ msgBox.setErrMsg("音色指定前にパンは指定できません。", pw.getSrcFn(), pw.getLineNumber());
+ }
+ else
+ {
+ ((YM2151)pw.chip).OutSetPanFeedbackAlgorithm(pw, (int)pw.pan.val, instFM[pw.instrument][46], instFM[pw.instrument][45]);
+ }
}
else if (pw.chip is YM2203)
{
@@ -4308,11 +4351,6 @@ private void CmdPan(partWork pw)
msgBox.setErrMsg("不正なパン'p'が指定されています。", pw.getSrcFn(), pw.getLineNumber());
n = 3;
}
- //強制的にモノラルにする
- if (monoPart != null && monoPart.Contains(ym2612[0].Ch[5].Name))
- {
- n = 3;
- }
n = Common.CheckRange(n, 1, 3);
pw.pan.val = n;
OutOPNSetPanAMSPMS(pw, n, pw.ams, pw.fms);
@@ -4353,11 +4391,6 @@ private void CmdPan(partWork pw)
msgBox.setErrMsg("不正なパン'p'が指定されています。", pw.getSrcFn(), pw.getLineNumber());
n = 3;
}
- //強制的にモノラルにする
- if (monoPart != null && monoPart.Contains(ym2612[0].Ch[5].Name))
- {
- n = 3;
- }
n = Common.CheckRange(n, 1, 3);
pw.pan.val = n;
OutOPNSetPanAMSPMS(pw, n, pw.ams, pw.fms);
@@ -5261,7 +5294,7 @@ private void CmdLfo(partWork pw)
pw.lfo[c].param[0] = Common.CheckRange(pw.lfo[c].param[0], 0, (int)clockCount);
pw.lfo[c].param[1] = Common.CheckRange(pw.lfo[c].param[1], 1, 255);
pw.lfo[c].param[2] = Common.CheckRange(pw.lfo[c].param[2], -32768, 32787);
- pw.lfo[c].param[3] = Math.Abs(Common.CheckRange(pw.lfo[c].param[3], -32768, 32787));
+ pw.lfo[c].param[3] = Math.Abs(Common.CheckRange(pw.lfo[c].param[3], 0, 32787));
if (pw.lfo[c].param.Count > 4)
{
pw.lfo[c].param[4] = Common.CheckRange(pw.lfo[c].param[4], 0, 4);
@@ -5281,10 +5314,11 @@ private void CmdLfo(partWork pw)
if (pw.lfo[c].param.Count > 6)
{
pw.lfo[c].param[6] = Common.CheckRange(pw.lfo[c].param[6], -32768, 32787);
+ if (pw.lfo[c].param[6] == 0) pw.lfo[c].param[6] = 1;
}
else
{
- pw.lfo[c].param.Add(0);
+ pw.lfo[c].param.Add(1);
}
}
@@ -5407,6 +5441,12 @@ private void CmdLfoSwitch(partWork pw)
//解析 ここまで
+ //LFOの設定値をチェック
+ if (n != 0 && !CheckLFOParam(pw, (int)c))
+ {
+ return;
+ }
+
pw.lfo[c].sw = (n == 0) ? false : true;
//即時有効になるタイプのHardLFOの処理
@@ -5448,6 +5488,17 @@ private void CmdLfoSwitch(partWork pw)
}
+ private bool CheckLFOParam(partWork pw, int c)
+ {
+ if (pw.lfo[c].param == null)
+ {
+ msgBox.setErrMsg("指定されたLFOのパラメータが未指定です。", pw.getSrcFn(), pw.getLineNumber());
+ return false;
+ }
+
+ return false;
+ }
+
private void CmdMAMS(partWork pw)
{
if (!( (pw.chip is YM2151) || (pw.chip is YM2608) || (pw.chip is YM2610B) || (pw.chip is YM2612) || (pw.chip is YM2612X)))
diff --git a/mml2vgm/Core/log.cs b/mml2vgm/Core/log.cs
new file mode 100644
index 00000000..de4f09a8
--- /dev/null
+++ b/mml2vgm/Core/log.cs
@@ -0,0 +1,147 @@
+using System;
+using System.Reflection;
+using System.Text;
+using System.IO;
+
+namespace Core
+{
+ public static class log
+ {
+ public static string path = "";
+ public static bool debug = false;
+ public static StreamWriter writer;
+
+ public static void ForcedWrite(string msg)
+ {
+ try
+ {
+ if (path == "")
+ {
+ string fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
+ fullPath = Path.Combine(fullPath, "KumaApp", AssemblyTitle);
+ if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath);
+ path = Path.Combine(fullPath, "log.txt");
+ if (File.Exists(path)) File.Delete(path);
+ }
+
+ DateTime dtNow = DateTime.Now;
+ string timefmt = dtNow.ToString("yyyy/MM/dd HH:mm:ss\t");
+
+ Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
+ using (StreamWriter writer = new StreamWriter(path, true, sjisEnc))
+ {
+ writer.WriteLine(timefmt + msg);
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ public static void ForcedWrite(Exception e)
+ {
+ try
+ {
+ if (path == "")
+ {
+ string fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
+ fullPath = Path.Combine(fullPath, "KumaApp", AssemblyTitle);
+ if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath);
+ path = Path.Combine(fullPath, "log.txt");
+ if (File.Exists(path)) File.Delete(path);
+ }
+
+ DateTime dtNow = DateTime.Now;
+ string timefmt = dtNow.ToString("yyyy/MM/dd HH:mm:ss\t");
+
+ Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
+ using (StreamWriter writer = new StreamWriter(path, true, sjisEnc))
+ {
+ string msg = string.Format("例外発生:\r\n- Type ------\r\n{0}\r\n- Message ------\r\n{1}\r\n- Source ------\r\n{2}\r\n- StackTrace ------\r\n{3}\r\n", e.GetType().Name, e.Message, e.Source, e.StackTrace);
+ Exception ie = e;
+ while (ie.InnerException != null)
+ {
+ ie = ie.InnerException;
+ msg += string.Format("内部例外:\r\n- Type ------\r\n{0}\r\n- Message ------\r\n{1}\r\n- Source ------\r\n{2}\r\n- StackTrace ------\r\n{3}\r\n", ie.GetType().Name, ie.Message, ie.Source, ie.StackTrace);
+ }
+
+ writer.WriteLine(timefmt + msg);
+ System.Console.WriteLine(msg);
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ public static void Write(string msg)
+ {
+ if (!debug)
+ {
+ return;
+ }
+
+ try
+ {
+ if (path == "")
+ {
+ string fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
+ fullPath = Path.Combine(fullPath, "KumaApp", AssemblyTitle);
+ if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath);
+ path = Path.Combine(fullPath, "log.txt");
+ if (File.Exists(path)) File.Delete(path);
+ }
+
+ DateTime dtNow = DateTime.Now;
+ string timefmt = dtNow.ToString("yyyy/MM/dd HH:mm:ss\t");
+
+ Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
+ if (writer == null)
+ {
+ writer = new StreamWriter(path, true, sjisEnc);
+ }
+ writer.WriteLine(timefmt + msg);
+ writer.Flush();
+ }
+ catch
+ {
+ }
+ }
+
+ public static void Open()
+ {
+ if (path == "")
+ {
+ string fullPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
+ fullPath = Path.Combine(fullPath, "KumaApp", AssemblyTitle);
+ if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath);
+ path = Path.Combine(fullPath, "log.txt");
+ if (File.Exists(path)) File.Delete(path);
+ }
+ Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
+ writer = new StreamWriter(path, true, sjisEnc);
+ }
+
+ public static void Close()
+ {
+ writer.Close();
+ }
+
+ public static string AssemblyTitle
+ {
+ get
+ {
+ object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
+ if (attributes.Length > 0)
+ {
+ AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
+ if (titleAttribute.Title != "")
+ {
+ return titleAttribute.Title;
+ }
+ }
+ return Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
+ }
+ }
+ }
+}
diff --git a/mml2vgm/Core/mml2vgm.cs b/mml2vgm/Core/mml2vgm.cs
index d4022aa6..a6670b9f 100644
--- a/mml2vgm/Core/mml2vgm.cs
+++ b/mml2vgm/Core/mml2vgm.cs
@@ -45,7 +45,10 @@ public int Start()
try
{
+ log.Write("start mml2vgm core");
+
// ファイル存在チェック
+ log.Write("ファイル存在チェック");
if (!File.Exists(srcFn))
{
msgBox.setErrMsg("ファイルが見つかりません。");
@@ -53,11 +56,14 @@ public int Start()
}
// ファイルの読み込み
+ log.Write("ファイルの読み込み");
string[] srcBuf = File.ReadAllLines(srcFn);
string path = Path.GetDirectoryName(Path.GetFullPath(srcFn));
+ log.Write("clsVgmインスタンス作成");
desVGM = new ClsVgm(stPath);
+ log.Write("mmlファイルの整形");
List src = new List();
int ln = 1;
foreach (string s in srcBuf)
@@ -93,9 +99,12 @@ public int Start()
}
// 解析
+ log.Write("テキスト解析開始(start clsVGM)");
int ret;
ret= desVGM.Analyze(src);
+ log.Write("テキスト解析完了(end clsVGM)");
+
if (ret != 0)
{
msgBox.setErrMsg(string.Format("想定外のエラー ソース解析に失敗?(analyze)(line:{0})", desVGM.lineNumber));
@@ -103,14 +112,18 @@ public int Start()
}
// PCM定義あり?
+ log.Write("PCM定義あり?");
if (desVGM.instPCM.Count > 0)
{
+ log.Write("PCM取得");
GetPCMData(path);
+ log.Write("PCM取得完了");
}
// 解析した情報をもとにVGMファイル作成
byte[] desBuf;
+ log.Write("MML解析開始(start GetByteData)");
if (desVGM.format == enmFormat.VGM)
{
desBuf = desVGM.GetByteData();
@@ -119,7 +132,8 @@ public int Start()
{
desBuf = desVGM.Xgm_getByteData();
}
-
+ log.Write("MML解析完了(start GetByteData)");
+
if (desBuf == null)
{
@@ -132,11 +146,13 @@ public int Start()
{
if (desVGM.format == enmFormat.VGM)
{
+ log.Write("VGMファイル出力");
// ファイル出力
File.WriteAllBytes(desFn, desBuf);
}
else
{
+ log.Write("XGMファイル出力");
//XGM
// ファイル出力
File.WriteAllBytes(Path.Combine(Path.GetDirectoryName(desFn), Path.GetFileNameWithoutExtension(desFn) + ".xgm"), desBuf);
@@ -144,6 +160,7 @@ public int Start()
}
else
{
+ log.Write("VGZファイル出力");
int num;
byte[] buf = new byte[1024];
@@ -186,6 +203,10 @@ public int Start()
msgBox.setErrMsg(string.Format("想定外のエラー line:{0} \r\nメッセージ:\r\n{1}\r\nスタックトレース:\r\n{2}\r\n", desVGM.lineNumber, ex.Message, ex.StackTrace));
return -1;
}
+ finally
+ {
+ log.Write("end mml2vgm core");
+ }
}
private void GetPCMData(string path)
diff --git a/mml2vgm/mml2vgm/frmMain.cs b/mml2vgm/mml2vgm/frmMain.cs
index 8d188a65..38f6b8e6 100644
--- a/mml2vgm/mml2vgm/frmMain.cs
+++ b/mml2vgm/mml2vgm/frmMain.cs
@@ -20,6 +20,7 @@ public partial class frmMain : Form
public frmMain()
{
InitializeComponent();
+ Core.log.debug = false;
}
private void frmMain_Shown(object sender, EventArgs e)
@@ -181,6 +182,9 @@ private void finishedCompile()
private void startCompile()
{
+ Core.log.Open();
+ Core.log.Write("start compile thread");
+
Action dmy = updateTitle;
string stPath = System.Windows.Forms.Application.StartupPath;
@@ -192,9 +196,12 @@ private void startCompile()
continue;
}
+
title = Path.GetFileName( arg);
this.Invoke(dmy);
+ Core.log.Write(string.Format(" compile at [{0}]", args[i]));
+
msgBox.clear();
string desfn = Path.ChangeExtension(arg, Properties.Resources.ExtensionVGM);
@@ -202,17 +209,26 @@ private void startCompile()
{
desfn = Path.ChangeExtension(arg, Properties.Resources.ExtensionVGZ);
}
+
+ Core.log.Write("Call mml2vgm core");
+
mv = new Mml2vgm(arg, desfn, stPath);
if (mv.Start() != 0)
{
isSuccess = false;
break;
}
+
+ Core.log.Write("Return mml2vgm core");
}
+ Core.log.Write("Disp Result");
+
dmy = finishedCompile;
this.Invoke(dmy);
+ Core.log.Write("end compile thread");
+ Core.log.Close();
}
private void startWatch()
diff --git a/mml2vgm/mml2vgm/sample/test.gwi b/mml2vgm/mml2vgm/sample/test.gwi
index 4561e6a5..82252299 100644
--- a/mml2vgm/mml2vgm/sample/test.gwi
+++ b/mml2vgm/mml2vgm/sample/test.gwi
@@ -1,15 +1,15 @@
'{
TitleName =
- TitleNameJ =だって、ギュってして。
+ TitleNameJ =
GameName =
- GameNameJ =anime「くまみこ」OP TV Size
+ GameNameJ =
SystemName =
SystemNameJ =Sega MegaDrive
Composer =
- ComposerJ =ボンジュール鈴木
- ReleaseDate =2016/05/21
- Converted =Kuma
+ ComposerJ =
+ ReleaseDate =
+ Converted =
Notes =
ClockCount =192
@@ -26,91 +26,8 @@ base (from Ordyne)
'@ 031,006,000,008,014,000,000,000,000,000,000
'@ 003,007
-xylophone (from DragonSpirit)
-'@ M 004
- AR DR SR RR SL TL KS ML DT AM SSG-EG
-'@ 027,024,021,015,005,023,000,001,000,000,000
-'@ 031,013,000,008,015,000,000,001,000,000,000
-'@ 031,031,000,015,003,022,000,001,000,000,000
-'@ 031,016,000,006,015,000,001,001,000,000,000
-'@ 004,007
-
-bell (from DragonSpirit)
-'@ M 005
- AR DR SR RR SL TL KS ML DT AM SSG-EG
-'@ 027,004,000,006,015,025,002,003,003,000,000
-'@ 031,007,000,007,015,000,001,001,000,000,000
-'@ 031,007,000,004,014,039,000,014,007,000,000
-'@ 031,008,000,007,015,011,000,004,007,000,000
-'@ 004,006
-
-bell (from Sonic The Hedgehog)
-'@ M 007
- AR DR SR RR SL TL KS ML DT AM SSG-EG
-'@ 027,004,000,015,015,035,001,003,003,000,000
-'@ 031,007,000,015,015,000,002,001,004,000,000
-'@ 031,007,000,015,014,041,001,014,007,000,000
-'@ 031,008,000,015,015,007,000,004,007,000,000
- ALG FB
-'@ 004,006
-
-Brass2op (from Gauntlet IV + Arrange)
-'@ M 008
- AR DR SR RR SL TL KS ML DT AM SSG-EG
-'@ 031,016,001,005,003,016,000,004,007,000,000
-'@ 031,000,003,007,000,000,000,008,007,000,000
-'@ 031,016,001,006,002,014,000,004,003,000,000
-'@ 031,011,003,007,000,006,000,008,003,000,000
- ALG FB
-'@ 004,007
-
-Chord2op (from SCHEME + Arrange)
-'@ M 009
- AR DR SR RR SL TL KS ML DT AM SSG-EG
-'@ 027,005,006,000,001,036,000,004,000,000,000
-'@ 018,006,001,007,003,000,000,004,003,000,000
-'@ 027,005,006,000,001,036,000,004,000,000,000
-'@ 018,006,001,007,003,000,000,004,003,000,000
- ALG FB
-'@ 004,005
-
-BD (from Gauntlet IV)
-'@ M 010
- AR DR SR RR SL TL KS ML DT AM SSG-EG
-'@ 031,028,004,001,015,000,000,007,000,000,000
-'@ 028,023,017,008,000,000,000,001,006,000,000
-'@ 028,024,019,008,007,014,000,003,007,000,000
-'@ 031,005,013,008,001,000,000,000,002,000,000
- ALG FB
-'@ 000,002
-
-CHORD (from 魔導物語I)
-'@ M 011
- AR DR SR RR SL TL KS ML DT AM SSG-EG
-'@ 031,000,000,000,000,020,000,002,000,000,000
-'@ 015,010,000,006,015,005,000,002,001,000,000
-'@ 031,000,000,000,000,035,000,001,007,000,000
-'@ 020,000,000,006,000,000,000,001,000,000,000
- ALG FB
-'@ 004,006
-
-
No, SV, AR, DR, SL, SR, RR, ST
'@ E 0, 13, 1, 5, 11, 34, 24, 1
-'@ E 1, 13, 1, 5, 11, 10, 8, 1
-'@ E 2, 13, 3, 5, 11, 40, 48, 1
-'@ E 3, 14, 2, 5, 11, 80, 2, 1
-'@ E 4, 14, 1, 5, 11, 80, 0, 1
-
-'@ E 10, 15, 0, 1, 10, 4, 1, 3
-'@ E 11, 15, 0, 5, 13, 3, 1, 3
-'@ E 12, 15, 0, 1, 10, 2, 1, 4
-'@ E 13, 15, 0, 12, 9, 6, 1, 1
-
-
-'%HC @12 c
-'%CL @11 c
-
'F1 T138
@@ -122,221 +39,5 @@ S1-4 !
-'F12 @7o6l8v113p1q0D0
-'F2 v103p3D4
-'F1 beaeg+eab4rr2.(3
-'F2 beaeg+eab4&br2.(3
-'F2 r16p2
-'F12 [beaeg+eab& bed+ebed+e
-'F12 beaeg+e/ag+&g+af+4>c4d+4c+4<
-'F12 g+2rg+4f+& f+2g4f+4
-'F12 g+2rr4g+& g+4.g+4.>d+4c+2de4 g.f+.d<)1b.)1f+.)2d
-'F12 @4p1l8<(3
-'F2 p3
-'F12 gb>df+ r2 rc+ea r2 rc+ r2 e.e.d+ r2
-'F12 c+rrc+ drrf+&f+df+ err2. r1
-'F12 @7o6l8v107p1q0D0
-'F2 v97p2D4r16
-'F12 [beaeg+eaebed+ebed+e beaeg+eae/beaef+eae]beaeg+ef+e
-'F12 [beaeg+eaebed+ebed+e beaeg+eae beaef+eae]
-'F12 [beaeg+eab& bed+ebed+e
-'F12 beaeg+e/ag+&g+af+4>c4d+4.
-'F3 c+2 c1&[c4&)3]3c4(6
-'F3 q0@9MSV24,4,6,12,0SS1
-'F3 f+1 a2a4g4 f+2a2 b.b.b4 rf+4
-'F3 grrg arra b4.g4.b4 a4a4a4a4 aaaa )3bbbb(3
-'F3 [ g+2.a4 g+1 g+2.a4 f+2a2 g+1 / g+2f+2 e2.f+4 a2g+ab4 ] g+2.g+a& a1 g+2f+2
-'F3 @8EONEX12 l8v110p3Q6o4SS0
-'F3 [d+e(6e)6d+e(6e)6d+e (6e)6d+e(6e)6 r2 d+e(6e)6d+e(6e)6d+e / (6e)6d+e(6e)6 r2 ]r1r1
-
-
-'F7 EONEX34 l8v107 Q6o3SS0
-'F7 r1r1
-'F7 [bb(6b)6bb(6b)6bb (6b)6bb(6b)6b4b4 bb(6b)6bb(6b)6bb / (6b)6bb(6b)6b4b4]r1)3
-'F7 g+rr4rg+rg+ r1
-'F7 g+rr4rg+rb r1
-'F7 g+rr4rg+rg+ r4.g+4b4.
-'F7 f+2g+2 a1&[a4&)3]3a4(9
-'F7 q0>MSV24,4,6,12,0SS1
-'F7 a1 >c+2c+4c+2 e.e.d+4 rdf+ e1 e2)3f+2(9(3
-'F7 [ e2.f+4 e1 e2.f+4 d+2f+2 e1 / e2d+2 c+2.d+4 f+2ef+g+4 ] e2.ee& e1 e2d+2
-'F7 EONEX34 l8v110 Q6o3SS0
-'F7 [bb(6b)6bb(6b)6bb (6b)6bb(6b)6 r2 bb(6b)6bb(6b)6bb / (6b)6bb(6b)6 r2 ]r1r1
-
-
-'F4 @7o6l8v100p2q0D-2SS0
-'F4 beaeg+eab4rr2.
-'F4 @11v115l8p2q0D0o6SS0
-'F4 [d+e(6e)6d+e(6e)6d+e (6e)6d+e(6e)6f+4e4 d+e(6e)6d+e(6e)6d+e / (6e)6d+e(6e)6g4f+4] r1
-'F4 (15
-'F4 d+rr4rd+rc+ r4.p3)3e16g+16>d+4c+4<(3p2
-'F4 d+rr4rd+rd+ r2p3)3g4f+4(3p2
-'F4 d+rr4rd+rc+ r4.d+4.
-'F4 c+2 c1&[c4&)3]3c4
-'F4 q0MSV48,2,5,20,0SS1p3(15<
-'F4 f+1 a2a4g4 f+2a2 b.b.b4 rf+4
-'F4 grrg arra b4.g4.b4 a4a4a4a4 p2>)15e4d+4f+4d+4
-'F4 g+1c+2.d+4e2.a4g+2f+2e1c+2.f+4e2.f+4a2g+ab4
-'F4 g+2g+arb&b2.r>e& ed+e4d+4c4Q3e<]4q0c+>Q3c+Q3eQ3f+Q3g+<
-'F5 [q0a>Q3a<]4[q0b>Q3b<]> q0c>Q3c< < q0b>Q3b<
-'F5 [q0e>Q3e<]4[q0c+>Q3c+<]4[q0a>Q3a<][q0b>Q3b<]r1
-'F5 q0err4rerc+ r1 arr4rarb r4.r16.a64a+64b4b4
-'F5 errq0c+16d+16 d+16_e&e16Q3d+dq0c+ r4r4>c+4e.g32a4~32eea.>e.dq0a16b16f+16g16<
-'F5 Q6erre f+rrf+ q0g.>d.g4d>b4_<d+16Q5e c16 Q5c+r16f+16g+16Q5ar16e.ccc
-'F5 c+.c+< q0a+.>f+.a32a+.~32f+.
-'F5 / f+4f+4g+4rg+ a.>e.>b&b4_<c+ f+.c+.>b4_<Q3e<]4q0c+>Q3c+Q3eQ3f+Q3g+<
-'F5 [q0a>Q3a<]4[q0b>Q3b<]> q0c>Q3c< < q0b>Q3b<
-'F5 [q0e>Q3e<]4[q0c+>Q3c+<]4[q0a>Q3a<][q0b>Q3b<]
-'F5 rv100 D0p2o6Q6@7ba+ag+1r1
-
-
- delay speed step max type(3 = one shot)
-MSV 4, 1, -94, 1600, 3
-
-'F6 m0l8@10v118MSV4,1,-94,1600, 3SS1MRT4,2,-1,127,3SR1q1
-'F6 r1r2)2c8.c8.c8(2
-'F6 [c4c4]13c4cc4.rccc4.
-'F6 l8
-'F6 c4r4rc4c4r2c4c
-'F6 c4r4rc4c4r4.c4c4
-'F6 c4r4rc4c4r4c4c4r
-'F6 c4rcc4rc c.c.c4crrc.c.cc.c.c
-'F6 [c4]12c.c.c.c.cc c4rc c4rc c.c.c4c4c c4c4c4c4cccccccc
-'F6 [[c4]28/c.c.c4cc4][c4]4
-'F6 [c4c4]13c4cc4.r2.
-
-
-'S12 D0v14o4l8q0MSV24,8, 1, 1,0SS1EON@0
-'S2 D-1v13r
-'S12 r1r1
-'S12 @0r4e4e4f+4g+re4d+4e&e @1br rb rr bbr1
-'S12 @0r4e4e4f+4g+re4d+4e&e @1br rb rr b>er<(3b>er<(2b>er4<
-'S12 r1r1r1r1@2f+2e2 c+2d+2.d+e&e1<)1@3
-'S12 q0 a&g+Q4(2e)2q0a&g+Q4(2e)2q1(1d+ e)1r1
-'S12 q0 a&g+Q4 e q0a&g+Q2(2e)2q1(1d+ e)1r1
-'S12 q0 a4 Q4 e q0a&g+Q4 e q1(1d+q0e)1r1
-'S12 q0(1a&g+Q4(2e)2q0a&g+Q4(2e)2q1(1d+ e)2r1
-
-
-'S3 D0v14o4l8q0MSV24,8, 1, 1,0SS1EON@0
-'S3 r1r1
-'S3 @0r4g+4g+4a4brg+4f+4g+&g+ @1g+r rg+ rr g+g+r1
-'S3 @0r4g+4g+4a4brg+4f+4g+&g+ @1g+r rg+ rr g+g+r1
-'S3 v14EONSS0@4l8
-今日も私、ちょっとPanic!
-'S3 q0g+(1g+16)1g16 d_c+r Q7g+16r16r16(3g+16 q0)3b16(1b_a+16)1r16
-Ah~寝過ごしちゃった。
-'S3 q0e_d+&d+ e16>c16d16d16 Q4c q0a16Q6a16_gq0b16>c16c16cd Q4c+c+16c+16c&c16c&c.&c
-'S3 r1
-'S3 D0v14o4l8q1MSV24,4, 1, 1,0SS1EON@3
-'S3 D1(3g_a&agf+4gg_a&aagf+ga.(3a16)3d4
-'S3 rc+c+d e.a.e e.e.d+ rf+gg_a& a2 rf+ga&a2 rf+gg_a&a1&a1D0)3
-'S3 [g+rg+4.g+rg+4.r2.]
-'S3 D1(3b4a.a16g+abe4ee32f+~32er c+d+erc+d+e4c+d+e g32_a&a.~32g+.e4ef+4D0)3
-'S3 [g+rg+4.g+rg+4./r2.]rf+4ef+4
-'S3 e2.(1@0g+>c+ cdc1
diff --git a/mml2vgm/mvc/mvc.cs b/mml2vgm/mvc/mvc.cs
index 2e02d0af..09b3d206 100644
--- a/mml2vgm/mvc/mvc.cs
+++ b/mml2vgm/mvc/mvc.cs
@@ -42,6 +42,10 @@ public mvc(string[] args)
desFn = System.IO.Path.GetFileNameWithoutExtension(srcFn) + ".vgm";
}
+ Core.log.debug = true;
+ Core.log.Open();
+ Core.log.Write("start compile thread");
+
Assembly myAssembly = Assembly.GetEntryAssembly();
string path = System.IO.Path.GetDirectoryName(myAssembly.Location);
Mml2vgm mv = new Mml2vgm(srcFn, desFn, path);
@@ -103,6 +107,9 @@ public mvc(string[] args)
Console.WriteLine("\r\nFinished.\r\n");
+ Core.log.Write("end compile thread");
+ Core.log.Close();
+
Environment.Exit(ret);
}