• Recent
  • Tags
  • Popular
  • Home
  • Docs
  • Register
  • Login
RetroPie forum home
  • Recent
  • Tags
  • Popular
  • Home
  • Docs
  • Register
  • Login
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

[SOLVED] [TRIGGERHAPPY] Use USB audio dongle's volume buttons in Retropie

Scheduled Pinned Locked Moved Help and Support
usb audio cardbuttonsvolume controlretropie 4.3volumecontrol
9 Posts 3 Posters 1.6k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B
    blackjackpsp
    last edited by blackjackpsp 3 Jun 2019, 12:24 10 Feb 2019, 20:27

    Hi everyone,

    I'm studying since different months how to do works USB dongle's audio button to set the emulation station volume, without success.

    I've installed my standard USB audio sound card, and following different tutorials I've setted it as primary sound card.
    This is my amixer output

    pi@retropie:~ $ amixer
    Simple mixer control 'Speaker',0
      Capabilities: pvolume pswitch pswitch-joined
      Playback channels: Front Left - Front Right
      Limits: Playback 0 - 151
      Mono:
      Front Left: Playback 145 [96%] [-1.19dB] [on]
      Front Right: Playback 145 [96%] [-1.19dB] [on]
    Simple mixer control 'Mic',0
      Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
      Playback channels: Mono
      Capture channels: Mono
      Limits: Playback 0 - 127 Capture 0 - 16
      Mono: Playback 0 [0%] [0.00dB] [off] Capture 16 [100%] [23.81dB] [on]
    Simple mixer control 'Auto Gain Control',0
      Capabilities: pswitch pswitch-joined
      Playback channels: Mono
      Mono: Playback [off]
    

    and this is the output of cat

    pi@retropie:~ $ cat /etc/asound.conf
    pcm.card0 {
    type hw card 0
    }
    ctl.card0 {
    type hw card 0
    }
    
    pcm.!default card0
    
    

    This is my retopie version

    pi@retropie:~/RetroPie-Setup $ git show
    commit fffbe6f160373b7fef7744789f0a56fc46dd6f08
    Author: Jools Wills <buzz@exotica.org.uk>
    Date:   Thu Sep 21 13:17:37 2017 +0100
    
        retropie-setup - bump version to 4.3
    
    diff --git a/retropie_packages.sh b/retropie_packages.sh
    index 819f035..b26d74f 100755
    --- a/retropie_packages.sh
    +++ b/retropie_packages.sh
    @@ -9,7 +9,7 @@
     # at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md
     #
    
    -__version="4.2.22"
    +__version="4.3"
    
     [[ "$__debug" -eq 1 ]] && set -x
    
    

    I've tried to follow this guide

    amixer -l
    
    Note the name of your mixer. Mine was named "Speaker".
    
    Now run:
    
    git clone https://github.com/Aloshi/EmulationStation.git
    nano EmulationStation/es-app/src/VolumeControl.cpp
    
    Change line 8 from:
    
    const char * VolumeControl::mixerName = "PCM";
    
    to match the name of your mixer ("Speaker" in my case):
    
    const char * VolumeControl::mixerName = "Speaker";
    
    Press Ctrl+O and Enter to save the file, then Ctrl+X to exit Nano.
    
    Then, follow the instructions for building the code from the main Github
    page:
    
    sudo apt-get install libsdl2-dev libboost-system-dev libboost-filesystem-dev libboost-date-time-dev libboost-locale-dev libfreeimage-dev libfreetype6-dev libeigen3-dev libcurl4-openssl-dev libasound2-dev libgl1-mesa-dev build-essential cmake fonts-droid
    
    cd EmulationStation
    cmake .
    make
    make install
    
    Restart Emulation Station, and now you should be able to control your
    volume.
    

    But also this method hasn't worked for me

    How I can solve this issue?

    Thanks for all the help that you can provide me.

    Regards

    L 1 Reply Last reply 11 Feb 2019, 18:42 Reply Quote 0
    • L
      Lolonois @blackjackpsp
      last edited by 11 Feb 2019, 18:42

      @blackjackpsp Hello and welcome to Retropie-Forum. To reduce the time volunteers need to provide help and to frame the question right make sure you read and understood https://retropie.org.uk/forum/topic/3/read-this-first
      Thanks.

      I am not sure do you want to control the volume physically (since you refer to buttons) or the volume controlled by software?

      For the former I would go for a potentiometer (https://en.wikipedia.org/wiki/Potentiometer#Audio_control). 50KOhm or the like, get a dual one if you have stereo. Else a single potentiometer will do (Mono). Put the potientiometer between the USB audio device line out and amplifier line in. Some Amps (e.g. some models from Sure Electronics) do have a pinout to attach such a potentiometer on the PCB.

      Since the USB audio volume tends to be reset to a default value (by the firmware of USB device) between shutdown/reboot in my case I added amixer sset 'Headphone' 100% to /etc/rc.local (my USB device is registered as 'Headphone').
      I control the actual speaker volume with a potentiometer.

      For the latter I have no idea if it works as you described. Maybe you can pull the author of the hint into this thread?

      HTH

      B 1 Reply Last reply 15 Feb 2019, 07:56 Reply Quote 0
      • M
        mitu Global Moderator
        last edited by 11 Feb 2019, 18:46

        The latest Emulationstation version has a few improvements in this area, allowing you to choose more than PCM as output device. However, judging from your version of RetroPie, you're running a release from more than 1 year ago, so these improvements would not be visible unless you upgrade your Emulationstation version.

        1 Reply Last reply Reply Quote 0
        • B
          blackjackpsp @Lolonois
          last edited by 15 Feb 2019, 07:56

          @Lolonois Hi Lolonois,
          I want to control the volume by software, by catching usb dongle button pression, and update system volume.

          Any suggestion in this direction?

          thank for very useful response

          :)

          1 Reply Last reply Reply Quote 0
          • L
            Lolonois
            last edited by Lolonois 15 Feb 2019, 18:15

            @blackjackpsp you can go the way of "catching usb dongle button pression" but I assume it can be done easier (see second paragraph).
            However, if you insist on your approach you should find out if the USB Audio registers also a HID Keyboard (lsusb). If yes, then you may be lucky and can find which key presses on a keyboard (most likely multimedia enhanced USB keyboard - the ones with dedicated volume keys aso.) the USB audio buttons do recognize. This varies from USB audio device vendor to vendor. IMHO a troublesome solution.

            I would follow the amixer sset aproach which should give you the same result and should be easier to implement:

            • With a physical keyboard attached you can map commands with triggerhappy. e.g. amixer sset '<your device>' 10%+ (or 10+ depends on audio device, in this case not the Limits: output of amixer to calculate to percent) for volume up. Define a second keystroke for volume down.
            • With a acrade button / gamepad only setup you could use e.g. jslisten github.com to achieve the same.

            HTH

            B 1 Reply Last reply 19 Feb 2019, 06:46 Reply Quote 0
            • B
              blackjackpsp @Lolonois
              last edited by 19 Feb 2019, 06:46

              @Lolonois

              Hi lolonois, thanks for very helpful suggestions.
              I've tried to trigger the button pressed with triggerhappy's instruction

              thd --dump /dev/input/*

              and I've created a conf file in
              /etc/triggerhappy/triggers.d/sound.conf where I've setted as follow

              /etc/triggerhappy/triggers.d/sound.conf

              Change mixer volume when pressing the appropriate keys (or holding them)

              KEY_VOLUMEUP 0 /usr/bin/amixer set Speaker 5%+
              KEY_VOLUMEUP 1 /usr/bin/amixer set Speaker 5%+
              KEY_VOLUMEDOWN 0 /usr/bin/amixer set Speaker 5%-
              KEY_VOLUMEDOWN 1 /usr/bin/amixer set Speaker 5%-

              but after restart the daemon, the button doesn't change the Speaker volume
              The single instruction /usr/bin/amixer set Speaker 5%+ works

              What am I doing wrong?

              Thanks in advance for all the help

              L 1 Reply Last reply 19 Feb 2019, 21:03 Reply Quote 0
              • L
                Lolonois @blackjackpsp
                last edited by 19 Feb 2019, 21:03

                @blackjackpsp

                Eat the elephant piece by piece... (remember "how to eat an elephant")

                Just some ideas you might try, I never used triggerhappy:

                1. Try to start triggerhappy not as daemon (omit --daemon switch if I understood the source thd.c right)
                2. Add some fprintf(stderr, "your text") at least at triggerparse.c, method parse_trigger() and trigger.c method run_triggers() recompile or attach a debugger and inspect these two methods.
                3. From the distance I assume your commands are not loaded at all, or for the the system call (see run_triggers() you need to use doublequotes, extra question: Do your actions work in triggerhappy if you use no % and +, e.g. amixer sset 'Speaker' mute / unmute / absolute number)
                4. Check the issues and pull requests from triggerhappy maybe you ran into one of them, e.g. this issue or this PR

                HTH

                B 1 Reply Last reply 5 Mar 2019, 06:55 Reply Quote 0
                • B
                  blackjackpsp @Lolonois
                  last edited by 5 Mar 2019, 06:55

                  Hi @Lolonois ,

                  I've investigated following the issue in the 4th point, and then the thd worked when I call from command line, so I've inserted in the crontab the command /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event* after 1 minute from reboot and the dongle buttons now set the system volume.

                  The next step will be use the new 4.4 version of retropie and try if the issue has been solved.

                  Thanks for all the help.

                  1 Reply Last reply Reply Quote 0
                  • L
                    Lolonois
                    last edited by 5 Mar 2019, 23:22

                    @blackjackpsp good to see you have found a workaround as solution. If you think this topic can be marked as solved please do adapt the subject of your inititial post (e.g. replace [HELP] with [Solved]).
                    If you want you may add Triggerhappy as additional label.

                    Cheers

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    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.

                      This community forum collects and processes your personal information.
                      consent.not_received