Skip to content

Commit 07af13e

Browse files
committed
Add volume sliders for CD-ROM Audio, PSG and ADPCM. Fix #50
1 parent 9f5527a commit 07af13e

File tree

13 files changed

+170
-76
lines changed

13 files changed

+170
-76
lines changed

platforms/libretro/libretro.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,9 @@ static void set_variabless(void)
606606
{ "geargrafx_avenue_pad_3_switch", "Avenue Pad 3 Switch; Auto|SELECT|RUN" },
607607
{ "geargrafx_soft_reset", "Soft Reset; Enabled|Disabled" },
608608
{ "geargrafx_up_down_allowed", "Allow Up+Down / Left+Right; Disabled|Enabled" },
609+
{ "geargrafx_psg_volume", "PSG Volume; 100|0|10|20|30|40|50|60|70|80|90|100|110|120|130|140|150|160|170|180|190|200" },
610+
{ "geargrafx_cdrom_volume", "PSG Volume; 100|0|10|20|30|40|50|60|70|80|90|100|110|120|130|140|150|160|170|180|190|200" },
611+
{ "geargrafx_adpcm_volume", "PSG Volume; 100|0|10|20|30|40|50|60|70|80|90|100|110|120|130|140|150|160|170|180|190|200" },
609612
{ NULL }
610613
};
611614

@@ -813,4 +816,40 @@ static void check_variables(void)
813816
{
814817
allow_up_down = (strcmp(var.value, "Enabled") == 0);
815818
}
819+
820+
var.key = "geargrafx_psg_volume";
821+
var.value = NULL;
822+
823+
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
824+
{
825+
int volume = atoi(var.value);
826+
if (volume < 0 || volume > 200)
827+
volume = 100;
828+
float volume_f = (float)volume / 100.0f;
829+
core->GetAudio()->SetPSGVolume(volume_f);
830+
}
831+
832+
var.key = "geargrafx_cdrom_volume";
833+
var.value = NULL;
834+
835+
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
836+
{
837+
int volume = atoi(var.value);
838+
if (volume < 0 || volume > 200)
839+
volume = 100;
840+
float volume_f = (float)volume / 100.0f;
841+
core->GetAudio()->SetCDROMVolume(volume_f);
842+
}
843+
844+
var.key = "geargrafx_adpcm_volume";
845+
var.value = NULL;
846+
847+
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
848+
{
849+
int volume = atoi(var.value);
850+
if (volume < 0 || volume > 200)
851+
volume = 100;
852+
float volume_f = (float)volume / 100.0f;
853+
core->GetAudio()->SetADPCMVolume(volume_f);
854+
}
816855
}

platforms/shared/desktop/config.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,9 @@ void config_read(void)
254254

255255
config_audio.enable = read_bool("Audio", "Enable", true);
256256
config_audio.sync = read_bool("Audio", "Sync", true);
257-
config_audio.mute_psg = read_bool("Audio", "MutePSG", false);
258-
config_audio.mute_cd = read_bool("Audio", "MuteCD", false);
259-
config_audio.mute_adpcm = read_bool("Audio", "MuteADPCM", false);
257+
config_audio.psg_volume = read_float("Audio", "PSGVolume", 1.0f);
258+
config_audio.cdrom_volume = read_float("Audio", "CDROMVolume", 1.0f);
259+
config_audio.adpcm_volume = read_float("Audio", "ADPCMVolume", 1.0f);
260260

261261
config_input.turbo_tap = read_bool("Input", "TurboTap", false);
262262

@@ -436,9 +436,9 @@ void config_write(void)
436436

437437
write_bool("Audio", "Enable", config_audio.enable);
438438
write_bool("Audio", "Sync", config_audio.sync);
439-
write_bool("Audio", "MutePSG", config_audio.mute_psg);
440-
write_bool("Audio", "MuteCD", config_audio.mute_cd);
441-
write_bool("Audio", "MuteADPCM", config_audio.mute_adpcm);
439+
write_float("Audio", "PSGVolume", config_audio.psg_volume);
440+
write_float("Audio", "CDROMVolume", config_audio.cdrom_volume);
441+
write_float("Audio", "ADPCMVolume", config_audio.adpcm_volume);
442442

443443
write_bool("Input", "TurboTap", config_input.turbo_tap);
444444

platforms/shared/desktop/config.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ struct config_Audio
9090
{
9191
bool enable = true;
9292
bool sync = true;
93-
bool mute_psg = false;
94-
bool mute_cd = false;
95-
bool mute_adpcm = false;
93+
float psg_volume = 1.0f;
94+
float cdrom_volume = 1.0f;
95+
float adpcm_volume = 1.0f;
9696
};
9797

9898
struct config_Input

platforms/shared/desktop/emu.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,19 +188,19 @@ void emu_audio_mute(bool mute)
188188
geargrafx->GetAudio()->Mute(mute);
189189
}
190190

191-
void emu_audio_mute_psg(bool mute)
191+
void emu_audio_psg_volume(float volume)
192192
{
193-
geargrafx->GetAudio()->MutePSG(mute);
193+
geargrafx->GetAudio()->SetPSGVolume(volume);
194194
}
195195

196-
void emu_audio_mute_adpcm(bool mute)
196+
void emu_audio_adpcm_volume(float volume)
197197
{
198-
geargrafx->GetAudio()->MuteADPCM(mute);
198+
geargrafx->GetAudio()->SetADPCMVolume(volume);
199199
}
200200

201-
void emu_audio_mute_cdrom(bool mute)
201+
void emu_audio_cdrom_volume(float volume)
202202
{
203-
geargrafx->GetAudio()->MuteCDROM(mute);
203+
geargrafx->GetAudio()->SetCDROMVolume(volume);
204204
}
205205

206206
void emu_audio_reset(void)

platforms/shared/desktop/emu.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ EXTERN bool emu_is_debug_idle(void);
7272
EXTERN bool emu_is_empty(void);
7373
EXTERN void emu_reset(void);
7474
EXTERN void emu_audio_mute(bool mute);
75-
EXTERN void emu_audio_mute_psg(bool mute);
76-
EXTERN void emu_audio_mute_adpcm(bool mute);
77-
EXTERN void emu_audio_mute_cdrom(bool mute);
75+
EXTERN void emu_audio_psg_volume(float volume);
76+
EXTERN void emu_audio_adpcm_volume(float volume);
77+
EXTERN void emu_audio_cdrom_volume(float volume);
7878
EXTERN void emu_audio_reset(void);
7979
EXTERN bool emu_is_audio_enabled(void);
8080
EXTERN bool emu_is_audio_open(void);

platforms/shared/desktop/gui.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,14 @@ void gui_init(void)
104104

105105
set_style();
106106

107+
gui_audio_mute_cdrom = false;
108+
gui_audio_mute_psg = false;
109+
gui_audio_mute_adpcm = false;
110+
107111
emu_audio_mute(!config_audio.enable);
108-
emu_audio_mute_psg(config_audio.mute_psg);
109-
emu_audio_mute_cdrom(config_audio.mute_cd);
110-
emu_audio_mute_adpcm(config_audio.mute_adpcm);
112+
emu_audio_psg_volume(config_audio.psg_volume);
113+
emu_audio_cdrom_volume(config_audio.cdrom_volume);
114+
emu_audio_adpcm_volume(config_audio.adpcm_volume);
111115
emu_set_composite_palette(config_video.composite_palette);
112116
emu_video_no_sprite_limit(config_video.sprite_limit);
113117
emu_set_overscan(config_debug.debug ? 0 : config_video.overscan);

platforms/shared/desktop/gui.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ EXTERN SDL_Scancode* gui_configured_key;
6868
EXTERN int* gui_configured_button;
6969
EXTERN bool gui_dialog_in_use;
7070
EXTERN bool gui_shortcut_open_rom;
71+
EXTERN bool gui_audio_mute_cdrom;
72+
EXTERN bool gui_audio_mute_psg;
73+
EXTERN bool gui_audio_mute_adpcm;
7174

7275
EXTERN void gui_init(void);
7376
EXTERN void gui_destroy(void);

platforms/shared/desktop/gui_debug_adpcm.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,20 @@ void gui_debug_window_adpcm(void)
5959

6060
ImGui::TableNextColumn();
6161

62-
ImGui::PushStyleColor(ImGuiCol_Text, config_audio.mute_adpcm ? mid_gray : white);
62+
ImGui::PushStyleColor(ImGuiCol_Text, gui_audio_mute_adpcm ? mid_gray : white);
6363
ImGui::PushFont(gui_material_icons_font);
6464

6565
char label[32];
66-
snprintf(label, 32, "%s##adpcmmute", config_audio.mute_adpcm ? ICON_MD_MUSIC_OFF : ICON_MD_MUSIC_NOTE);
66+
snprintf(label, 32, "%s##adpcmmute", gui_audio_mute_adpcm ? ICON_MD_MUSIC_OFF : ICON_MD_MUSIC_NOTE);
6767
if (ImGui::Button(label))
6868
{
69-
config_audio.mute_adpcm = !config_audio.mute_adpcm;
70-
emu_audio_mute_adpcm(config_audio.mute_adpcm);
69+
gui_audio_mute_adpcm = !gui_audio_mute_adpcm;
70+
emu_audio_adpcm_volume(gui_audio_mute_adpcm ? 0.0f : config_audio.adpcm_volume);
7171
}
72+
ImGui::PopStyleColor();
7273
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
7374
ImGui::SetTooltip("Mute ADPCM");
74-
7575
ImGui::PopFont();
76-
ImGui::PopStyleColor();
7776

7877
ImGui::TableNextColumn();
7978

platforms/shared/desktop/gui_debug_cdrom_audio.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,20 @@ void gui_debug_window_cdrom_audio(void)
6262

6363
ImGui::TableNextColumn();
6464

65-
ImGui::PushStyleColor(ImGuiCol_Text, config_audio.mute_cd ? mid_gray : white);
65+
ImGui::PushStyleColor(ImGuiCol_Text, gui_audio_mute_cdrom ? mid_gray : white);
6666
ImGui::PushFont(gui_material_icons_font);
6767

6868
char label[32];
69-
snprintf(label, 32, "%s##cdaudiomute", config_audio.mute_cd ? ICON_MD_MUSIC_OFF : ICON_MD_MUSIC_NOTE);
69+
snprintf(label, 32, "%s##cdaudiomute", gui_audio_mute_cdrom ? ICON_MD_MUSIC_OFF : ICON_MD_MUSIC_NOTE);
7070
if (ImGui::Button(label))
7171
{
72-
config_audio.mute_cd = !config_audio.mute_cd;
73-
emu_audio_mute_cdrom(config_audio.mute_cd);
72+
gui_audio_mute_cdrom = !gui_audio_mute_cdrom;
73+
emu_audio_cdrom_volume(gui_audio_mute_cdrom ? 0.0f : config_audio.cdrom_volume);
7474
}
75+
ImGui::PopStyleColor();
7576
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
7677
ImGui::SetTooltip("Mute CD Audio");
77-
7878
ImGui::PopFont();
79-
ImGui::PopStyleColor();
8079

8180
ImGui::TableNextColumn();
8281

platforms/shared/desktop/gui_menus.cpp

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -820,19 +820,72 @@ static void menu_audio(void)
820820

821821
ImGui::Separator();
822822

823-
if (ImGui::MenuItem("Mute PSG", "", &config_audio.mute_psg, config_audio.enable))
823+
if (ImGui::MenuItem("Mute PSG", "", &gui_audio_mute_psg, config_audio.enable))
824824
{
825-
emu_audio_mute_psg(config_audio.mute_psg);
825+
emu_audio_psg_volume(gui_audio_mute_psg ? 0 : config_audio.psg_volume);
826826
}
827827

828-
if (ImGui::MenuItem("Mute CD-ROM", "", &config_audio.mute_cd, config_audio.enable))
828+
if (ImGui::MenuItem("Mute CD-ROM", "", &gui_audio_mute_cdrom, config_audio.enable))
829829
{
830-
emu_audio_mute_cdrom(config_audio.mute_cd);
830+
emu_audio_cdrom_volume(gui_audio_mute_cdrom ? 0 : config_audio.cdrom_volume);
831831
}
832832

833-
if (ImGui::MenuItem("Mute ADPCM", "", &config_audio.mute_adpcm, config_audio.enable))
833+
if (ImGui::MenuItem("Mute ADPCM", "", &gui_audio_mute_adpcm, config_audio.enable))
834834
{
835-
emu_audio_mute_adpcm(config_audio.mute_adpcm);
835+
emu_audio_adpcm_volume(gui_audio_mute_adpcm ? 0 : config_audio.adpcm_volume);
836+
}
837+
838+
ImGui::Separator();
839+
840+
if (ImGui::BeginMenu("PSG Volume", config_audio.enable))
841+
{
842+
ImGui::PushItemWidth(200.0f);
843+
if (ImGui::SliderFloat("##psg_volume", &config_audio.psg_volume, 0.0f, 2.0f, "Volume = %.2f"))
844+
{
845+
emu_audio_psg_volume(config_audio.psg_volume);
846+
}
847+
ImGui::PopItemWidth();
848+
if (ImGui::IsItemHovered())
849+
{
850+
ImGui::BeginTooltip();
851+
ImGui::Text("Anything above 1.00 may cause clipping.");
852+
ImGui::EndTooltip();
853+
}
854+
ImGui::EndMenu();
855+
}
856+
857+
if (ImGui::BeginMenu("CD-ROM Volume", config_audio.enable))
858+
{
859+
ImGui::PushItemWidth(200.0f);
860+
if (ImGui::SliderFloat("##cdrom_volume", &config_audio.cdrom_volume, 0.0f, 2.0f, "Volume = %.2f"))
861+
{
862+
emu_audio_cdrom_volume(config_audio.cdrom_volume);
863+
}
864+
ImGui::PopItemWidth();
865+
if (ImGui::IsItemHovered())
866+
{
867+
ImGui::BeginTooltip();
868+
ImGui::Text("Anything above 1.00 may cause clipping.");
869+
ImGui::EndTooltip();
870+
}
871+
ImGui::EndMenu();
872+
}
873+
874+
if (ImGui::BeginMenu("ADPCM Volume", config_audio.enable))
875+
{
876+
ImGui::PushItemWidth(200.0f);
877+
if (ImGui::SliderFloat("##adpcm_volume", &config_audio.adpcm_volume, 0.0f, 2.0f, "Volume = %.2f"))
878+
{
879+
emu_audio_adpcm_volume(config_audio.adpcm_volume);
880+
}
881+
ImGui::PopItemWidth();
882+
if (ImGui::IsItemHovered())
883+
{
884+
ImGui::BeginTooltip();
885+
ImGui::Text("Anything above 1.00 may cause clipping.");
886+
ImGui::EndTooltip();
887+
}
888+
ImGui::EndMenu();
836889
}
837890

838891
ImGui::Separator();

0 commit comments

Comments
 (0)