diff --git a/mml2vgm/CHANGE.txt b/mml2vgm/CHANGE.txt index 010999e5..c1e70556 100644 --- a/mml2vgm/CHANGE.txt +++ b/mml2vgm/CHANGE.txt @@ -1,4 +1,7 @@ 更新履歴 +TAG722 2024/02/29 2nd + Core:XGM2:PCMmapモードを追加。 + TAG721 2024/02/29 Core,IDE:XGM2を追加。 diff --git a/mml2vgm/Core/XGM2maker.cs b/mml2vgm/Core/XGM2maker.cs index 14507b0d..54319883 100644 --- a/mml2vgm/Core/XGM2maker.cs +++ b/mml2vgm/Core/XGM2maker.cs @@ -44,7 +44,6 @@ public XGM2maker() public outDatum[] Build(ClsVgm mmlInfo,bool outVgmFile,bool writeFileMode) { exportMode = outVgmFile && writeFileMode; - exportMode = true; this.mmlInfo = mmlInfo; mmlInfo.dat = new List(); diff --git a/mml2vgm/Core/chips/YM2612X2.cs b/mml2vgm/Core/chips/YM2612X2.cs index eb7cd196..48ad4c36 100644 --- a/mml2vgm/Core/chips/YM2612X2.cs +++ b/mml2vgm/Core/chips/YM2612X2.cs @@ -159,6 +159,39 @@ public void OutYM2612X2PcmKeyOFF(MML mml, partPage page) public void OutYM2612X2PcmKeyON(MML mml, partPage page) { + MML mmlDmy = mml != null ? mml : lastKeyOnMML; + if (page.isPcmMap) + { + int n = Const.NOTE.IndexOf(page.noteCmd); + int arpNote = page.arpFreqMode ? 0 : page.arpDelta; + int f = page.octaveNow * 12 + n + page.shift + page.keyShift + arpNote; + if (parent.instPCMMap.ContainsKey(page.pcmMapNo)) + { + if (parent.instPCMMap[page.pcmMapNo].ContainsKey(f)) + { + page.instrument = parent.instPCMMap[page.pcmMapNo][f]; + } + else + { + msgBox.setErrMsg( + string.Format(msg.get("E10025"), page.octaveNow, page.noteCmd, page.shift + page.keyShift + arpNote), + mmlDmy != null ? mmlDmy.line.Lp : null); + return; + } + } + else + { + msgBox.setErrMsg(string.Format(msg.get("E10024"), page.pcmMapNo), mmlDmy != null ? mmlDmy.line.Lp : null); + return; + } + } + + if (!parent.instPCM.ContainsKey(page.instrument)) + { + msgBox.setErrMsg(string.Format(msg.get("E21000"), page.instrument), mmlDmy != null ? mmlDmy.line.Lp : null); + return; + } + int id = parent.instPCM[page.instrument].Item2.seqNum + 1; int ch = Math.Max(0, page.ch - 8); bool hiPriority = true;