Match pitch and amplitude of ZDoom and DOSBox emulators.
This commit is contained in:
parent
22685630c2
commit
cb5715effb
4 changed files with 36 additions and 30 deletions
|
@ -73,9 +73,9 @@
|
||||||
<VS2012 targetFolder="Builds/VisualStudio2012" vstFolder="c:\SDKs\vstsdk2.4"
|
<VS2012 targetFolder="Builds/VisualStudio2012" vstFolder="c:\SDKs\vstsdk2.4"
|
||||||
extraLinkerFlags="">
|
extraLinkerFlags="">
|
||||||
<CONFIGURATIONS>
|
<CONFIGURATIONS>
|
||||||
<CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
|
<CONFIGURATION name="Debug" winWarningLevel="4" generateManifest="1" winArchitecture="x64"
|
||||||
isDebug="1" optimisation="1" targetName="JuceOPLVSTi"/>
|
isDebug="1" optimisation="1" targetName="JuceOPLVSTi"/>
|
||||||
<CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="32-bit"
|
<CONFIGURATION name="Release" winWarningLevel="4" generateManifest="1" winArchitecture="x64"
|
||||||
isDebug="0" optimisation="2" targetName="JuceOPLVSTi"/>
|
isDebug="0" optimisation="2" targetName="JuceOPLVSTi"/>
|
||||||
</CONFIGURATIONS>
|
</CONFIGURATIONS>
|
||||||
<MODULEPATHS>
|
<MODULEPATHS>
|
||||||
|
|
|
@ -18,11 +18,6 @@ JuceOplvstiAudioProcessor::JuceOplvstiAudioProcessor()
|
||||||
|
|
||||||
// Initialize parameters
|
// Initialize parameters
|
||||||
|
|
||||||
const String emulators[] = {"DOSBox", "ZDoom"};
|
|
||||||
params.push_back(new EnumFloatParameter("Emulator",
|
|
||||||
StringArray(emulators, sizeof(emulators)/sizeof(String)))
|
|
||||||
);
|
|
||||||
|
|
||||||
const String waveforms[] = {"Sine", "Half Sine", "Abs Sine", "Quarter Sine", "Alternating Sine", "Camel Sine", "Square", "Logarithmic Sawtooth"};
|
const String waveforms[] = {"Sine", "Half Sine", "Abs Sine", "Quarter Sine", "Alternating Sine", "Camel Sine", "Square", "Logarithmic Sawtooth"};
|
||||||
params.push_back(new EnumFloatParameter("Carrier Wave",
|
params.push_back(new EnumFloatParameter("Carrier Wave",
|
||||||
StringArray(waveforms, sizeof(waveforms)/sizeof(String)))
|
StringArray(waveforms, sizeof(waveforms)/sizeof(String)))
|
||||||
|
@ -114,6 +109,11 @@ JuceOplvstiAudioProcessor::JuceOplvstiAudioProcessor()
|
||||||
StringArray(sensitivitySettings, sizeof(sensitivitySettings)/sizeof(String)))
|
StringArray(sensitivitySettings, sizeof(sensitivitySettings)/sizeof(String)))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const String emulators[] = {"DOSBox", "ZDoom"};
|
||||||
|
params.push_back(new EnumFloatParameter("Emulator",
|
||||||
|
StringArray(emulators, sizeof(emulators)/sizeof(String)))
|
||||||
|
);
|
||||||
|
|
||||||
for(unsigned int i = 0; i < params.size(); i++) {
|
for(unsigned int i = 0; i < params.size(); i++) {
|
||||||
paramIdxByName[params[i]->getName()] = i;
|
paramIdxByName[params[i]->getName()] = i;
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,6 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
{
|
{
|
||||||
// these ones from the Syndicate in-game music
|
// these ones from the Syndicate in-game music
|
||||||
const float i_params_0[] = {
|
const float i_params_0[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.330000f, // waveforms
|
0.000000f, 0.330000f, // waveforms
|
||||||
0.066667f, 0.133333f, // frq multipliers
|
0.066667f, 0.133333f, // frq multipliers
|
||||||
0.142857f, 0.412698f, // attenuation
|
0.142857f, 0.412698f, // attenuation
|
||||||
|
@ -151,12 +150,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
0.5f, 0.3f, 0.3f, 0.3f, // adsr
|
0.5f, 0.3f, 0.3f, 0.3f, // adsr
|
||||||
0.5f, 0.3f, 0.1f, 0.6f, // adsr
|
0.5f, 0.3f, 0.1f, 0.6f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_0 (i_params_0, i_params_0 + sizeof(i_params_0) / sizeof(float));
|
std::vector<float> v_i_params_0 (i_params_0, i_params_0 + sizeof(i_params_0) / sizeof(float));
|
||||||
programs["Mercenary Bass"] = std::vector<float>(v_i_params_0);
|
programs["Mercenary Bass"] = std::vector<float>(v_i_params_0);
|
||||||
|
|
||||||
const float i_params_19189[] = {
|
const float i_params_19189[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.000000f, // waveforms
|
0.000000f, 0.000000f, // waveforms
|
||||||
0.066667f, 0.200000f, // frq multipliers
|
0.066667f, 0.200000f, // frq multipliers
|
||||||
0.000000f, 0.285714f, // attenuation
|
0.000000f, 0.285714f, // attenuation
|
||||||
|
@ -169,12 +168,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
1.0f, 1.0f, 0.0f, 0.3f, // adsr
|
1.0f, 1.0f, 0.0f, 0.3f, // adsr
|
||||||
1.0f, 0.5f, 0.2f, 0.3f, // adsr
|
1.0f, 0.5f, 0.2f, 0.3f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_19189 (i_params_19189, i_params_19189 + sizeof(i_params_19189) / sizeof(float));
|
std::vector<float> v_i_params_19189 (i_params_19189, i_params_19189 + sizeof(i_params_19189) / sizeof(float));
|
||||||
programs["Patrol Bass"] = std::vector<float>(v_i_params_19189);
|
programs["Patrol Bass"] = std::vector<float>(v_i_params_19189);
|
||||||
|
|
||||||
const float i_params_38377[] = {
|
const float i_params_38377[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.160000f, // waveforms
|
0.000000f, 0.160000f, // waveforms
|
||||||
0.066667f, 0.066667f, // frq multipliers
|
0.066667f, 0.066667f, // frq multipliers
|
||||||
0.000000f, 0.460317f, // attenuation
|
0.000000f, 0.460317f, // attenuation
|
||||||
|
@ -187,12 +186,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
1.0f, 0.3f, 0.5f, 0.5f, // adsr
|
1.0f, 0.3f, 0.5f, 0.5f, // adsr
|
||||||
1.0f, 0.1f, 0.9f, 1.0f, // adsr
|
1.0f, 0.1f, 0.9f, 1.0f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_38377 (i_params_38377, i_params_38377 + sizeof(i_params_38377) / sizeof(float));
|
std::vector<float> v_i_params_38377 (i_params_38377, i_params_38377 + sizeof(i_params_38377) / sizeof(float));
|
||||||
programs["Subdue Bass"] = std::vector<float>(v_i_params_38377);
|
programs["Subdue Bass"] = std::vector<float>(v_i_params_38377);
|
||||||
|
|
||||||
const float i_params_38392[] = {
|
const float i_params_38392[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.000000f, // waveforms
|
0.000000f, 0.000000f, // waveforms
|
||||||
0.000000f, 0.000000f, // frq multipliers
|
0.000000f, 0.000000f, // frq multipliers
|
||||||
0.000000f, 0.000000f, // attenuation
|
0.000000f, 0.000000f, // attenuation
|
||||||
|
@ -205,12 +204,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
0.1f, 0.1f, 0.7f, 0.1f, // adsr
|
0.1f, 0.1f, 0.7f, 0.1f, // adsr
|
||||||
0.1f, 0.9f, 0.1f, 0.1f, // adsr
|
0.1f, 0.9f, 0.1f, 0.1f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_38392 (i_params_38392, i_params_38392 + sizeof(i_params_38392) / sizeof(float));
|
std::vector<float> v_i_params_38392 (i_params_38392, i_params_38392 + sizeof(i_params_38392) / sizeof(float));
|
||||||
programs["Dark Future Sweep"] = std::vector<float>(v_i_params_38392);
|
programs["Dark Future Sweep"] = std::vector<float>(v_i_params_38392);
|
||||||
|
|
||||||
const float i_params_39687[] = {
|
const float i_params_39687[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.000000f, // waveforms
|
0.000000f, 0.000000f, // waveforms
|
||||||
0.066667f, 0.333333f, // frq multipliers
|
0.066667f, 0.333333f, // frq multipliers
|
||||||
0.000000f, 0.301587f, // attenuation
|
0.000000f, 0.301587f, // attenuation
|
||||||
|
@ -223,12 +222,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
1.0f, 0.3f, 0.1f, 0.3f, // adsr
|
1.0f, 0.3f, 0.1f, 0.3f, // adsr
|
||||||
1.0f, 0.7f, 0.0f, 0.4f, // adsr
|
1.0f, 0.7f, 0.0f, 0.4f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_39687 (i_params_39687, i_params_39687 + sizeof(i_params_39687) / sizeof(float));
|
std::vector<float> v_i_params_39687 (i_params_39687, i_params_39687 + sizeof(i_params_39687) / sizeof(float));
|
||||||
programs["Sinister Bass"] = std::vector<float>(v_i_params_39687);
|
programs["Sinister Bass"] = std::vector<float>(v_i_params_39687);
|
||||||
|
|
||||||
const float i_params_76784[] = {
|
const float i_params_76784[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.330000f, // waveforms
|
0.000000f, 0.330000f, // waveforms
|
||||||
0.066667f, 0.133333f, // frq multipliers
|
0.066667f, 0.133333f, // frq multipliers
|
||||||
0.000000f, 0.428571f, // attenuation
|
0.000000f, 0.428571f, // attenuation
|
||||||
|
@ -241,12 +240,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
1.0f, 0.3f, 0.4f, 0.4f, // adsr
|
1.0f, 0.3f, 0.4f, 0.4f, // adsr
|
||||||
1.0f, 0.4f, 0.5f, 0.3f, // adsr
|
1.0f, 0.4f, 0.5f, 0.3f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_76784 (i_params_76784, i_params_76784 + sizeof(i_params_76784) / sizeof(float));
|
std::vector<float> v_i_params_76784 (i_params_76784, i_params_76784 + sizeof(i_params_76784) / sizeof(float));
|
||||||
programs["Buzcut Bass"] = std::vector<float>(v_i_params_76784);
|
programs["Buzcut Bass"] = std::vector<float>(v_i_params_76784);
|
||||||
|
|
||||||
const float i_params_97283[] = {
|
const float i_params_97283[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.330000f, // waveforms
|
0.000000f, 0.330000f, // waveforms
|
||||||
0.133333f, 0.400000f, // frq multipliers
|
0.133333f, 0.400000f, // frq multipliers
|
||||||
0.000000f, 0.365079f, // attenuation
|
0.000000f, 0.365079f, // attenuation
|
||||||
|
@ -259,13 +258,13 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
0.6f, 0.7f, 0.0f, 0.2f, // adsr
|
0.6f, 0.7f, 0.0f, 0.2f, // adsr
|
||||||
0.6f, 0.7f, 0.1f, 0.1f, // adsr
|
0.6f, 0.7f, 0.1f, 0.1f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_97283 (i_params_97283, i_params_97283 + sizeof(i_params_97283) / sizeof(float));
|
std::vector<float> v_i_params_97283 (i_params_97283, i_params_97283 + sizeof(i_params_97283) / sizeof(float));
|
||||||
programs["Death Toll Bell"] = std::vector<float>(v_i_params_97283);
|
programs["Death Toll Bell"] = std::vector<float>(v_i_params_97283);
|
||||||
|
|
||||||
// The start of the Dune 2 introduction
|
// The start of the Dune 2 introduction
|
||||||
const float i_params_3136[] = {
|
const float i_params_3136[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.330000f, // waveforms
|
0.000000f, 0.330000f, // waveforms
|
||||||
0.133333f, 0.133333f, // frq multipliers
|
0.133333f, 0.133333f, // frq multipliers
|
||||||
0.000000f, 0.333333f, // attenuation
|
0.000000f, 0.333333f, // attenuation
|
||||||
|
@ -278,12 +277,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
1.0f, 0.1f, 0.1f, 0.3f, // adsr
|
1.0f, 0.1f, 0.1f, 0.3f, // adsr
|
||||||
1.0f, 0.4f, 0.2f, 0.3f, // adsr
|
1.0f, 0.4f, 0.2f, 0.3f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_3136 (i_params_3136, i_params_3136 + sizeof(i_params_3136) / sizeof(float));
|
std::vector<float> v_i_params_3136 (i_params_3136, i_params_3136 + sizeof(i_params_3136) / sizeof(float));
|
||||||
programs["Westwood Chime"] = std::vector<float>(v_i_params_3136);
|
programs["Westwood Chime"] = std::vector<float>(v_i_params_3136);
|
||||||
|
|
||||||
const float i_params_7254[] = {
|
const float i_params_7254[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.160000f, // waveforms
|
0.000000f, 0.160000f, // waveforms
|
||||||
0.066667f, 0.066667f, // frq multipliers
|
0.066667f, 0.066667f, // frq multipliers
|
||||||
0.253968f, 0.476190f, // attenuation
|
0.253968f, 0.476190f, // attenuation
|
||||||
|
@ -296,12 +295,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
0.1f, 0.1f, 0.1f, 0.1f, // adsr
|
0.1f, 0.1f, 0.1f, 0.1f, // adsr
|
||||||
0.2f, 0.1f, 0.1f, 0.0f, // adsr
|
0.2f, 0.1f, 0.1f, 0.0f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_7254 (i_params_7254, i_params_7254 + sizeof(i_params_7254) / sizeof(float));
|
std::vector<float> v_i_params_7254 (i_params_7254, i_params_7254 + sizeof(i_params_7254) / sizeof(float));
|
||||||
programs["Desert Pipe"] = std::vector<float>(v_i_params_7254);
|
programs["Desert Pipe"] = std::vector<float>(v_i_params_7254);
|
||||||
|
|
||||||
const float i_params_20108[] = {
|
const float i_params_20108[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.000000f, // waveforms
|
0.000000f, 0.000000f, // waveforms
|
||||||
0.400000f, 0.066667f, // frq multipliers
|
0.400000f, 0.066667f, // frq multipliers
|
||||||
0.238095f, 0.000000f, // attenuation
|
0.238095f, 0.000000f, // attenuation
|
||||||
|
@ -314,12 +313,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
0.1f, 0.1f, 0.1f, 0.1f, // adsr
|
0.1f, 0.1f, 0.1f, 0.1f, // adsr
|
||||||
0.1f, 0.1f, 0.1f, 0.1f, // adsr
|
0.1f, 0.1f, 0.1f, 0.1f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_20108 (i_params_20108, i_params_20108 + sizeof(i_params_20108) / sizeof(float));
|
std::vector<float> v_i_params_20108 (i_params_20108, i_params_20108 + sizeof(i_params_20108) / sizeof(float));
|
||||||
programs["Y2180 Strings"] = std::vector<float>(v_i_params_20108);
|
programs["Y2180 Strings"] = std::vector<float>(v_i_params_20108);
|
||||||
|
|
||||||
const float i_params_27550[] = {
|
const float i_params_27550[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.500000f, 0.000000f, // waveforms
|
0.500000f, 0.000000f, // waveforms
|
||||||
0.000000f, 0.066667f, // frq multipliers
|
0.000000f, 0.066667f, // frq multipliers
|
||||||
0.238095f, 0.793651f, // attenuation
|
0.238095f, 0.793651f, // attenuation
|
||||||
|
@ -332,12 +331,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
1.0f, 0.0f, 1.0f, 1.0f, // adsr
|
1.0f, 0.0f, 1.0f, 1.0f, // adsr
|
||||||
0.9f, 0.1f, 0.0f, 1.0f, // adsr
|
0.9f, 0.1f, 0.0f, 1.0f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_27550 (i_params_27550, i_params_27550 + sizeof(i_params_27550) / sizeof(float));
|
std::vector<float> v_i_params_27550 (i_params_27550, i_params_27550 + sizeof(i_params_27550) / sizeof(float));
|
||||||
programs["Emperor Chord"] = std::vector<float>(v_i_params_27550);
|
programs["Emperor Chord"] = std::vector<float>(v_i_params_27550);
|
||||||
|
|
||||||
const float i_params_harpsi[] = {
|
const float i_params_harpsi[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.330000f, 0.160000f, // waveforms
|
0.330000f, 0.160000f, // waveforms
|
||||||
0.066667f, 0.200000f, // frq multipliers
|
0.066667f, 0.200000f, // frq multipliers
|
||||||
0.142857f, 0.260000f, // attenuation
|
0.142857f, 0.260000f, // attenuation
|
||||||
|
@ -350,12 +349,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
0.85f, 0.3f, 0.3f, 0.3f, // adsr
|
0.85f, 0.3f, 0.3f, 0.3f, // adsr
|
||||||
0.85f, 0.3f, 0.1f, 0.6f, // adsr
|
0.85f, 0.3f, 0.1f, 0.6f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_harpsi (i_params_harpsi, i_params_harpsi + sizeof(i_params_harpsi) / sizeof(float));
|
std::vector<float> v_i_params_harpsi (i_params_harpsi, i_params_harpsi + sizeof(i_params_harpsi) / sizeof(float));
|
||||||
programs["Harpsi"] = std::vector<float>(v_i_params_harpsi);
|
programs["Harpsi"] = std::vector<float>(v_i_params_harpsi);
|
||||||
|
|
||||||
const float i_params_tromba[] = {
|
const float i_params_tromba[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.160000f, // waveforms
|
0.000000f, 0.160000f, // waveforms
|
||||||
0.066667f, 0.000000f, // frq multipliers
|
0.066667f, 0.000000f, // frq multipliers
|
||||||
0.142857f, 0.220000f, // attenuation
|
0.142857f, 0.220000f, // attenuation
|
||||||
|
@ -368,12 +367,12 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
0.45f, 0.3f, 0.3f, 0.3f, // adsr
|
0.45f, 0.3f, 0.3f, 0.3f, // adsr
|
||||||
0.45f, 0.45f, 0.1f, 0.6f, // adsr
|
0.45f, 0.45f, 0.1f, 0.6f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_tromba (i_params_tromba, i_params_tromba + sizeof(i_params_tromba) / sizeof(float));
|
std::vector<float> v_i_params_tromba (i_params_tromba, i_params_tromba + sizeof(i_params_tromba) / sizeof(float));
|
||||||
programs["Tromba"] = std::vector<float>(v_i_params_tromba);
|
programs["Tromba"] = std::vector<float>(v_i_params_tromba);
|
||||||
|
|
||||||
const float i_params_bassdrum[] = {
|
const float i_params_bassdrum[] = {
|
||||||
0.0f, // emulator
|
|
||||||
0.000000f, 0.500000f, // waveforms
|
0.000000f, 0.500000f, // waveforms
|
||||||
0.000000f, 0.000000f, // frq multipliers
|
0.000000f, 0.000000f, // frq multipliers
|
||||||
0.000000f, 0.090000f, // attenuation
|
0.000000f, 0.090000f, // attenuation
|
||||||
|
@ -386,6 +385,7 @@ void JuceOplvstiAudioProcessor::initPrograms()
|
||||||
1.00f, 0.5f, 0.3f, 0.4f, // adsr
|
1.00f, 0.5f, 0.3f, 0.4f, // adsr
|
||||||
1.00f, 0.75f, 0.5f, 0.5f, // adsr
|
1.00f, 0.75f, 0.5f, 0.5f, // adsr
|
||||||
0.0f, 0.0f, // velocity sensitivity
|
0.0f, 0.0f, // velocity sensitivity
|
||||||
|
0.0f, // emulator
|
||||||
};
|
};
|
||||||
std::vector<float> v_i_params_bassdrum (i_params_bassdrum, i_params_bassdrum + sizeof(i_params_bassdrum) / sizeof(float));
|
std::vector<float> v_i_params_bassdrum (i_params_bassdrum, i_params_bassdrum + sizeof(i_params_bassdrum) / sizeof(float));
|
||||||
programs["bassdrum"] = std::vector<float>(v_i_params_bassdrum);
|
programs["bassdrum"] = std::vector<float>(v_i_params_bassdrum);
|
||||||
|
@ -417,7 +417,7 @@ const String JuceOplvstiAudioProcessor::getName() const
|
||||||
|
|
||||||
int JuceOplvstiAudioProcessor::getNumParameters()
|
int JuceOplvstiAudioProcessor::getNumParameters()
|
||||||
{
|
{
|
||||||
return params.size();
|
return (int)params.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
float JuceOplvstiAudioProcessor::getParameter (int index)
|
float JuceOplvstiAudioProcessor::getParameter (int index)
|
||||||
|
@ -505,7 +505,7 @@ void JuceOplvstiAudioProcessor::loadInstrumentFromFile(String filename)
|
||||||
{
|
{
|
||||||
FILE* f = fopen(filename.toUTF8(), "rb");
|
FILE* f = fopen(filename.toUTF8(), "rb");
|
||||||
unsigned char buf[MAX_INSTRUMENT_FILE_SIZE_BYTES];
|
unsigned char buf[MAX_INSTRUMENT_FILE_SIZE_BYTES];
|
||||||
int n = fread(buf, 1, MAX_INSTRUMENT_FILE_SIZE_BYTES, f);
|
int n = (int)fread(buf, 1, MAX_INSTRUMENT_FILE_SIZE_BYTES, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
SbiLoader* loader = new SbiLoader();
|
SbiLoader* loader = new SbiLoader();
|
||||||
loader->loadInstrumentData(n, buf, this);
|
loader->loadInstrumentData(n, buf, this);
|
||||||
|
@ -609,7 +609,7 @@ double JuceOplvstiAudioProcessor::getTailLengthSeconds() const
|
||||||
|
|
||||||
int JuceOplvstiAudioProcessor::getNumPrograms()
|
int JuceOplvstiAudioProcessor::getNumPrograms()
|
||||||
{
|
{
|
||||||
return programs.size();
|
return (int)programs.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int JuceOplvstiAudioProcessor::getCurrentProgram()
|
int JuceOplvstiAudioProcessor::getCurrentProgram()
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
// A wrapper around the DOSBox and ZDoom OPL emulators.
|
// A wrapper around the DOSBox and ZDoom OPL emulators.
|
||||||
|
|
||||||
Hiopl::Hiopl(int buflen, Emulator emulator) {
|
Hiopl::Hiopl(int buflen, Emulator emulator) {
|
||||||
Buf32 = new Bit32s[buflen*2];
|
|
||||||
adlib = new DBOPL::Handler();
|
adlib = new DBOPL::Handler();
|
||||||
zdoom = JavaOPLCreate(false);
|
zdoom = JavaOPLCreate(false);
|
||||||
|
|
||||||
|
@ -47,10 +46,13 @@ void Hiopl::SetEmulator(Emulator emulator) {
|
||||||
void Hiopl::Generate(int length, float* buffer) {
|
void Hiopl::Generate(int length, float* buffer) {
|
||||||
// This would be better done using Juce's built in audio format conversion.
|
// This would be better done using Juce's built in audio format conversion.
|
||||||
if (DOSBOX == emulator) {
|
if (DOSBOX == emulator) {
|
||||||
adlib->Generate(length, Buf32);
|
Bit32s* buf32 = new Bit32s[length];
|
||||||
|
adlib->Generate(length, buf32);
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
buffer[i] = (float)(Buf32[i])/32768.0f;
|
// The magic divisor is tuned to match to ZDoom output amplitude.
|
||||||
|
buffer[i] = (float)(buf32[i])/4100.0f;
|
||||||
}
|
}
|
||||||
|
delete buf32;
|
||||||
} else if (ZDOOM == emulator) {
|
} else if (ZDOOM == emulator) {
|
||||||
// ZDoom hacked to write mono samples
|
// ZDoom hacked to write mono samples
|
||||||
zdoom->Update(buffer, length);
|
zdoom->Update(buffer, length);
|
||||||
|
@ -65,6 +67,7 @@ void Hiopl::_WriteReg(Bit32u reg, Bit8u value, Bit8u mask) {
|
||||||
if (mask > 0) {
|
if (mask > 0) {
|
||||||
value = (regCache[reg] & (~mask)) | (value & mask);
|
value = (regCache[reg] & (~mask)) | (value & mask);
|
||||||
}
|
}
|
||||||
|
// Write to the registers of both emulators.
|
||||||
//if (DOSBOX == emulator) {
|
//if (DOSBOX == emulator) {
|
||||||
adlib->WriteReg(reg, value);
|
adlib->WriteReg(reg, value);
|
||||||
//} else if (ZDOOM == emulator) {
|
//} else if (ZDOOM == emulator) {
|
||||||
|
@ -171,6 +174,10 @@ void Hiopl::KeyOff(int ch) {
|
||||||
void Hiopl::SetFrequency(int ch, float frqHz, bool keyOn) {
|
void Hiopl::SetFrequency(int ch, float frqHz, bool keyOn) {
|
||||||
unsigned int fnum, block;
|
unsigned int fnum, block;
|
||||||
int offset = this->_GetOffset(ch);
|
int offset = this->_GetOffset(ch);
|
||||||
|
// ZDoom emulator seems to be tuned down by two semitones for some reason.
|
||||||
|
if (ZDOOM == emulator) {
|
||||||
|
frqHz *= 1.122461363636364f;
|
||||||
|
}
|
||||||
_milliHertzToFnum((unsigned int)(frqHz * 1000.0), &fnum, &block);
|
_milliHertzToFnum((unsigned int)(frqHz * 1000.0), &fnum, &block);
|
||||||
_WriteReg(0xa0+offset, fnum % 0x100);
|
_WriteReg(0xa0+offset, fnum % 0x100);
|
||||||
uint8 trig = (regCache[0xb0+offset] & 0x20) | (keyOn ? 0x20 : 0x00);
|
uint8 trig = (regCache[0xb0+offset] & 0x20) | (keyOn ? 0x20 : 0x00);
|
||||||
|
@ -216,7 +223,7 @@ void Hiopl::_milliHertzToFnum(unsigned int milliHertz,
|
||||||
}
|
}
|
||||||
|
|
||||||
Hiopl::~Hiopl() {
|
Hiopl::~Hiopl() {
|
||||||
delete Buf32;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool Hiopl::_CheckParams(int ch, int osc=OSCILLATORS) {
|
bool Hiopl::_CheckParams(int ch, int osc=OSCILLATORS) {
|
||||||
|
|
|
@ -63,7 +63,6 @@ class Hiopl {
|
||||||
Adlib::Handler *adlib;
|
Adlib::Handler *adlib;
|
||||||
OPLEmul *zdoom;
|
OPLEmul *zdoom;
|
||||||
Bit8u regCache[256];
|
Bit8u regCache[256];
|
||||||
Bit32s *Buf32;
|
|
||||||
bool _CheckParams(int ch, int osc);
|
bool _CheckParams(int ch, int osc);
|
||||||
int _GetOffset(int ch, int osc);
|
int _GetOffset(int ch, int osc);
|
||||||
int _GetOffset(int ch);
|
int _GetOffset(int ch);
|
||||||
|
|
Loading…
Reference in a new issue