diff --git a/MDX_PerfConv.lps b/MDX_PerfConv.lps index c187bae..2e31c24 100644 --- a/MDX_PerfConv.lps +++ b/MDX_PerfConv.lps @@ -74,7 +74,7 @@ - + @@ -83,47 +83,45 @@ - - - + + + - - - + + + - - - - - - - - + - - - + + + + + + + + @@ -137,7 +135,7 @@ - + @@ -145,7 +143,7 @@ - + @@ -153,7 +151,7 @@ - + @@ -161,27 +159,28 @@ - + - + - + + - - + + @@ -190,7 +189,7 @@ - + @@ -212,9 +211,9 @@ - - - + + + @@ -222,7 +221,7 @@ - + @@ -230,7 +229,7 @@ - + @@ -239,14 +238,14 @@ - + - + - + @@ -254,7 +253,7 @@ - + @@ -262,7 +261,7 @@ - + @@ -270,150 +269,150 @@ - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/MDX_PerfConv.res b/MDX_PerfConv.res index 973fea5..5fa0600 100644 Binary files a/MDX_PerfConv.res and b/MDX_PerfConv.res differ diff --git a/units/untDX7Voice.pas b/units/untDX7Voice.pas index 645245e..8bf7923 100644 --- a/units/untDX7Voice.pas +++ b/units/untDX7Voice.pas @@ -29,9 +29,9 @@ interface uses - Classes, SysUtils, untUtils, untParConst - {$IFNDEF CMDLINE} , HlpHashFactory {$ENDIF} - ; + Classes, SysUtils, Math, untUtils, untParConst + {$IFNDEF CMDLINE} , HlpHashFactory {$ENDIF} ; + type TDX7_VMEM_Dump = array [0..127] of byte; TDX7_VCED_Dump = array [0..155] of byte; @@ -185,8 +185,8 @@ interface LFO_AMP_MOD_DEPTH: byte; // 0-99 LFO_SYNC: byte; // 0-1 LFO_WAVEFORM: byte; // 0-5, (data sheet claims 9-4 ?!?) - // 0:TR, 1:SD, 2:SU, - // 3:SQ, 4:SI, 5:SH + // 0:TR, 1:SD, 2:SU, + // 3:SQ, 4:SI, 5:SH PITCH_MOD_SENSITIVITY: byte; // 0-7 TRANSPOSE: byte; // 0-48 12 = C2 VOICE_NAME_CHAR_1: byte; // ASCII @@ -200,7 +200,7 @@ interface VOICE_NAME_CHAR_9: byte; // ASCII VOICE_NAME_CHAR_10: byte; // ASCII OPERATOR_ON_OFF: byte; // bit6 = 0 / bit 5: OP1 / .. . - // ... / bit 0: OP6 + // ... / bit 0: OP6 ); end; @@ -345,10 +345,8 @@ TDX7VoiceContainer = class(TPersistent) FDX7_VCED_Params: TDX7_VCED_Params; FDX7_VMEM_Params: TDX7_VMEM_Params; public - function Load_VMEM_FromStream(var aStream: TMemoryStream; - Position: integer): boolean; - function Load_VCED_FromStream(var aStream: TMemoryStream; - Position: integer): boolean; + function Load_VMEM_FromStream(var aStream: TMemoryStream; Position: integer): boolean; + function Load_VCED_FromStream(var aStream: TMemoryStream; Position: integer): boolean; procedure InitVoice; //set defaults function GetVoiceName: string; procedure SetVoiceName(aName: string); @@ -369,6 +367,7 @@ TDX7VoiceContainer = class(TPersistent) function CheckMinMax(var slReport: TStringList): boolean; function HasNullInName: boolean; procedure Normalize; + procedure Mk2ToMk1(aPEGR, aAMS1, aAMS2, aAMS3, aAMS4, aAMS5, aAMS6: byte); end; function VCEDtoVMEM(aPar: TDX7_VCED_Params): TDX7_VMEM_Params; @@ -741,8 +740,7 @@ function VMEMtoVCED(aPar: TDX7_VMEM_Params): TDX7_VCED_Params; Result := t; end; -function TDX7VoiceContainer.Load_VMEM_FromStream(var aStream: TMemoryStream; - Position: integer): boolean; +function TDX7VoiceContainer.Load_VMEM_FromStream(var aStream: TMemoryStream; Position: integer): boolean; var i: integer; begin @@ -763,8 +761,7 @@ function TDX7VoiceContainer.Load_VMEM_FromStream(var aStream: TMemoryStream; end; end; -function TDX7VoiceContainer.Load_VCED_FromStream(var aStream: TMemoryStream; - Position: integer): boolean; +function TDX7VoiceContainer.Load_VCED_FromStream(var aStream: TMemoryStream; Position: integer): boolean; var i: integer; begin @@ -948,6 +945,7 @@ function TDX7VoiceContainer.CalculateHash: string; Result := THashFactory.TCrypto.CreateSHA2_256().ComputeStream(aStream).ToString(); aStream.Free; end; + {$ENDIF} function TDX7VoiceContainer.GetChecksumPart: integer; @@ -995,8 +993,7 @@ function TDX7VoiceContainer.GetVCEDChecksum: byte; tmpStream.Free; end; -procedure TDX7VoiceContainer.SysExVoiceToStream(aCh: integer; - var aStream: TMemoryStream); +procedure TDX7VoiceContainer.SysExVoiceToStream(aCh: integer; var aStream: TMemoryStream); var FCh: byte; begin @@ -1029,4 +1026,62 @@ function TDX7VoiceContainer.HasNullInName: boolean; (FDX7_VMEM_Params.VOICE_NAME_CHAR_10 = 0) then Result := True; end; +procedure TDX7VoiceContainer.Mk2ToMk1(aPEGR, aAMS1, aAMS2, aAMS3, aAMS4, aAMS5, aAMS6: byte); +const + ams: array[0..7] of byte = (0,1,2,3,3,3,3,3); +var + peg: integer; + //pegr: byte; + pegr: single; +begin + // Pitch EG Level correction + {//DXConvert + case aPEGR of + 0: pegr := 50; //8 octaves + 1: pegr := 32; //4 octaves + 2: pegr := 16; //1 octave + 3: pegr := 8; //0.5 octave + end; } + case aPEGR of + 0: pegr := 50; + 1: pegr := 25; + 2: pegr := 6.25; + 3: pegr := 3.125; + end; + {//DXConvert + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_1; + FDX7_VCED_Params.PITCH_EG_LEVEL_1 := byte((peg - 50) * pegr div 50) + 50; + + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_2; + FDX7_VCED_Params.PITCH_EG_LEVEL_2 := byte((peg - 50) * pegr div 50) + 50; + + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_3; + FDX7_VCED_Params.PITCH_EG_LEVEL_3 := byte((peg - 50) * pegr div 50) + 50; + + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_4; + FDX7_VCED_Params.PITCH_EG_LEVEL_4 := byte((peg - 50) * pegr div 50) + 50; } + + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_1; + FDX7_VCED_Params.PITCH_EG_LEVEL_1 := byte(floor((peg - 50) * pegr/50) + 50); + + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_2; + FDX7_VCED_Params.PITCH_EG_LEVEL_2 := byte(floor((peg - 50) * pegr/50) + 50); + + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_3; + FDX7_VCED_Params.PITCH_EG_LEVEL_3 := byte(floor((peg - 50) * pegr/50) + 50); + + peg := FDX7_VCED_Params.PITCH_EG_LEVEL_4; + FDX7_VCED_Params.PITCH_EG_LEVEL_4 := byte(floor((peg - 50) * pegr/50) + 50); + + // Amplitude Modulation Sensitivity correction + if aAMS1 <> 0 then FDX7_VCED_Params.OP1_AMP_MOD_SENSITIVITY := ams[aAMS1]; + if aAMS2 <> 0 then FDX7_VCED_Params.OP2_AMP_MOD_SENSITIVITY := ams[aAMS2]; + if aAMS3 <> 0 then FDX7_VCED_Params.OP3_AMP_MOD_SENSITIVITY := ams[aAMS3]; + if aAMS4 <> 0 then FDX7_VCED_Params.OP4_AMP_MOD_SENSITIVITY := ams[aAMS4]; + if aAMS5 <> 0 then FDX7_VCED_Params.OP5_AMP_MOD_SENSITIVITY := ams[aAMS5]; + if aAMS6 <> 0 then FDX7_VCED_Params.OP6_AMP_MOD_SENSITIVITY := ams[aAMS6]; + + FDX7_VMEM_Params := VCEDtoVMEM(FDX7_VCED_Params); +end; + end. diff --git a/units/untMDXPerformance.pas b/units/untMDXPerformance.pas index 70324db..651f906 100644 --- a/units/untMDXPerformance.pas +++ b/units/untMDXPerformance.pas @@ -405,9 +405,9 @@ procedure TMDXPerformanceContainer.LoadPerformanceFromFile(aName: string); FMDX_Params.TG[iCount].SupplData.BreathControlTarget := ini.ReadInteger('BreathControlTarget' + sCount, 0); FMDX_Params.TG[iCount].SupplData.AftertouchRange := - ini.ReadInteger('AfterTouchRange' + sCount, 99); + ini.ReadInteger('AftertouchRange' + sCount, 99); FMDX_Params.TG[iCount].SupplData.AftertouchTarget := - ini.ReadInteger('AfterTouchTarget' + sCount, 0); + ini.ReadInteger('AftertouchTarget' + sCount, 0); end; //Effects @@ -516,9 +516,9 @@ procedure TMDXPerformanceContainer.SavePerformanceToFile(aName: string; FMDX_Params.TG[iCount].SupplData.BreathControlRange); ini.WriteInteger('BreathControlTarget' + sCount, FMDX_Params.TG[iCount].SupplData.BreathControlTarget); - ini.WriteInteger('AfterTouchRange' + sCount, + ini.WriteInteger('AftertouchRange' + sCount, FMDX_Params.TG[iCount].SupplData.AftertouchRange); - ini.WriteInteger('AfterTouchTarget' + sCount, + ini.WriteInteger('AftertouchTarget' + sCount, FMDX_Params.TG[iCount].SupplData.AftertouchTarget); end; diff --git a/untConverter.pas b/untConverter.pas index 80c10bb..30315e7 100644 --- a/untConverter.pas +++ b/untConverter.pas @@ -100,7 +100,7 @@ function LoadDX7IIACEDPCEDtoPCEDx(isVoiceA: boolean; aACED: TDX7IISupplementCont if isVoiceA then sup.NoteLimitHigh := pced.SplitPoint else - sup.NoteLimitLow := pced.SplitPoint - 1; + sup.NoteLimitLow := pced.SplitPoint + 1; end; if (pced.PerformanceLayerMode = 1) and (pced.DualDetune <> 0) then @@ -108,12 +108,16 @@ function LoadDX7IIACEDPCEDtoPCEDx(isVoiceA: boolean; aACED: TDX7IISupplementCont if isVoiceA then begin sup.DetuneSGN := 0; - sup.DetuneVAL := Floor(pced.DualDetune * 3.572); + {DX77II - value 7 = 25c + MiniDexed - value 12,375 = 25c} + //sup.DetuneVAL := Floor(pced.DualDetune * 3.572); + sup.DetuneVAL := Floor(pced.DualDetune * 1.768); end else begin sup.DetuneSGN := 1; - sup.DetuneVAL := Floor(pced.DualDetune * 3.572); + //sup.DetuneVAL := Floor(pced.DualDetune * 3.572); + sup.DetuneVAL := Floor(pced.DualDetune * 1.768); end; end; Result := sup; @@ -180,11 +184,12 @@ function LoadTX7PCEDtoPCEDx(aPCED: TTX7FunctionContainer): TMDX_PCEDx_Params; GetDefinedValues(MDX, fInit, sup.params); sup.NoteShift := par.A_PerfKeyShift; if par.G_KeyAssignMode = 2 then - sup.NoteLimitHigh := par.G_SplitPoint - 1; + sup.NoteLimitHigh := par.G_SplitPoint; if (par.G_KeyAssignMode = 1) and (par.G_DualModeDetune <> 0) then begin sup.DetuneSGN := 0; - sup.DetuneVAL := Floor(par.G_DualModeDetune * 1.786); + //sup.DetuneVAL := Floor(par.G_DualModeDetune * 1.786); + sup.DetuneVAL := Floor(par.G_DualModeDetune * 0.886); end; sup.PitchBendRange := par.A_PitchBendRange; sup.PitchBendStep := par.A_PitchBendStep; @@ -213,11 +218,12 @@ function LoadDX5PCEDtoPCEDx(aPCED: TTX7FunctionContainer): TMDX_PCEDx_Params; GetDefinedValues(MDX, fInit, sup.params); sup.NoteShift := par.A_PerfKeyShift; if par.G_KeyAssignMode = 2 then - sup.NoteLimitLow := par.G_SplitPoint; + sup.NoteLimitLow := par.G_SplitPoint + 1; if (par.G_KeyAssignMode = 1) and (par.G_DualModeDetune <> 0) then begin sup.DetuneSGN := 1; - sup.DetuneVAL := Floor(par.G_DualModeDetune * 1.786); + //sup.DetuneVAL := Floor(par.G_DualModeDetune * 1.786); + sup.DetuneVAL := Floor(par.G_DualModeDetune * 0.886); end; sup.PitchBendRange := par.B_PitchBendRange; sup.PitchBendStep := par.B_PitchBendStep; @@ -529,6 +535,9 @@ procedure ConvertDX7IItoMDX(ABank: string; ANumber: integer); i, j: integer; sName: string; sPath: string; + + perg, ams1, ams2, ams3, ams4, ams5, ams6: byte; + begin msSearchPosition := 0; msFoundPosition := 0; @@ -580,6 +589,14 @@ procedure ConvertDX7IItoMDX(ABank: string; ANumber: integer); DX7.GetVoice(i * 8 + j, DX7_VCED); DX7II.GetSupplement(i * 8 + j, DX7II_ACED); + perg := DX7II_ACED.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); MDX.LoadVoiceToTG(j, DX7_VCED.Get_VCED_Params); MDX_TG.Set_PCEDx_Params(LoadDX7IIACEDtoPCEDx(DX7II_ACED)); MDX.LoadPCEDxToTG(j, MDX_TG.Get_PCEDx_Params); @@ -820,6 +837,9 @@ procedure ConvertDX7IItoMDX(ABankA, ABankB, APerf: string; ANumber: integer); ov i: integer; sName: string; sPath: string; + + perg, ams1, ams2, ams3, ams4, ams5, ams6: byte; + begin msFoundPosition := 0; @@ -945,12 +965,28 @@ procedure ConvertDX7IItoMDX(ABankA, ABankB, APerf: string; ANumber: integer); ov WriteLn('1: Bank A, Voice ' + IntToStr(iVoiceA)); DXA.GetVoice(iVoiceA, DX7_VCED_A); DXAs.GetSupplement(iVoiceA, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end else begin WriteLn('1: Bank B, Voice ' + IntToStr(iVoiceA - 32)); DXB.GetVoice(iVoiceA - 32, DX7_VCED_A); DXBs.GetSupplement(iVoiceA - 32, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; MDX.LoadVoiceToTG(1, DX7_VCED_A.Get_VCED_Params); MDX_TG1.Set_PCEDx_Params(LoadDX7IIACEDPCEDtoPCEDx(True, DX7II_ACED_A, DX7II_PCED)); @@ -974,12 +1010,28 @@ procedure ConvertDX7IItoMDX(ABankA, ABankB, APerf: string; ANumber: integer); ov WriteLn('2: Bank A, Voice ' + IntToStr(iVoiceB)); DXA.GetVoice(iVoiceB, DX7_VCED_B); DXAs.GetSupplement(iVoiceB, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end else begin WriteLn('2: Bank B, Voice ' + IntToStr(iVoiceB - 32)); DXB.GetVoice(iVoiceB - 32, DX7_VCED_B); DXBs.GetSupplement(iVoiceB - 32, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; MDX.LoadVoiceToTG(2, DX7_VCED_B.Get_VCED_Params); MDX_TG2.Set_PCEDx_Params(LoadDX7IIACEDPCEDtoPCEDx(False, @@ -1057,6 +1109,9 @@ procedure ConvertTX802ToMDX(ABankA1, ABankA2, ABankB1, ABankB2, APerf: string; A i, j, t: integer; sName: string; sPath: string; + + perg, ams1, ams2, ams3, ams4, ams5, ams6: byte; + begin msFoundPosition := 0; @@ -1228,6 +1283,14 @@ procedure ConvertTX802ToMDX(ABankA1, ABankA2, ABankB1, ABankB2, APerf: string; A iVoice[j] := iVoice[j] - 127; DXA1.GetVoice(iVoice[j], DX7_VCED); DXA1s.GetSupplement(iVoice[j], DX7II_ACED); + perg := DX7II_ACED.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); MDX.LoadVoiceToTG(j, DX7_VCED.Get_VCED_Params); MDX_TG.Set_PCEDx_Params(LoadTX802toPCEDx(DX7II_ACED, TX802_PCED, j)); MDX.LoadPCEDxToTG(j, MDX_TG.Get_PCEDx_Params); @@ -1241,6 +1304,14 @@ procedure ConvertTX802ToMDX(ABankA1, ABankA2, ABankB1, ABankB2, APerf: string; A iVoice[j] := iVoice[j] - 159; DXA2.GetVoice(iVoice[j], DX7_VCED); DXA2s.GetSupplement(iVoice[j], DX7II_ACED); + perg := DX7II_ACED.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); MDX.LoadVoiceToTG(j, DX7_VCED.Get_VCED_Params); MDX_TG.Set_PCEDx_Params(LoadTX802toPCEDx(DX7II_ACED, TX802_PCED, j)); MDX.LoadPCEDxToTG(j, MDX_TG.Get_PCEDx_Params); @@ -1254,6 +1325,14 @@ procedure ConvertTX802ToMDX(ABankA1, ABankA2, ABankB1, ABankB2, APerf: string; A iVoice[j] := iVoice[j] - 192; DXB1.GetVoice(iVoice[j], DX7_VCED); DXB1s.GetSupplement(iVoice[j], DX7II_ACED); + perg := DX7II_ACED.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); MDX.LoadVoiceToTG(j, DX7_VCED.Get_VCED_Params); MDX_TG.Set_PCEDx_Params(LoadTX802toPCEDx(DX7II_ACED, TX802_PCED, j)); MDX.LoadPCEDxToTG(j, MDX_TG.Get_PCEDx_Params); @@ -1267,6 +1346,14 @@ procedure ConvertTX802ToMDX(ABankA1, ABankA2, ABankB1, ABankB2, APerf: string; A iVoice[j] := iVoice[j] - 223; DXB2.GetVoice(iVoice[j], DX7_VCED); DXB2s.GetSupplement(iVoice[j], DX7II_ACED); + perg := DX7II_ACED.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); MDX.LoadVoiceToTG(j, DX7_VCED.Get_VCED_Params); MDX_TG.Set_PCEDx_Params(LoadTX802toPCEDx(DX7II_ACED, TX802_PCED, j)); MDX.LoadPCEDxToTG(j, MDX_TG.Get_PCEDx_Params); @@ -1343,6 +1430,9 @@ procedure ConvertBigDX7IItoMDX(ABankA: string; ANumber: integer); i: integer; sName: string; sPath: string; + + perg, ams1, ams2, ams3, ams4, ams5, ams6: byte; + begin msFoundPosition := 0; @@ -1473,12 +1563,28 @@ procedure ConvertBigDX7IItoMDX(ABankA: string; ANumber: integer); WriteLn('1: Bank A, Voice ' + IntToStr(iVoiceA) + ' - ' + DXA.GetVoiceName(iVoiceA)); DXA.GetVoice(iVoiceA, DX7_VCED_A); DXAs.GetSupplement(iVoiceA, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end else begin WriteLn('1: Bank B, Voice ' + IntToStr(iVoiceA - 32) + ' - ' + DXB.GetVoiceName(iVoiceA - 32)); DXB.GetVoice(iVoiceA - 32, DX7_VCED_A); DXBs.GetSupplement(iVoiceA - 32, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; MDX.LoadVoiceToTG(1, DX7_VCED_A.Get_VCED_Params); MDX_TG1.Set_PCEDx_Params(LoadDX7IIACEDPCEDtoPCEDx(True, DX7II_ACED_A, DX7II_PCED)); @@ -1502,12 +1608,28 @@ procedure ConvertBigDX7IItoMDX(ABankA: string; ANumber: integer); WriteLn('2: Bank A, Voice ' + IntToStr(iVoiceB) + ' - ' + DXA.GetVoiceName(iVoiceB)); DXA.GetVoice(iVoiceB, DX7_VCED_B); DXAs.GetSupplement(iVoiceB, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end else begin WriteLn('2: Bank B, Voice ' + IntToStr(iVoiceB - 32) + ' - ' + DXB.GetVoiceName(iVoiceB - 32)); DXB.GetVoice(iVoiceB - 32, DX7_VCED_B); DXBs.GetSupplement(iVoiceB - 32, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; MDX.LoadVoiceToTG(2, DX7_VCED_B.Get_VCED_Params); MDX_TG2.Set_PCEDx_Params(LoadDX7IIACEDPCEDtoPCEDx(False, @@ -1587,6 +1709,9 @@ procedure Convert2BigDX7IItoMDX(ABankA, ABankB: string; ANumber: integer); i: integer; sName: string; sPath: string; + + perg, ams1, ams2, ams3, ams4, ams5, ams6: byte; + begin msFoundPosition := 0; @@ -1902,24 +2027,56 @@ procedure Convert2BigDX7IItoMDX(ABankA, ABankB: string; ANumber: integer); WriteLn('1: Bank A1, Voice ' + IntToStr(iVoiceA + 1) + ' - ' + DXA32.GetVoiceName(iVoiceA + 1)); DXA32.GetVoice(iVoiceA + 1, DX7_VCED_A); DXA32s.GetSupplement(iVoiceA + 1, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; if (iVoiceA > 31) and (iVoiceA < 64) then begin WriteLn('1: Bank A2, Voice ' + IntToStr(iVoiceA - 31) + ' - ' + DXA64.GetVoiceName(iVoiceA - 31)); DXA64.GetVoice(iVoiceA - 31, DX7_VCED_A); DXA64s.GetSupplement(iVoiceA - 31, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; if (iVoiceA > 63) and (iVoiceA < 96) then begin WriteLn('1: Bank B1, Voice ' + IntToStr(iVoiceA - 63) + ' - ' + DXB32.GetVoiceName(iVoiceA - 63)); DXB32.GetVoice(iVoiceA - 63, DX7_VCED_A); DXB32s.GetSupplement(iVoiceA - 63, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; if (iVoiceA > 95) and (iVoiceA < 128) then begin WriteLn('1: Bank B2, Voice ' + IntToStr(iVoiceA - 95) + ' - ' + DXB64.GetVoiceName(iVoiceA - 95)); DXB64.GetVoice(iVoiceA - 95, DX7_VCED_A); DXB64s.GetSupplement(iVoiceA - 95, DX7II_ACED_A); + perg := DX7II_ACED_A.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_A.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_A.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_A.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_A.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_A.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_A.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_A.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; MDX.LoadVoiceToTG(1, DX7_VCED_A.Get_VCED_Params); @@ -1943,25 +2100,57 @@ procedure Convert2BigDX7IItoMDX(ABankA, ABankB: string; ANumber: integer); begin WriteLn('2: Bank A1, Voice ' + IntToStr(iVoiceB + 1) + ' - ' + DXA32.GetVoiceName(iVoiceB + 1)); DXA32.GetVoice(iVoiceB + 1, DX7_VCED_B); - DXA32s.GetSupplement(iVoiceB + 1, DX7II_ACED_A); + DXA32s.GetSupplement(iVoiceB + 1, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; if (iVoiceB > 31) and (iVoiceB < 64) then begin WriteLn('2: Bank A2, Voice ' + IntToStr(iVoiceB - 31) + ' - ' + DXA64.GetVoiceName(iVoiceB - 31)); DXA64.GetVoice(iVoiceB - 31, DX7_VCED_B); - DXA64s.GetSupplement(iVoiceB - 31, DX7II_ACED_A); + DXA64s.GetSupplement(iVoiceB - 31, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; if (iVoiceB > 63) and (iVoiceB < 96) then begin WriteLn('2: Bank B1, Voice ' + IntToStr(iVoiceB - 63) + ' - ' + DXB32.GetVoiceName(iVoiceB - 63)); DXB32.GetVoice(iVoiceB - 63, DX7_VCED_B); - DXB32s.GetSupplement(iVoiceB - 63, DX7II_ACED_A); + DXB32s.GetSupplement(iVoiceB - 63, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; if (iVoiceB > 95) and (iVoiceB < 128) then begin WriteLn('2: Bank B2, Voice ' + IntToStr(iVoiceB - 95) + ' - ' + DXB64.GetVoiceName(iVoiceB - 95)); DXB64.GetVoice(iVoiceB - 95, DX7_VCED_B); - DXB64s.GetSupplement(iVoiceB - 95, DX7II_ACED_A); + DXB64s.GetSupplement(iVoiceB - 95, DX7II_ACED_B); + perg := DX7II_ACED_B.Get_ACED_Params.Pitch_EG_Range; + ams1 := DX7II_ACED_B.Get_ACED_Params.OP1_AM_Sensitivity; + ams2 := DX7II_ACED_B.Get_ACED_Params.OP2_AM_Sensitivity; + ams3 := DX7II_ACED_B.Get_ACED_Params.OP3_AM_Sensitivity; + ams4 := DX7II_ACED_B.Get_ACED_Params.OP4_AM_Sensitivity; + ams5 := DX7II_ACED_B.Get_ACED_Params.OP5_AM_Sensitivity; + ams6 := DX7II_ACED_B.Get_ACED_Params.OP6_AM_Sensitivity; + DX7_VCED_B.Mk2ToMk1(perg, ams1, ams2, ams3, ams4, ams5, ams6); end; MDX.LoadVoiceToTG(2, DX7_VCED_B.Get_VCED_Params); diff --git a/untDispatcher.pas b/untDispatcher.pas index 43440c2..5a12035 100644 --- a/untDispatcher.pas +++ b/untDispatcher.pas @@ -50,9 +50,16 @@ procedure DispatchCheck(ABank: string; ANumber: integer); WriteLn('It is a DX7II "big" dump'); ConvertBigDX7IItoMDX(ABank, ANumber); end; + if (VMEM in ms) and (LMPMEM in ms) and not (AMEM in ms) then + begin + WriteLn('It is a INCOMPLETE DX7II "big" dump'); + WriteLn('Do not expect wonders from this conversion'); + ConvertBigDX7IItoMDX(ABank, ANumber); + end; if (VMEM in ms) and (PMEM802 in ms) and (AMEM in ms) then begin WriteLn('It is a TX802 "big" dump'); + WriteLn('Not yet supported'); //ConvertTX7toMDX(ABank); end; msBank.Free;