separate cores + selection for playback and export

This commit is contained in:
Eknous-P 2023-08-17 22:28:17 +04:00
parent edad084e5d
commit 8da1085809
3 changed files with 152 additions and 24 deletions

View File

@ -821,6 +821,18 @@ void DivEngine::runExportThread() {
size_t fadeOutSamples=got.rate*exportFadeOut;
size_t curFadeOutSample=0;
bool isFadingOut=false;
setConf("arcadeCore",getConfInt("arcadeCoreRender",0));
setConf("ym2612Core",getConfInt("ym2612CoreRender",0));
setConf("snCore",getConfInt("snCoreRender",0));
setConf("nesCore",getConfInt("nesCoreRender",0));
setConf("fdsCore",getConfInt("fdsCoreRender",0));
setConf("c64Core",getConfInt("c64CoreRender",0));
setConf("pokeyCore",getConfInt("pokeyCoreRender",0));
setConf("opnCore",getConfInt("opnCoreRender",0));
switchMaster(true);
switch (exportMode) {
case DIV_EXPORT_MODE_ONE: {
SNDFILE* sf;
@ -1144,6 +1156,18 @@ void DivEngine::runExportThread() {
break;
}
}
setConf("arcadeCore",getConfInt("arcadeCorePlayback",0));
setConf("ym2612Core",getConfInt("ym2612CorePlayback",0));
setConf("snCore",getConfInt("snCorePlayback",0));
setConf("nesCore",getConfInt("nesCorePlayback",0));
setConf("fdsCore",getConfInt("fdsCorePlayback",0));
setConf("c64Core",getConfInt("c64CorePlayback",0));
setConf("pokeyCore",getConfInt("pokeyCorePlayback",0));
setConf("opnCore",getConfInt("opnCorePlayback",0));
switchMaster(true);
stopExport=false;
}
#else

View File

@ -1419,6 +1419,22 @@ class FurnaceGUI {
int c64Core;
int pokeyCore;
int opnCore;
int arcadeCorePlayback;
int ym2612CorePlayback;
int snCorePlayback;
int nesCorePlayback;
int fdsCorePlayback;
int c64CorePlayback;
int pokeyCorePlayback;
int opnCorePlayback;
int arcadeCoreRender;
int ym2612CoreRender;
int snCoreRender;
int nesCoreRender;
int fdsCoreRender;
int c64CoreRender;
int pokeyCoreRender;
int opnCoreRender;
int pcSpeakerOutMethod;
String yrw801Path;
String tg100Path;

View File

@ -1192,42 +1192,74 @@ void FurnaceGUI::drawSettings() {
ImGui::AlignTextToFramePadding();
ImGui::Text("Arcade/YM2151 core");
ImGui::SameLine();
ImGui::Combo("##ArcadeCore",&settings.arcadeCore,arcadeCores,2);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##ArcadeCorePlayback",&settings.arcadeCorePlayback,arcadeCores,2);
ImGui::SameLine();
ImGui::Combo("##ArcadeCoreRender",&settings.arcadeCoreRender,arcadeCores,2);
ImGui::PopItemWidth();
ImGui::AlignTextToFramePadding();
ImGui::Text("Genesis/YM2612 core");
ImGui::SameLine();
ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##YM2612CorePlayback",&settings.ym2612CorePlayback,ym2612Cores,2);
ImGui::SameLine();
ImGui::Combo("##YM2612CoreRender",&settings.ym2612CoreRender,ym2612Cores,2);
ImGui::PopItemWidth();
ImGui::AlignTextToFramePadding();
ImGui::Text("SN76489 core");
ImGui::SameLine();
ImGui::Combo("##SNCore",&settings.snCore,snCores,2);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##SNCorePlayback",&settings.snCorePlayback,snCores,2);
ImGui::SameLine();
ImGui::Combo("##SNCoreRender",&settings.snCoreRender,snCores,2);
ImGui::PopItemWidth();
ImGui::AlignTextToFramePadding();
ImGui::Text("NES core");
ImGui::SameLine();
ImGui::Combo("##NESCore",&settings.nesCore,nesCores,2);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##NESCorePlayback",&settings.nesCorePlayback,nesCores,2);
ImGui::SameLine();
ImGui::Combo("##NESCoreRender",&settings.nesCoreRender,nesCores,2);
ImGui::PopItemWidth();
ImGui::AlignTextToFramePadding();
ImGui::Text("FDS core");
ImGui::SameLine();
ImGui::Combo("##FDSCore",&settings.fdsCore,nesCores,2);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##FDSCorePlayback",&settings.fdsCorePlayback,nesCores,2);
ImGui::SameLine();
ImGui::Combo("##FDSCoreRender",&settings.fdsCoreRender,nesCores,2);
ImGui::PopItemWidth();
ImGui::AlignTextToFramePadding();
ImGui::Text("SID core");
ImGui::SameLine();
ImGui::Combo("##C64Core",&settings.c64Core,c64Cores,3);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##C64CorePlayback",&settings.c64CorePlayback,c64Cores,3);
ImGui::SameLine();
ImGui::Combo("##C64CoreRender",&settings.c64CoreRender,c64Cores,3);
ImGui::PopItemWidth();
ImGui::AlignTextToFramePadding();
ImGui::Text("POKEY core");
ImGui::SameLine();
ImGui::Combo("##POKEYCore",&settings.pokeyCore,pokeyCores,2);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##POKEYCorePlayback",&settings.pokeyCorePlayback,pokeyCores,2);
ImGui::SameLine();
ImGui::Combo("##POKEYCoreRender",&settings.pokeyCoreRender,pokeyCores,2);
ImGui::PopItemWidth();
ImGui::AlignTextToFramePadding();
ImGui::Text("OPN/OPNA/OPNB cores");
ImGui::SameLine();
ImGui::Combo("##OPNCore",&settings.opnCore,opnCores,2);
ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x*0.4f);
ImGui::Combo("##OPNCorePlayback",&settings.opnCorePlayback,opnCores,2);
ImGui::SameLine();
ImGui::Combo("##OPNCoreRender",&settings.opnCoreRender,opnCores,2);
ImGui::PopItemWidth();
ImGui::Separator();
@ -2930,14 +2962,30 @@ void FurnaceGUI::syncSettings() {
settings.audioQuality=e->getConfInt("audioQuality",0);
settings.audioBufSize=e->getConfInt("audioBufSize",1024);
settings.audioRate=e->getConfInt("audioRate",44100);
settings.arcadeCore=e->getConfInt("arcadeCore",0);
settings.ym2612Core=e->getConfInt("ym2612Core",0);
settings.snCore=e->getConfInt("snCore",0);
settings.nesCore=e->getConfInt("nesCore",0);
settings.fdsCore=e->getConfInt("fdsCore",0);
settings.c64Core=e->getConfInt("c64Core",0);
settings.pokeyCore=e->getConfInt("pokeyCore",1);
settings.opnCore=e->getConfInt("opnCore",1);
settings.arcadeCore=settings.arcadeCorePlayback;
settings.ym2612Core=settings.ym2612CorePlayback;
settings.snCore=settings.snCorePlayback;
settings.nesCore=settings.nesCorePlayback;
settings.fdsCore=settings.fdsCorePlayback;
settings.c64Core=settings.c64CorePlayback;
settings.pokeyCore=settings.pokeyCorePlayback;
settings.opnCore=settings.opnCorePlayback;
settings.arcadeCorePlayback=e->getConfInt("arcadeCorePlayback",0);
settings.ym2612CorePlayback=e->getConfInt("ym2612CorePlayback",0);
settings.snCorePlayback=e->getConfInt("snCorePlayback",0);
settings.nesCorePlayback=e->getConfInt("nesCorePlayback",0);
settings.fdsCorePlayback=e->getConfInt("fdsCorePlayback",0);
settings.c64CorePlayback=e->getConfInt("c64CorePlayback",0);
settings.pokeyCorePlayback=e->getConfInt("pokeyCorePlayback",1);
settings.opnCorePlayback=e->getConfInt("opnCorePlayback",1);
settings.arcadeCoreRender=e->getConfInt("arcadeCoreRender",0);
settings.ym2612CoreRender=e->getConfInt("ym2612CoreRender",0);
settings.snCoreRender=e->getConfInt("snCoreRender",0);
settings.nesCoreRender=e->getConfInt("nesCoreRender",0);
settings.fdsCoreRender=e->getConfInt("fdsCoreRender",0);
settings.c64CoreRender=e->getConfInt("c64CoreRender",0);
settings.pokeyCoreRender=e->getConfInt("pokeyCoreRender",1);
settings.opnCoreRender=e->getConfInt("opnCoreRender",1);
settings.pcSpeakerOutMethod=e->getConfInt("pcSpeakerOutMethod",0);
settings.yrw801Path=e->getConfString("yrw801Path","");
settings.tg100Path=e->getConfString("tg100Path","");
@ -3098,6 +3146,22 @@ void FurnaceGUI::syncSettings() {
clampSetting(settings.c64Core,0,2);
clampSetting(settings.pokeyCore,0,1);
clampSetting(settings.opnCore,0,1);
clampSetting(settings.arcadeCorePlayback,0,1);
clampSetting(settings.ym2612CorePlayback,0,1);
clampSetting(settings.snCorePlayback,0,1);
clampSetting(settings.nesCorePlayback,0,1);
clampSetting(settings.fdsCorePlayback,0,1);
clampSetting(settings.c64CorePlayback,0,2);
clampSetting(settings.pokeyCorePlayback,0,1);
clampSetting(settings.opnCorePlayback,0,1);
clampSetting(settings.arcadeCoreRender,0,1);
clampSetting(settings.ym2612CoreRender,0,1);
clampSetting(settings.snCoreRender,0,1);
clampSetting(settings.nesCoreRender,0,1);
clampSetting(settings.fdsCoreRender,0,1);
clampSetting(settings.c64CoreRender,0,2);
clampSetting(settings.pokeyCoreRender,0,1);
clampSetting(settings.opnCoreRender,0,1);
clampSetting(settings.pcSpeakerOutMethod,0,4);
clampSetting(settings.mainFont,0,6);
clampSetting(settings.patFont,0,6);
@ -3280,14 +3344,22 @@ void FurnaceGUI::commitSettings() {
settings.mu5Path!=e->getConfString("mu5Path","");
bool coresChanged=(
settings.arcadeCore!=e->getConfInt("arcadeCore",0) ||
settings.ym2612Core!=e->getConfInt("ym2612Core",0) ||
settings.snCore!=e->getConfInt("snCore",0) ||
settings.nesCore!=e->getConfInt("nesCore",0) ||
settings.fdsCore!=e->getConfInt("fdsCore",0) ||
settings.c64Core!=e->getConfInt("c64Core",0) ||
settings.pokeyCore!=e->getConfInt("pokeyCore",1) ||
settings.opnCore!=e->getConfInt("opnCore",1)
settings.arcadeCorePlayback!=e->getConfInt("arcadeCore",0) ||
settings.ym2612CorePlayback!=e->getConfInt("ym2612Core",0) ||
settings.snCorePlayback!=e->getConfInt("snCore",0) ||
settings.nesCorePlayback!=e->getConfInt("nesCore",0) ||
settings.fdsCorePlayback!=e->getConfInt("fdsCore",0) ||
settings.c64CorePlayback!=e->getConfInt("c64Core",0) ||
settings.pokeyCorePlayback!=e->getConfInt("pokeyCore",1) ||
settings.opnCorePlayback!=e->getConfInt("opnCore",1) ||
settings.arcadeCoreRender!=e->getConfInt("arcadeCore",0) ||
settings.ym2612CoreRender!=e->getConfInt("ym2612Core",0) ||
settings.snCoreRender!=e->getConfInt("snCore",0) ||
settings.nesCoreRender!=e->getConfInt("nesCore",0) ||
settings.fdsCoreRender!=e->getConfInt("fdsCore",0) ||
settings.c64CoreRender!=e->getConfInt("c64Core",0) ||
settings.pokeyCoreRender!=e->getConfInt("pokeyCore",1) ||
settings.opnCoreRender!=e->getConfInt("opnCore",1)
);
e->setConf("mainFontSize",settings.mainFontSize);
@ -3312,6 +3384,22 @@ void FurnaceGUI::commitSettings() {
e->setConf("c64Core",settings.c64Core);
e->setConf("pokeyCore",settings.pokeyCore);
e->setConf("opnCore",settings.opnCore);
e->setConf("arcadeCorePlayback",settings.arcadeCorePlayback);
e->setConf("ym2612CorePlayback",settings.ym2612CorePlayback);
e->setConf("snCorePlayback",settings.snCorePlayback);
e->setConf("nesCorePlayback",settings.nesCorePlayback);
e->setConf("fdsCorePlayback",settings.fdsCorePlayback);
e->setConf("c64CorePlayback",settings.c64CorePlayback);
e->setConf("pokeyCorePlayback",settings.pokeyCorePlayback);
e->setConf("opnCorePlayback",settings.opnCorePlayback);
e->setConf("arcadeCoreRender",settings.arcadeCoreRender);
e->setConf("ym2612CoreRender",settings.ym2612CoreRender);
e->setConf("snCoreRender",settings.snCoreRender);
e->setConf("nesCoreRender",settings.nesCoreRender);
e->setConf("fdsCoreRender",settings.fdsCoreRender);
e->setConf("c64CoreRender",settings.c64CoreRender);
e->setConf("pokeyCoreRender",settings.pokeyCoreRender);
e->setConf("opnCoreRender",settings.opnCoreRender);
e->setConf("pcSpeakerOutMethod",settings.pcSpeakerOutMethod);
e->setConf("yrw801Path",settings.yrw801Path);
e->setConf("tg100Path",settings.tg100Path);