diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 47748770..0d6b4b1d 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -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 diff --git a/src/gui/gui.h b/src/gui/gui.h index c722bf14..f9a6d517 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -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; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 8b7348b0..ccd79cda 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -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);