I’ve had excellent results with the Adafruit Speaker Bonnet using a Pi Zero W and a couple of large speaker transducers on my desk. However this was when using a Pi Musicbox installation that handles volume control itself.
It may seem crazy that you need to reduce the volume but a volume level of 85% is amazingly effective and actually too loud on my big desk.
When I switched to using the latest Rasparian and used mpg123, the sound was really bad. I figured this was due to the volume being too high. Checks via ssh showed that the volume was in fact set to the maximum.
I’ve spent many hours trying to set the volume using amixer and alsamixer and have gone backwards and forwards between SD cards based on Pi Musicbox and the October release of Rasparian to no avail.
With a fresh install alsamixer allows me to change the volume. Once I apply the Speaker Bonnet setup that is the only device recognised. The screen shows the volume setting (set at maximum) but the Up and Down keys are ineffective. Note that amixer does not allow volume control either.
FYI, I have a DVB-T with DAB connected to the TV antenna feeding to Welle.io that uses Icecast to broadcast DAB radio to all devices connected to the LAN. I am trying to replace the kitchen radio with a hidden gadget behind a cupboard door.
I’m hoping that there is an update to control the Speaker Bonnet volume. It is a good device but it looks as though a standard Pi is better if you want volume control.
NEXT DAY
After more messing about I’ve found that the Adafruit quick setup does not work as intended. I’ve gone through the manual installation process where the contents of /etc/asound.conf differ from what is set by the quick setup. After I replaced the contents of asound.conf with what is specified for the manual installation I was able to change the sound volume using alsamixer.
With the sound at or below 85% the sound distortion is eliminated and the speaker transducers work well again.
A BIT LATER
After updating and upgrading Raspbarian the ability to set the volume with alsamixer was lost and the volume was set to 100% (above the distortion level). Back to square one.
AND HOURS LATER
This time I started from scratch with the October version of Rasparian Stretch. I did the sudo raspi-config, sudo apt-get update and sudo apt-get upgrade as well as sudo apt-get mpg123 before running the bonnet script. I also ran the script and rebooted several times but it looks as though I now have volume control via alsamixer between reboots.
AND 2 HOURS LATER
On startup the ability to set the volume has gone again. No changes. Running the setup script several times did not fix things. I can’t use this device until it works reliably.