From 2c548dbc535a5ff39623c4353e160cfda7b808c0 Mon Sep 17 00:00:00 2001 From: kuma Date: Sun, 26 Aug 2018 22:26:14 +0900 Subject: [PATCH] =?UTF-8?q?LFO=E3=81=AE=E5=87=A6=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=20OPM:pan=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mml2vgm/Core/Core.csproj | 1 + mml2vgm/Core/clsVgm.cs | 111 ++++++++--- mml2vgm/Core/log.cs | 147 +++++++++++++++ mml2vgm/Core/mml2vgm.cs | 23 ++- mml2vgm/mml2vgm/frmMain.cs | 16 ++ mml2vgm/mml2vgm/sample/test.gwi | 313 +------------------------------- mml2vgm/mvc/mvc.cs | 7 + 7 files changed, 281 insertions(+), 337 deletions(-) create mode 100644 mml2vgm/Core/log.cs 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); }