ES5506: Amiga pitch option......

This commit is contained in:
tildearrow 2024-06-24 02:44:17 -05:00
parent de935c3aac
commit 6d8a343ead
7 changed files with 233 additions and 77 deletions

View file

@ -7173,8 +7173,17 @@ void FurnaceGUI::drawInsEdit() {
macroList.push_back(FurnaceGUIMacroDesc(_("Arpeggio"),&ins->std.arpMacro,-120,120,160,uiColors[GUI_COLOR_MACRO_PITCH],true,NULL,macroHoverNote,false,NULL,true,ins->std.arpMacro.val));
macroList.push_back(FurnaceGUIMacroDesc(_("Pitch"),&ins->std.pitchMacro,-2048,2047,160,uiColors[GUI_COLOR_MACRO_PITCH],true,macroRelativeMode));
break;
case DIV_INS_ES5506:
macroList.push_back(FurnaceGUIMacroDesc(_("Volume"),&ins->std.volMacro,0,4095,160,uiColors[GUI_COLOR_MACRO_VOLUME]));
case DIV_INS_ES5506: {
float usesAmigaVol=true;
for (int i=0; i<e->song.systemLen; i++) {
if (e->song.system[i]==DIV_SYSTEM_ES5506) {
if (!e->song.systemFlags[i].getBool("amigaVol",false)) {
usesAmigaVol=false;
break;
}
}
}
macroList.push_back(FurnaceGUIMacroDesc(_("Volume"),&ins->std.volMacro,0,usesAmigaVol?64:4095,160,uiColors[GUI_COLOR_MACRO_VOLUME]));
macroList.push_back(FurnaceGUIMacroDesc(_("Arpeggio"),&ins->std.arpMacro,-120,120,160,uiColors[GUI_COLOR_MACRO_PITCH],true,NULL,macroHoverNote,false,NULL,true,ins->std.arpMacro.val));
macroList.push_back(FurnaceGUIMacroDesc(_("Filter Mode"),&ins->std.dutyMacro,0,3,160,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,&macroHoverES5506FilterMode));
macroList.push_back(FurnaceGUIMacroDesc(_("Panning (left)"),&ins->std.panLMacro,0,4095,160,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL));
@ -7186,6 +7195,7 @@ void FurnaceGUI::drawInsEdit() {
macroList.push_back(FurnaceGUIMacroDesc(_("Outputs"),&ins->std.fbMacro,0,5,64,uiColors[GUI_COLOR_MACRO_OTHER]));
macroList.push_back(FurnaceGUIMacroDesc(_("Control"),&ins->std.algMacro,0,2,32,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true,es5506ControlModes));
break;
}
case DIV_INS_MULTIPCM:
macroList.push_back(FurnaceGUIMacroDesc(_("Volume"),&ins->std.volMacro,0,127,160,uiColors[GUI_COLOR_MACRO_VOLUME]));
macroList.push_back(FurnaceGUIMacroDesc(_("Arpeggio"),&ins->std.arpMacro,-120,120,160,uiColors[GUI_COLOR_MACRO_PITCH],true,NULL,macroHoverNote,false,NULL,true,ins->std.arpMacro.val));

View file

@ -1273,6 +1273,7 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl
int channels=flags.getInt("channels",0x1f)+1;
int volScale=flags.getInt("volScale",4095);
bool amigaVol=flags.getBool("amigaVol",false);
bool amigaPitch=flags.getBool("amigaPitch",false);
ImGui::Text(_("Initial channel limit:"));
if (CWSliderInt("##OTTO_InitialChannelLimit",&channels,5,32)) {
if (channels<5) channels=5;
@ -1291,12 +1292,21 @@ bool FurnaceGUI::drawSysConf(int chan, int sysPos, DivSystem type, DivConfig& fl
if (ImGui::Checkbox(_("Amiga channel volumes (64)"),&amigaVol)) {
altered=true;
}
pushWarningColor(amigaPitch && e->song.linearPitch==2);
if (ImGui::Checkbox(_("Amiga-like pitch (non-linear pitch only)"),&amigaPitch)) {
altered=true;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("pitch linearity is set to linear. this won't do anything!");
}
popWarningColor();
if (altered) {
e->lockSave([&]() {
flags.set("channels",channels-1);
flags.set("volScale",volScale);
flags.set("amigaVol",amigaVol);
flags.set("amigaPitch",amigaPitch);
});
}
break;