diff --git a/CHANGE.txt b/CHANGE.txt index e9c1cdb..932a0d3 100644 --- a/CHANGE.txt +++ b/CHANGE.txt @@ -1,4 +1,12 @@ 更新履歴 +TAG021 2019/12/19 + Core + ・o(オクターブ)、v(ボリューム)コマンドの修正 + コマンドのみ記述したとき、前回使用した値が使用するように修正。 + 例) +  o4 c>c>coc -> o4 c>c>co4 c と同じ +  v15c(c(cvc -> v15c(c(cv15c と同じ + TAG020 2019/12/03 コマンドメモ ・soxのurlが間違っていたので修正。 diff --git a/Core/MMLAnalyze.cs b/Core/MMLAnalyze.cs index 050f1af..0de0e38 100644 --- a/Core/MMLAnalyze.cs +++ b/Core/MMLAnalyze.cs @@ -434,17 +434,18 @@ private void CmdVolume(partWork pw, MML mml) mml.type = enmMMLType.Volume; mml.args = new List(); - if (!pw.getNum(out n)) + if (pw.getNum(out n)) { - msgBox.setErrMsg(msg.get("E05003"), pw.getSrcFn(), pw.getLineNumber()); - n = (int)(pw.MaxVolumeEasy * 0.9); - } + //逶ク蟇セ髻ウ驥剰ェソ謨エ + n = n + pw.RelVolume; - //逶ク蟇セ髻ウ驥剰ェソ謨エ - n = n + pw.RelVolume; - - n = Common.CheckRange(n, 0, pw.MaxVolumeEasy); - mml.args.Add(n); + n = Common.CheckRange(n, 0, pw.MaxVolumeEasy); + mml.args.Add(n); + } + else + { + mml.args = null; + } } } @@ -478,17 +479,21 @@ private void CmdTotalVolume(partWork pw, MML mml) private void CmdOctave(partWork pw, MML mml) { pw.incPos(); - if (!pw.getNum(out int n)) + if (pw.getNum(out int n)) { - msgBox.setErrMsg(msg.get("E05005"), pw.getSrcFn(), pw.getLineNumber()); - n = 4; - } - n = Common.CheckRange(n, 1, 8); + n = Common.CheckRange(n, 1, 8); - mml.type = enmMMLType.Octave; - mml.args = new List(); - mml.args.Add(n); - pw.octaveNow = n; + mml.type = enmMMLType.Octave; + mml.args = new List(); + mml.args.Add(n); + pw.octaveNow = n; + pw.latestOctave = n; + } + else + { + mml.args = null; + pw.octaveNow = pw.latestOctave; + } } private void CmdOctaveUp(partWork pw, MML mml) diff --git a/Core/chips/clsChip.cs b/Core/chips/clsChip.cs index 49a8b95..d2a093e 100644 --- a/Core/chips/clsChip.cs +++ b/Core/chips/clsChip.cs @@ -900,8 +900,11 @@ public virtual void CmdTotalVolume(partWork pw, MML mml) public virtual void CmdVolume(partWork pw, MML mml) { - int n = (int)mml.args[0]; + int n; + n = (mml.args != null && mml.args.Count > 0) ? (int)mml.args[0] : pw.latestVolume; pw.volume = Common.CheckRange(n, 0, pw.MaxVolume); + pw.latestVolume = n; + SetVolume(pw); } diff --git a/Core/chips/clsOPN.cs b/Core/chips/clsOPN.cs index a27e717..3afefa5 100644 --- a/Core/chips/clsOPN.cs +++ b/Core/chips/clsOPN.cs @@ -1218,9 +1218,10 @@ public override void CmdEnvelope(partWork pw, MML mml) public override void CmdVolume(partWork pw, MML mml) { - int n = (int)mml.args[0]; - n = Common.CheckRange(n, 0, 15); + int n; + n = (mml.args != null && mml.args.Count > 0) ? (int)mml.args[0] : pw.latestVolume; pw.volumeEasy = n; + pw.latestVolume = n; if (pw.Type == enmChannelType.FMOPN || pw.Type == enmChannelType.FMOPNex) { n = FMVDAT[n + 4]; diff --git a/Core/partWork.cs b/Core/partWork.cs index 6de2e62..fdc33a8 100644 --- a/Core/partWork.cs +++ b/Core/partWork.cs @@ -128,6 +128,8 @@ public class partWork public int octaveNew = 4; + public int latestOctave = 0; + public int TdA = -1; public int op1ml = -1; public int op2ml = -1; @@ -145,6 +147,8 @@ public class partWork /// public int volume = 0; + public int latestVolume = 0; + /// /// 邁。譏薙懊Μ繝・繝シ繝 ///