Please do not post a support request without first reading and following the advice in https://retropie.org.uk/forum/topic/3/read-this-first

how to make volume up and volume down with buttons



  • There are a few problems with using hotkeys. First, your hotkeys are only active in RetroArch, so that is a problem for standalone emulators. Second, you have to be in a game having launched the lr-emulator in order to make the adjustment. Finally, is this a change the the emulator volume, or does the hotkey method send a command to the ALSA config and change the volume overall?

    I have been using a solution for a couple years now that leverages GPIO inputs. I have a pair of buttons connected to GPIO pins and using software (you could script it or use an input utility like GPIONext, Retrogame, etc.) I have these buttons sending commands to amixer to increase or decrease the volume:

    Volume UP:
    /usr/bin/amixer -q -c 0 sset PCM 1dB+ unmet no cap
    Volume DOWN:
    /usr/bin/amixer -q -c 0 sset PCM 1dB- unmet no cap

    These work great at the command line, so they work just as well as commands linked to GPIO triggers so long as you are not doing something unusual with ALSA drivers. My speakers run off of the 3.5mm jack and I have a GPIONext running at startup to watch for me to press my volume buttons. The best part is that this works everywhere. I can be in Emulation Station, playing a game with any emulator, or even running Pixel desktop.



  • @caver01 How do you do this is their a tutorial any where?



  • @retroprogrammer I second that. @caver01 ’s solution looks to be exactly what I am looking for, if only I knew how to do it :-)



  • This can probably help you guys with the other end of the solution: https://www.reddit.com/r/RetroPie/comments/777ylv/how_to_map_a_controller_to_soft_reboot_your_system/



  • @douga and @retroprogrammer a tutorial does not exactly exist but the process is basically this:

    Wire your buttons to usable GPIO pins, other pole of the switches go to ground. Then, follow instructions here for installing and setting up GPIONext. What you want is to configure buttons as commands which is one of the options.

    There are other ways to do the software, but the basis of this solution is to have some kind of script running, be it python or BASH that detects the button presses and sends the commands. That is what GPIONext does in addition to serving as a driver for game controller input.



  • @retroprogrammer It works fine, abeit only in RetroArch and not in other emulators, as @caver01 mentioned. Since I mostly use RA, it's fine for me.

    As @Lurker said, if your audio signal goes through an amplifier, you'll have to adjust that to a volume that allows a good range of volume via the hotkeys and the maximum volume shouldn't be too much for the speakers. Contrary to @Lurker, I can (and do) adjust the volume to many different levels between full and none, although it requires only the slightest nudge of the joystick to change the volume by several values.

    @caver01's solution is more versatile, but for now I'm too lazy to dive into it and I'm content with RA's hotkeys. :)



  • Although I take my audio signal from the jack, I do run an amplifier--just a cheap thing that came with my USB powered speakers. The key to optimizing the range is to set all of your digital controls, amixer etc, to 100% so you are sending a full signal, then adjusting your amplifier volume to the maximum level without distortion (or the max you are comfortable using). Then, you can leave the amp controls alone and make adjustments digitally.

    With my setup, I can tap the volume buttons or hold them down. I get plenty of granularity based on the underlying commands and I don't feel the need to increase the increment in the command. + or - 1dB seems to be a good setting that allows me to hear subtle changes with each adjustment. In other words, the change is not so small as to be inconveniently slow, and it is not so big so as to feel limiting in terms of incremental change.



  • @caver01 I realize this thread is a bit old, but any chance you can share how you got holding the button down working with volume? I currently have GPIOnext working great with your volume commands, but it's a one press per command thing. I haven't been able to figure out getting it to run the commands multiple times if I hold the button down.



  • @DougA I have a pretty similar setup to this, speaker volume is set at a limit which I do not change, i then us retroarch and hotkeys to control the volume (select + joystick up to raise the volume for example)



  • @caver01 Sir,
    first of all thanks for the trick! I have two player usb encoder setup. Whatever i did unable to figure out to ran the volume up and down command over GPIO on raspberry pi or from on my joyistic buttons.
    Would you please share with us in here your used python or shell script or whatever using to up and down the volume with buttons.Thanks



  • @stazna01 Would you please share with us in here your running configuration on the GPIONext? I unable to map my joyistic any button to decreise or increise the volume.Thanks advance..



  • @ooskay said in how to make volume up and volume down with buttons:

    @caver01 Sir,
    first of all thanks for the trick! I have two player usb encoder setup. Whatever i did unable to figure out to ran the volume up and down command over GPIO on raspberry pi or from on my joyistic buttons.
    Would you please share with us in here your used python or shell script or whatever using to up and down the volume with buttons.Thanks

    Sorry, I am not near my system to share a config, and at this point I don't even remember how or where to find a config. I simply followed the instructions to setup the software, then added commands via the web interface using the GPIO pins I know I am using.

    I will add that for a second go-round on a NESPi setup, I simply wrote a Python script to manage GPIO inputs watching for EDGE triggers, then executing commands. If I could do over again, I would not need to use something with the fancy setup and web interface like GPIOnext. Raw Python would work fine.



  • I have figured out an easy way to change the volume within retroarch configuration. Yes, you will need a game loaded in order to change the volume and this only applies to emulators managed by retroarch but I find it is the best way for me to change the volume in my small arcade cabinet and also my Game Boy zero build.

    I recorded the process but it is as follows:

    RetroPie --> retroarch --> Main Menu --> Settings --> Input --> Hotkey binds

    Then just make sure your binds dont clash with any existing ones, set the control for volume i.e. left/right and save the configuration before quitting retroarch.

    In game you will be able to control the volume with your controls whilst holding the hotkey (select if you dont have a dedicated hotkey).



  • @fredbuilder This was discussed earlier in this thread, but via direct editing of the config file. Thanks for the addition about the GUI and for the video. Nice handheld. 🤩



Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.

Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.