-
Notifications
You must be signed in to change notification settings - Fork 10
Description
This issue seems to be on every distro for this device. The built-in microphone sounds atrocious and also picks up the audio from the speakers with echoes and reverberates to an extreme. Inaudible and screeching is how I describe it. So I used AI to help look for some answers wherever I could.
I had moderate success using Easy effects and RNNoise but still picked up the speakers.
I posted my attempts on reddit at a workaround with easy effects running in headless mode to get it in gaming mode. But to varying degrees of success. (I can link if you want to see or post details here but it is not a post solely about the issue.)
Eventually I read into the pipewire wiki for configurations and managed to find what I think was a better solution than easy effects.
In 'home/.config/pipewire/pipewire.conf.d/' I put a fil "10-echo-cancel.conf" with the contents below:
context.modules = [
{ name = libpipewire-module-echo-cancel
args = {
# 1. Monitor the speakers to subtract audio from mic
monitor.mode = true
# >>> ADD THIS SECTION <<<
# This turns on the background noise removal (Fans/Static)
aec.args = "webrtc.noise_suppression=true webrtc.gain_control=true"
# 2. Naming the nodes
source.props = {
node.name = "echo_cancel_source"
node.description = "Clean Mic (Echo Cancelled)"
}
sink.props = {
node.name = "echo-cancel-sink"
node.description = "Echo Cancel Sink"
}
}
}
]
Then restarted and set Echo Cancel Sink as default and been using it work about a week now playing online and recorded audio with the mic to test.
In addition, I attempted to create audio EQ .conf file, "20-ally-eq.conf" , in the same directory with the attempt of getting better sound and the proper mic:
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "ROG Ally X Optimized"
media.name = "ROG Ally X Optimized"
filter.graph = {
nodes = [
# --- BAND 1: HIGH PASS (Safety) ---
# Cuts frequencies below 50Hz that the Ally can't play anyway
{
type = builtin
name = band_1
label = bq_highpass
control = { "Freq" = 50.0 "Q" = 0.7 }
}
# --- BAND 2: BASS BOOST (Warmth) ---
# Adds punch to explosions and music
{
type = builtin
name = band_2
label = bq_lowshelf
control = { "Freq" = 110.0 "Q" = 0.7 "Gain" = 4.0 }
}
# --- BAND 3: MID SCOOP (Clarity) ---
# Removes the "cardboard box" sound
{
type = builtin
name = band_3
label = bq_peaking
control = { "Freq" = 450.0 "Q" = 1.0 "Gain" = -2.5 }
}
# --- BAND 4: TREBLE BOOST (Detail) ---
# Highlights footsteps and vocals
{
type = builtin
name = band_4
label = bq_highshelf
control = { "Freq" = 4000.0 "Q" = 0.7 "Gain" = 3.0 }
}
]
links = [
# Connect the bands in order: 1 -> 2 -> 3 -> 4
{ output = "band_1:Out" input = "band_2:In" }
{ output = "band_2:Out" input = "band_3:In" }
{ output = "band_3:Out" input = "band_4:In" }
]
}
capture.props = {
node.name = "eq_input"
media.class = "Audio/Sink"
}
playback.props = {
node.name = "eq_output"
# We lower the global volume slightly to compensate for the Bass boost (+4dB)
# to ensure we never clip. 0.7 is approx -3dB.
audio.volume = 0.7
# ROUTING: Send this straight to your Echo Canceller
node.target = "echo-cancel-sink"
}
}
}
]
This EQ profile being set as default does nothing. But using the default "Family Controller " profile works and seems a bit improved in my opinion. However I post this since it is relevant to my attempt at a solution.