Can confirm that this is working. The reason is because these speakers in the current state work best when running at a volume of 100%, which is undoable with the default setup. However, with ALSA’s soft mixer in the mix which enables you to put the volume at 100% at the hardware level it works great.
And with the EasyEffects presets shared in the community they might even sound a little bit better. I am experimenting with one made by cab at the moment:
https://community.frame.work/t/guide-yet-another-easyeffects-profile/
Anyhow, here’s how to pull it off.
First make sure all the basic requirements are available: pipewire, wireplumber and very importantly alsa-utils (which contains alsactl and alsamixer).
Also make sure the master volume in your desktop environment is set to about 50% else the speakers will get pretty freaking loud in just a few seconds.
Then switch to or open a console and login with your user account, to gain access to pipewire, if needed.
Next, find your Ryzen HD Audio controller:
wpctl status
Note the number it is listed at. At my Framework 16 it is 45
So let’s inspect device 45:
wpctl inspect 45
You will notice output with some properties including a device name:
id 45, type Pipewire:Interface:Device
[...]
* device.name = "alsa_card.pci-0000_c3_00.6"
[...]
Write the name down, you will need it for the custom rule you are going to write in just a few moments.
I like all my custom configs in the same directory, so I am logging in as root and then move to:
/etc/wireplumber/wireplumber.conf.d
This is the place where you can dump system wide additional pipewire configuration files to complement the main one.
Next. create a new config file. I named mine alsa-soft-mixer.conf for now. The contents are:
monitor.alsa.rules = [
{
matches = [
{
device.name = "alsa_card.pci-0000_c3_00.6"
}
]
actions = {
update-props = {
# Do not use the hardware mixer for volume control. It
# will only use software volume. The mixer is still used
# to mute unused paths based on the selected port.
api.alsa.soft-mixer = true
}
}
}
]
After saving somehow make sure your audio subsystem is cleanly restarted. I prefer a clean reboot over restarting pipewire. Your preference might be different
Now when inspecting the same device you will notice an additional property has been added:
wpctl inspect 45
id 45, type Pipewire:Interface:Device
[...]
api.alsa.soft-mixer = "true"
[...]
This means the ALSA soft mixer is now enabled on that device.
A side effect of this is by default the master volume on the device itselves will be muted. So no audio for now. We’ll get to that in just a second.
With your normal user account start alsamixer:
alsamixer
Press F6 to cycle through the available audio devices. Go through each one until you see
Card: HD-Audio Generic
Chip: Realtek ALC285
in the top left corner. On my Framework 16 it was the second option
default:1 HD Audio Generic
which did the trick.
You will see a number of oldskool ASCII sliders, with the volume of the speakers cranked to 100%
You will also see the Master Volume currently being muted.
Make sure the Master volume is selected. Unmute it by pressing the M key on your keyboard, then crank the volume all the way up to 100% using the cursor up key.
This is, by the way, the reason why you should have tempered the volume a little bit using your favorite volume controller in your desktop environment.
Next, press ESC to exit.
To make this change permanent run the following as root
alsactl store
After following these steps you should be able to enjoy a bit more reasonable good audio coming from the built in speakers as-is on any volume level. But like I said earlier, you still might want to throw EasyEffects in the mix though, for a little bit more oomph